update KmerListWritable to use fixed-length kmers
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
index 26c4088..5ca7946 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
@@ -36,8 +36,8 @@
private static final long serialVersionUID = 1L;
protected static final byte[] EMPTY_BYTES = {};
- protected static int lettersInKmer = -1;
- protected static int bytesUsed = -1;
+ protected static int lettersInKmer;
+ protected static int bytesUsed;
protected byte[] bytes;
protected int offset;
@@ -149,10 +149,14 @@
return (byte) ((bytes[offset + bytesUsed - 1 - posByte] >> shift) & 0x3);
}
- public int getKmerLength() {
+ public static int getKmerLength() {
return lettersInKmer;
}
+ public static int getBytesPerKmer() {
+ return bytesUsed;
+ }
+
@Override
public byte[] getBytes() {
return bytes;
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
index 6bf8dac..995643e 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
@@ -10,259 +10,246 @@
import org.apache.hadoop.io.Writable;
-import edu.uci.ics.genomix.data.KmerUtil;
import edu.uci.ics.genomix.data.Marshal;
-
/**
- * A list of fixed-length kmers. The length of this list is stored internally
- *
+ * A list of fixed-length kmers. The length of this list is stored internally.
*/
-public class KmerListWritable implements Writable, Iterable<KmerBytesWritable>,
- Serializable {
- private static final long serialVersionUID = 1L;
- protected static final byte[] EMPTY_BYTES = { 0, 0, 0, 0 };
- protected static final int HEADER_SIZE = 4;
-
- protected byte[] storage;
- protected int offset;
- protected int valueCount;
-
- protected int bytesPerKmer = 0;
- protected int lettersPerKmer = 0;
- private KmerBytesWritable posIter = new KmerBytesWritable();
-
- public KmerListWritable() {
- this.storage = EMPTY_BYTES;
- this.valueCount = 0;
- this.offset = 0;
- }
-
- public KmerListWritable(int kmerlength) {
- this();
- this.lettersPerKmer = kmerlength;
- this.bytesPerKmer = KmerUtil.getByteNumFromK(kmerlength);
- }
-
- public KmerListWritable(int kmerlength, byte[] data, int offset) {
- this.lettersPerKmer = kmerlength;
- this.bytesPerKmer = KmerUtil.getByteNumFromK(kmerlength);
- setNewReference(data, offset);
- }
-
- public KmerListWritable(List<KmerBytesWritable> kmers) {
- this();
- setSize(kmers.size()); // reserve space for all elements
- for (KmerBytesWritable kmer : kmers) {
- if (kmer.getKmerLength() != lettersPerKmer)
- throw new IllegalArgumentException("Kmer " + kmer.toString()
- + " is of incorrect length (l=" + kmer.getKmerLength()
- + ") for this list (should be " + lettersPerKmer + ").");
- append(kmer);
- }
- }
-
- public void setNewReference(byte[] data, int offset) {
- this.valueCount = Marshal.getInt(data, offset);
- this.storage = data;
- this.offset = offset;
- }
-
- public void append(KmerBytesWritable kmer) {
- setSize((1 + valueCount) * bytesPerKmer);
- System.arraycopy(kmer.getBytes(), 0, storage, offset + valueCount
- * bytesPerKmer, bytesPerKmer);
- valueCount += 1;
- }
-
- /*
- * Append the otherList to the end of myList
- */
- public void appendList(KmerListWritable otherList) {
- if (otherList.valueCount > 0) {
- setSize((valueCount + otherList.valueCount) * bytesPerKmer);
- // copy contents of otherList into the end of my storage
- System.arraycopy(otherList.storage, otherList.offset, storage,
- offset + valueCount * bytesPerKmer, otherList.valueCount
- * bytesPerKmer);
- valueCount += otherList.valueCount;
- }
- }
-
- /**
- * Save the union of my list and otherList. Uses a temporary HashSet for
- * uniquefication
- */
- public void unionUpdate(KmerListWritable otherList) {
- int newSize = valueCount + otherList.valueCount;
- HashSet<KmerBytesWritable> uniqueElements = new HashSet<KmerBytesWritable>(
- newSize);
- for (KmerBytesWritable kmer : this) {
- uniqueElements.add(kmer);
- }
- for (KmerBytesWritable kmer : otherList) {
- uniqueElements.add(kmer);
- }
- valueCount = 0;
- setSize(newSize);
- for (KmerBytesWritable kmer : uniqueElements) {
- append(kmer);
- }
- }
-
- protected void setSize(int size) {
- if (size > getCapacity()) {
- setCapacity((size * 3 / 2));
- }
- }
-
- protected int getCapacity() {
- return storage.length - offset;
- }
-
- protected void setCapacity(int new_cap) {
- if (new_cap > getCapacity()) {
- byte[] new_data = new byte[new_cap];
- if (storage.length - offset > 0) {
- System.arraycopy(storage, offset, new_data, 0, storage.length
- - offset);
- }
- storage = new_data;
- offset = 0;
- }
- }
-
- public void reset(int kmerSize) {
- lettersPerKmer = kmerSize;
- bytesPerKmer = KmerUtil.getByteNumFromK(lettersPerKmer);
- storage = EMPTY_BYTES;
- valueCount = 0;
- offset = 0;
- }
-
- public KmerBytesWritable getPosition(int i) {
- if (i >= valueCount) {
- throw new ArrayIndexOutOfBoundsException("No such positions");
- }
- posIter.setAsReference(lettersPerKmer, storage, offset + i
- * bytesPerKmer);
- return posIter;
- }
-
- public void set(KmerListWritable otherList) {
- this.lettersPerKmer = otherList.lettersPerKmer;
- this.bytesPerKmer = otherList.bytesPerKmer;
- set(otherList.valueCount, otherList.storage, otherList.offset);
- }
-
- public void set(int valueCount, byte[] newData, int offset) {
- this.valueCount = valueCount;
- setSize(valueCount * bytesPerKmer);
- if (valueCount > 0) {
- System.arraycopy(newData, offset, storage, this.offset, valueCount
- * bytesPerKmer);
- }
- }
-
- @Override
- public Iterator<KmerBytesWritable> iterator() {
- Iterator<KmerBytesWritable> it = new Iterator<KmerBytesWritable>() {
-
- private int currentIndex = 0;
-
- @Override
- public boolean hasNext() {
- return currentIndex < valueCount;
- }
-
- @Override
- public KmerBytesWritable next() {
- return getPosition(currentIndex++);
- }
-
- @Override
- public void remove() {
- if (currentIndex < valueCount)
- System.arraycopy(storage, offset + currentIndex
- * bytesPerKmer, storage, offset
- + (currentIndex - 1) * bytesPerKmer,
- (valueCount - currentIndex) * bytesPerKmer);
- valueCount--;
- currentIndex--;
- }
- };
- return it;
- }
-
- /*
- * remove the first instance of `toRemove`. Uses a linear scan. Throws an
- * exception if not in this list.
- */
- public void remove(KmerBytesWritable toRemove, boolean ignoreMissing) {
- Iterator<KmerBytesWritable> posIterator = this.iterator();
- while (posIterator.hasNext()) {
- if (toRemove.equals(posIterator.next())) {
- posIterator.remove();
- return;
- }
- }
- if (!ignoreMissing) {
- throw new ArrayIndexOutOfBoundsException("the KmerBytesWritable `"
- + toRemove.toString() + "` was not found in this list.");
- }
- }
-
- public void remove(KmerBytesWritable toRemove) {
- remove(toRemove, false);
- }
-
- @Override
- public void readFields(DataInput in) throws IOException {
- this.valueCount = in.readInt();
- setSize(valueCount * bytesPerKmer);// kmerByteSize
- in.readFully(storage, offset, valueCount * bytesPerKmer);// kmerByteSize
- }
-
- @Override
- public void write(DataOutput out) throws IOException {
- out.writeInt(valueCount);
- out.write(storage, offset, valueCount * bytesPerKmer);
- }
-
- public int getCountOfPosition() {
- return valueCount;
- }
-
- public byte[] getByteArray() {
- return storage;
- }
-
- public int getStartOffset() {
- return offset;
- }
-
- public int getLength() {
- return valueCount * bytesPerKmer;
- }
-
- @Override
- public String toString() {
- StringBuilder sbuilder = new StringBuilder();
- sbuilder.append('[');
- for (int i = 0; i < valueCount; i++) {
- sbuilder.append(getPosition(i).toString());
- sbuilder.append(',');
- }
- if (valueCount > 0) {
- sbuilder.setCharAt(sbuilder.length() - 1, ']');
- } else {
- sbuilder.append(']');
- }
- return sbuilder.toString();
- }
-
@Override
public int hashCode() {
return Marshal.hashBytes(getByteArray(), getStartOffset(), getLength());
}
+public class KmerListWritable implements Writable, Iterable<KmerBytesWritable>, Serializable {
+ private static final long serialVersionUID = 1L;
+ protected static final byte[] EMPTY_BYTES = { 0, 0, 0, 0 };
+ protected static final int HEADER_SIZE = 4;
+
+ protected byte[] storage;
+ protected int offset;
+ protected int valueCount;
+
+ private KmerBytesWritable posIter = new KmerBytesWritable();
+
+ public KmerListWritable() {
+ this.storage = EMPTY_BYTES;
+ this.valueCount = 0;
+ this.offset = 0;
+ }
+
+ public KmerListWritable(byte[] data, int offset) {
+ setNewReference(data, offset);
+ }
+
+ public KmerListWritable(List<KmerBytesWritable> kmers) {
+ this();
+ setSize(kmers.size() * KmerBytesWritable.getBytesPerKmer() + HEADER_SIZE); // reserve space for all elements
+ for (KmerBytesWritable kmer : kmers) {
+ append(kmer);
+ }
+ }
+
+ public void setNewReference(byte[] data, int offset) {
+ valueCount = Marshal.getInt(data, offset);
+ if (valueCount * KmerBytesWritable.getBytesPerKmer() > data.length - offset) {
+ throw new IllegalArgumentException("Specified data buffer (len=" + (data.length - offset)
+ + ") is not large enough to store requested number of elements (" + valueCount + ")!");
+ }
+ this.storage = data;
+ this.offset = offset;
+ }
+
+ public void append(KmerBytesWritable kmer) {
+ setSize((1 + valueCount) * KmerBytesWritable.getBytesPerKmer() + HEADER_SIZE);
+ System.arraycopy(kmer.getBytes(), 0, storage,
+ offset + HEADER_SIZE + valueCount * KmerBytesWritable.getBytesPerKmer(),
+ KmerBytesWritable.getBytesPerKmer());
+ valueCount += 1;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ /*
+ * Append the otherList to the end of myList
+ */
+ public void appendList(KmerListWritable otherList) {
+ if (otherList.valueCount > 0) {
+ setSize((valueCount + otherList.valueCount) * KmerBytesWritable.getBytesPerKmer() + HEADER_SIZE);
+ // copy contents of otherList into the end of my storage
+ System.arraycopy(otherList.storage, otherList.offset + HEADER_SIZE, storage, offset + HEADER_SIZE
+ + valueCount * KmerBytesWritable.getBytesPerKmer(),
+ otherList.valueCount * KmerBytesWritable.getBytesPerKmer());
+ valueCount += otherList.valueCount;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+ }
+
+ /**
+ * Save the union of my list and otherList. Uses a temporary HashSet for
+ * uniquefication
+ */
+ public void unionUpdate(KmerListWritable otherList) {
+ int newSize = valueCount + otherList.valueCount;
+ HashSet<KmerBytesWritable> uniqueElements = new HashSet<KmerBytesWritable>(newSize);
+ for (KmerBytesWritable kmer : this) {
+ uniqueElements.add(kmer);
+ }
+ for (KmerBytesWritable kmer : otherList) {
+ uniqueElements.add(kmer);
+ }
+ valueCount = 0;
+ setSize(newSize * KmerBytesWritable.getBytesPerKmer() + HEADER_SIZE);
+ for (KmerBytesWritable kmer : uniqueElements) {
+ append(kmer);
+ }
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ protected void setSize(int size) {
+ if (size > getCapacity()) {
+ setCapacity((size * 3 / 2));
+ }
+ }
+
+ protected int getCapacity() {
+ return storage.length - offset;
+ }
+
+ protected void setCapacity(int new_cap) {
+ if (new_cap > getCapacity()) {
+ byte[] new_data = new byte[new_cap];
+ if (storage.length - offset > 0) {
+ System.arraycopy(storage, offset, new_data, 0, storage.length - offset);
+ }
+ storage = new_data;
+ offset = 0;
+ }
+ }
+
+ public void reset() {
+ storage = EMPTY_BYTES;
+ valueCount = 0;
+ offset = 0;
+ }
+
+ public KmerBytesWritable getPosition(int i) {
+ if (i >= valueCount) {
+ throw new ArrayIndexOutOfBoundsException("No such positions");
+ }
+ posIter.setAsReference(storage, offset + HEADER_SIZE + i * KmerBytesWritable.getBytesPerKmer());
+ return posIter;
+ }
+
+ public void setCopy(KmerListWritable otherList) {
+ setCopy(otherList.storage, otherList.offset);
+ }
+
+ /**
+ * save as a copy of the given data buffer, including the header
+ */
+ public void setCopy(byte[] newData, int offset) {
+ valueCount = Marshal.getInt(newData, offset);
+ setSize(valueCount * KmerBytesWritable.getBytesPerKmer() + HEADER_SIZE);
+ if (valueCount > 0) {
+ System.arraycopy(newData, offset + HEADER_SIZE, storage, this.offset + HEADER_SIZE, valueCount
+ * KmerBytesWritable.getBytesPerKmer());
+ }
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ @Override
+ public Iterator<KmerBytesWritable> iterator() {
+ Iterator<KmerBytesWritable> it = new Iterator<KmerBytesWritable>() {
+
+ private int currentIndex = 0;
+
+ @Override
+ public boolean hasNext() {
+ return currentIndex < valueCount;
+ }
+
+ @Override
+ public KmerBytesWritable next() {
+ return getPosition(currentIndex++);
+ }
+
+ @Override
+ public void remove() {
+ if (currentIndex < valueCount)
+ System.arraycopy(storage, offset + currentIndex * KmerBytesWritable.getBytesPerKmer(), storage,
+ offset + (currentIndex - 1) * KmerBytesWritable.getBytesPerKmer(),
+ (valueCount - currentIndex) * KmerBytesWritable.getBytesPerKmer());
+ valueCount--;
+ currentIndex--;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+ };
+ return it;
+ }
+
+ /*
+ * remove the first instance of `toRemove`. Uses a linear scan. Throws an
+ * exception if not in this list.
+ */
+ public void remove(KmerBytesWritable toRemove, boolean ignoreMissing) {
+ Iterator<KmerBytesWritable> posIterator = this.iterator();
+ while (posIterator.hasNext()) {
+ if (toRemove.equals(posIterator.next())) {
+ posIterator.remove();
+ return;
+ }
+ }
+ if (!ignoreMissing) {
+ throw new ArrayIndexOutOfBoundsException("the KmerBytesWritable `" + toRemove.toString()
+ + "` was not found in this list.");
+ }
+ }
+
+ public void remove(KmerBytesWritable toRemove) {
+ remove(toRemove, false);
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ valueCount = in.readInt();
+ setSize(valueCount * KmerBytesWritable.getBytesPerKmer() + HEADER_SIZE);
+ in.readFully(storage, offset + HEADER_SIZE, valueCount * KmerBytesWritable.getBytesPerKmer() - HEADER_SIZE);
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ out.write(storage, offset, valueCount * KmerBytesWritable.getBytesPerKmer() + HEADER_SIZE);
+ }
+
+ public int getCountOfPosition() {
+ return valueCount;
+ }
+
+ public byte[] getByteArray() {
+ return storage;
+ }
+
+ public int getStartOffset() {
+ return offset;
+ }
+
+ public int getLength() {
+ return valueCount * KmerBytesWritable.getBytesPerKmer() + HEADER_SIZE;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sbuilder = new StringBuilder();
+ sbuilder.append('[');
+ for (int i = 0; i < valueCount; i++) {
+ sbuilder.append(getPosition(i).toString());
+ sbuilder.append(',');
+ }
+ if (valueCount > 0) {
+ sbuilder.setCharAt(sbuilder.length() - 1, ']');
+ } else {
+ sbuilder.append(']');
+ }
+ return sbuilder.toString();
+ }
+
}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
index 98e37dc..81c9c92 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
@@ -59,10 +59,10 @@
public void set(PositionListWritable nodeIdList, KmerListWritable FFList, KmerListWritable FRList,
KmerListWritable RFList, KmerListWritable RRList, KmerBytesWritable kmer) {
this.nodeIdList.set(nodeIdList);
- this.forwardForwardList.set(FFList);
- this.forwardReverseList.set(FRList);
- this.reverseForwardList.set(RFList);
- this.reverseReverseList.set(RRList);
+ this.forwardForwardList.setCopy(FFList);
+ this.forwardReverseList.setCopy(FRList);
+ this.reverseForwardList.setCopy(RFList);
+ this.reverseReverseList.setCopy(RRList);
this.kmer.setAsCopy(kmer);
}
@@ -122,19 +122,19 @@
}
public void setFFList(KmerListWritable forwardForwardList) {
- this.forwardForwardList.set(forwardForwardList);
+ this.forwardForwardList.setCopy(forwardForwardList);
}
public void setFRList(KmerListWritable forwardReverseList) {
- this.forwardReverseList.set(forwardReverseList);
+ this.forwardReverseList.setCopy(forwardReverseList);
}
public void setRFList(KmerListWritable reverseForwardList) {
- this.reverseForwardList.set(reverseForwardList);
+ this.reverseForwardList.setCopy(reverseForwardList);
}
public void setRRList(KmerListWritable reverseReverseList) {
- this.reverseReverseList.set(reverseReverseList);
+ this.reverseReverseList.setCopy(reverseReverseList);
}
public KmerListWritable getListFromDir(byte dir) {
@@ -212,14 +212,14 @@
}
public void mergeForwardNext(NodeWritable nextNode, int initialKmerSize) {
- this.forwardForwardList.set(nextNode.forwardForwardList);
- this.forwardReverseList.set(nextNode.forwardReverseList);
+ this.forwardForwardList.setCopy(nextNode.forwardForwardList);
+ this.forwardReverseList.setCopy(nextNode.forwardReverseList);
kmer.mergeWithFFKmer(initialKmerSize, nextNode.getKmer());
}
public void mergeForwardPre(NodeWritable preNode, int initialKmerSize) {
- this.reverseForwardList.set(preNode.reverseForwardList);
- this.reverseReverseList.set(preNode.reverseReverseList);
+ this.reverseForwardList.setCopy(preNode.reverseForwardList);
+ this.reverseReverseList.setCopy(preNode.reverseReverseList);
kmer.mergeWithRRKmer(initialKmerSize, preNode.getKmer());
}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
index 1bbb771..6e95653 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
@@ -20,20 +20,22 @@
//one kmer in list and reset each time
KmerBytesWritable kmer;
for (int i = 1; i < 200; i++) {
- kmer = new KmerBytesWritable(i);
+ KmerBytesWritable.setGlobalKmerLength(i);
+ kmer = new KmerBytesWritable();
String randomString = generateString(i);
byte[] array = randomString.getBytes();
kmer.setByRead(array, 0);
- kmerList.reset(kmer.getKmerLength());
+ kmerList.reset();
kmerList.append(kmer);
- Assert.assertEquals(kmerList.getPosition(0).toString(), randomString);
+ Assert.assertEquals(randomString, kmerList.getPosition(0).toString());
Assert.assertEquals(1, kmerList.getCountOfPosition());
}
- kmerList.reset(0);
+ kmerList.reset();
//add one more kmer each time and fix kmerSize
for (int i = 0; i < 200; i++) {
- kmer = new KmerBytesWritable(5);
+ KmerBytesWritable.setGlobalKmerLength(5);
+ kmer = new KmerBytesWritable();
String randomString = generateString(5);
byte[] array = randomString.getBytes();
kmer.setByRead(array, 0);
@@ -44,8 +46,8 @@
byte [] another = new byte [kmerList.getLength()*2];
int start = 20;
- System.arraycopy(kmerList.getByteArray(), 0, another, start, kmerList.getLength());
- KmerListWritable plist2 = new KmerListWritable(kmerList.kmerlength, kmerList.getCountOfPosition(),another,start);
+ System.arraycopy(kmerList.getByteArray(), kmerList.getStartOffset(), another, start, kmerList.getLength());
+ KmerListWritable plist2 = new KmerListWritable(another, start);
for(int i = 0; i < plist2.getCountOfPosition(); i++){
Assert.assertEquals(kmerList.getPosition(i).toString(), plist2.getPosition(i).toString());
}
@@ -59,12 +61,13 @@
int i;
KmerBytesWritable kmer;
for (i = 0; i < 200; i++) {
- kmer = new KmerBytesWritable(5);
+ KmerBytesWritable.setGlobalKmerLength(5);
+ kmer = new KmerBytesWritable();
String randomString = generateString(5);
byte[] array = randomString.getBytes();
kmer.setByRead(array, 0);
kmerList.append(kmer);
- Assert.assertEquals(kmerList.getPosition(i).toString(), randomString);
+ Assert.assertEquals(randomString, kmerList.getPosition(i).toString());
Assert.assertEquals(i + 1, kmerList.getCountOfPosition());
}
@@ -72,12 +75,12 @@
KmerBytesWritable tmpKmer = new KmerBytesWritable();
i = 0;
KmerListWritable copyList = new KmerListWritable();
- copyList.set(kmerList);
+ copyList.setCopy(kmerList);
Iterator<KmerBytesWritable> iterator;
for(int j = 0; j < 5; j++){
iterator = copyList.iterator();
byte[] array = kmerList.getPosition(j).toString().getBytes();
- KmerBytesWritable deletePos = new KmerBytesWritable(5);
+ KmerBytesWritable deletePos = new KmerBytesWritable();
deletePos.setByRead(array, 0);
while(iterator.hasNext()){
tmpKmer = iterator.next();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java
index c35ad7f..29872fa 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java
@@ -24,8 +24,8 @@
}
public void set(AdjacencyListWritable adjacencyList){
- forwardList.set(adjacencyList.getForwardList());
- reverseList.set(adjacencyList.getReverseList());
+ forwardList.setCopy(adjacencyList.getForwardList());
+ reverseList.setCopy(adjacencyList.getReverseList());
}
public void reset(){