private static void visitDownstream(int stageId, GraphManager graphManager, long[] bitMap, int depth, GraphVisitor visitor) {
assert(stageId<=graphManager.stageCounter.get()) : "This stage id is out of range";
if (stageId<0) {
return;
}
int mapIndex = stageId>>6;
int mapBit = 1<<(stageId&0x3F);
if ((bitMap[mapIndex]&mapBit)!=0) {
return;
} else {
bitMap[mapIndex] |= mapBit;
if (visitor.visit(graphManager, stageId, depth)) {
int c = GraphManager.getOutputPipeCount(graphManager, stageId);
for(int i = 1; i<=c; i++) {
int outPipeId = GraphManager.getOutputPipe(graphManager, stageId, c).id;
visitDownstream(GraphManager.getRingConsumerId(graphManager, outPipeId), graphManager, bitMap, depth+1, visitor);
}
}
}
}