diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/kmer/OwnershipThread.java @ 68:5028fdace37b

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 16:23:26 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/kmer/OwnershipThread.java	Tue Mar 18 16:23:26 2025 -0400
@@ -0,0 +1,75 @@
+package kmer;
+
+import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import shared.KillSwitch;
+import shared.Shared;
+import shared.Tools;
+
+public class OwnershipThread extends Thread {
+	
+	public static void clear(AbstractKmerTable[] tables){
+		process(tables, CLEAR);
+	}
+	
+	public static void initialize(AbstractKmerTable[] tables){
+		process(tables, INITIALIZE);
+	}
+	
+	private static void process(AbstractKmerTable[] tables, int mode){
+		if(tables.length<2){
+			if(mode==INITIALIZE){
+				for(AbstractKmerTable akt : tables){akt.initializeOwnership();}
+			}else if(mode==CLEAR){
+				for(AbstractKmerTable akt : tables){akt.clearOwnership();}
+			}else{
+				KillSwitch.kill("Bad mode: "+mode);
+			}
+			return;
+		}
+		final int threads=Tools.min(Shared.threads(), tables.length);
+		final AtomicInteger next=new AtomicInteger(0);
+		ArrayList<OwnershipThread> alpt=new ArrayList<OwnershipThread>(threads);
+		for(int i=0; i<threads; i++){alpt.add(new OwnershipThread(tables, mode, next));}
+		for(OwnershipThread pt : alpt){pt.start();}
+		
+		for(OwnershipThread pt : alpt){
+			while(pt.getState()!=Thread.State.TERMINATED){
+				try {
+					pt.join();
+				} catch (InterruptedException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+	
+	public OwnershipThread(AbstractKmerTable[] tables_, int mode_, AtomicInteger next_){
+		tables=tables_;
+		mode=mode_;
+		next=next_;
+	}
+	
+	@Override
+	public void run(){
+		for(int i=next.getAndIncrement(); i<tables.length; i=next.getAndIncrement()){
+			if(mode==INITIALIZE){
+				tables[i].initializeOwnership();
+			}else if(mode==CLEAR){
+				tables[i].clearOwnership();
+			}else{
+				KillSwitch.kill("Bad mode: "+mode);
+			}
+		}
+	}
+	
+	private final AbstractKmerTable[] tables;
+	private final AtomicInteger next;
+	private final int mode;
+
+	public static final int INITIALIZE=0;
+	public static final int CLEAR=1;
+	
+}