in compiler/optimizer/src/main/java/org/apache/nemo/compiler/optimizer/policy/PolicyImpl.java [125:159]
private static Boolean checkAnnotatingPass(final IRDAG before, final IRDAG after) {
final Iterator<IRVertex> beforeVertices = before.getTopologicalSort().iterator();
final Iterator<IRVertex> afterVertices = after.getTopologicalSort().iterator();
while (beforeVertices.hasNext() && afterVertices.hasNext()) {
final IRVertex beforeVertex = beforeVertices.next();
final IRVertex afterVertex = afterVertices.next();
// each of vertices should have same ids.
if (!beforeVertex.getId().equals(afterVertex.getId())) {
return false;
}
final Iterator<IREdge> beforeVertexIncomingEdges = before.getIncomingEdgesOf(beforeVertex).iterator();
final Iterator<IREdge> afterVertexIncomingEdges = after.getIncomingEdgesOf(afterVertex).iterator();
final Iterator<IREdge> beforeVertexOutgoingEdges = before.getOutgoingEdgesOf(beforeVertex).iterator();
final Iterator<IREdge> afterVertexOutgoingEdges = after.getOutgoingEdgesOf(afterVertex).iterator();
while (beforeVertexIncomingEdges.hasNext() && afterVertexIncomingEdges.hasNext()) {
// each of them should have same ids.
if (!beforeVertexIncomingEdges.next().getId().equals(afterVertexIncomingEdges.next().getId())) {
return false;
}
}
while (beforeVertexOutgoingEdges.hasNext() && afterVertexOutgoingEdges.hasNext()) {
// each of them should have same ids.
if (!beforeVertexOutgoingEdges.next().getId().equals(afterVertexOutgoingEdges.next().getId())) {
return false;
}
}
// number of edges should match.
if (beforeVertexIncomingEdges.hasNext() || afterVertexIncomingEdges.hasNext()
|| beforeVertexOutgoingEdges.hasNext() || afterVertexOutgoingEdges.hasNext()) {
return false;
}
}
// number of vertices should match.
return !beforeVertices.hasNext() && !afterVertices.hasNext();
}