Combine ifFlipWithNext/Prev() to ifFlipWithNeighbor(boolean withPredecessor) and combine configureUpdateMsgFroPredecessor/Successor to sendUpdateMsg
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
index 0d5448a..20b710c 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
@@ -510,6 +510,24 @@
return true;
}
+
+ /**
+ * check if A need to be filpped with neighbor
+ */
+ public boolean ifFlipWithNeighbor(boolean withPrecessor){
+ if(withPrecessor){
+ if(getVertexValue().getRRList().isEmpty())
+ return true;
+ else
+ return false;
+ } else{
+ if(getVertexValue().getFFList().isEmpty())
+ return true;
+ else
+ return false;
+ }
+ }
+
/**
* check if A need to be filpped with predecessor
*/
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
index 16b7ab3..fac805c 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
@@ -133,6 +133,38 @@
getVertexValue().processMerges(neighborToMeDir, msg.getNode(), kmerSize);
}
+
+ /**
+ * send UPDATE msg boolean: true == P4, false == P2
+ */
+ public void sendUpdateMsg(boolean isP4, boolean isToPredecessor){
+ outgoingMsg.setSourceVertexId(getVertexId());
+ // TODO pass in the vertexId rather than isP4 (removes this blockļ¼
+ if(isP4)
+ outgoingMsg.setFlip(ifFilpWithSuccessor());
+ else
+ outgoingMsg.setFlip(ifFilpWithSuccessor(incomingMsg.getSourceVertexId()));
+
+
+ // TODO pass in isForward
+ byte[] mergeDirs = isToPredecessor ? OutgoingListFlag.values : IncomingListFlag.values;
+ byte[] updateDirs = isToPredecessor ? IncomingListFlag.values : OutgoingListFlag.values;
+
+ for(byte dir : mergeDirs)
+ outgoingMsg.getNode().setEdgeList(dir, getVertexValue().getEdgeList(dir)); // TODO check
+
+ for(byte dir : updateDirs){
+ kmerIterator = getVertexValue().getEdgeList(dir).getKeys();
+ while(kmerIterator.hasNext()){
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= dir;
+ outgoingMsg.setFlag(outFlag);
+ destVertexId.setAsCopy(kmerIterator.next()); //TODO does destVertexId need deep copy?
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+ }
+
/**
* configure UPDATE msg boolean: true == P4, false == P2
*/
@@ -218,21 +250,21 @@
}
- /**
- * This vertex tries to merge with next vertex and send update msg to predecesspr
- */
- public void sendUpdateMsgToPredecessor(boolean flag){
- if(getVertexValue().hasNextDest()) //TODO delete
- broadcastUpdateMsg(flag);
- }
-
- /**
- * This vertex tries to merge with next vertex and send update msg to successor
- */
- public void sendUpdateMsgToSuccessor(boolean flag){
- if(getVertexValue().hasPrevDest())
- broadcastUpdateMsg(flag);
- }
+// /**
+// * This vertex tries to merge with next vertex and send update msg to predecesspr
+// */
+// public void sendUpdateMsgToPredecessor(boolean flag){
+// if(getVertexValue().hasNextDest()) //TODO delete
+// broadcastUpdateMsg(flag);
+// }
+//
+// /**
+// * This vertex tries to merge with next vertex and send update msg to successor
+// */
+// public void sendUpdateMsgToSuccessor(boolean flag){
+// if(getVertexValue().hasPrevDest())
+// broadcastUpdateMsg(flag);
+// }
/**
* override sendUpdateMsg and use incomingMsg as parameter automatically