add the union list function on PostionListWritable
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
index f135292..b056c14 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
@@ -4,6 +4,7 @@
import java.io.DataOutput;
import java.io.IOException;
import java.io.Serializable;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -76,6 +77,27 @@
}
}
+ /**
+ * Save the union of my list and otherList. Uses a temporary HashSet for
+ * uniquefication
+ */
+ public void unionUpdate(PositionListWritable otherList) {
+ int newSize = valueCount + otherList.valueCount;
+ HashSet<PositionWritable> uniqueElements = new HashSet<PositionWritable>(
+ newSize);
+ for (PositionWritable pos : this) {
+ uniqueElements.add(pos);
+ }
+ for (PositionWritable pos : otherList) {
+ uniqueElements.add(pos);
+ }
+ valueCount = 0;
+ setSize(newSize);
+ for (PositionWritable pos : uniqueElements) {
+ append(pos);
+ }
+ }
+
public static int getCountByDataLength(int length) {
if (length % PositionWritable.LENGTH != 0) {
throw new IllegalArgumentException("Length of positionlist is invalid");