package edu.cmu.graphchi.walks; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; public class LongDumperThread extends DumperThread { protected final DrunkardJob job; protected long[] walks = new long[256 * 1024]; protected int[] vertices = new int[256 * 1024]; protected int idx = 0; public LongDumperThread(LinkedBlockingQueue<BucketsToSend> bucketQueue, AtomicLong pendingWalksToSubmit, AtomicBoolean finished, DrunkardJob job) { super(bucketQueue, pendingWalksToSubmit, finished); this.job = job; } @Override protected void processWalks(BucketsToSend bucket, int i) { LongWalkArray bucketWalks = (LongWalkArray) bucket.walks; long w = bucketWalks.getArray()[i]; LongWalkManager manager = (LongWalkManager) job.getWalkManager(); int v = manager.off(w) + bucket.firstVertex; // Skip walks with the track-bit (hop-bit) not set boolean trackBit = manager.trackBit(w); if (!trackBit) { return; } walks[idx] = w; vertices[idx] = v; idx++; if (idx >= walks.length) { try { job.getCompanion().processWalks(new LongWalkArray(walks), vertices); } catch (Exception err) { err.printStackTrace(); } idx = 0; } } @Override protected void sendRest() { // Send rest try { long[] tmpWalks = new long[idx]; int[] tmpVertices = new int[idx]; System.arraycopy(walks, 0, tmpWalks, 0, idx); System.arraycopy(vertices, 0, tmpVertices, 0, idx); job.getCompanion().processWalks(new LongWalkArray(tmpWalks), tmpVertices); } catch (Exception err) { err.printStackTrace(); } } }