public void visit(CellVisitor visitor,mxGraphHierarchyNode[] dfsRoots,boolean trackAncestors,Set<mxGraphHierarchyNode> seenNodes){
  if (dfsRoots != null) {
    for (int i=0; i < dfsRoots.length; i++) {
      mxGraphHierarchyNode internalNode=dfsRoots[i];
      if (internalNode != null) {
        if (seenNodes == null) {
          seenNodes=new HashSet<mxGraphHierarchyNode>();
        }
        if (trackAncestors) {
          internalNode.hashCode=new int[2];
          internalNode.hashCode[0]=dfsCount;
          internalNode.hashCode[1]=i;
          dfs(null,internalNode,null,visitor,seenNodes,internalNode.hashCode,i,0);
        }
 else {
          dfs(null,internalNode,null,visitor,seenNodes,0);
        }
      }
    }
    dfsCount++;
  }
}

public void visit ( CellVisitor visitor , mxGraphHierarchyNode [ ] dfsRoots , boolean trackAncestors , Set < mxGraphHierarchyNode > seenNodes ) { if ( dfsRoots != null ) { for ( int i = 0 ; i < dfsRoots . length ; i ++ ) { mxGraphHierarchyNode internalNode = dfsRoots [ i ] ; if ( internalNode != null ) { if ( seenNodes == null ) { seenNodes = new HashSet < mxGraphHierarchyNode > ( ) ; } if ( trackAncestors ) { internalNode . hashCode = new int [ 2 ] ; internalNode . hashCode [ 0 ] = dfsCount ; internalNode . hashCode [ 1 ] = i ; dfs ( null , internalNode , null , visitor , seenNodes , internalNode . hashCode , i , 0 ) ; } else { dfs ( null , internalNode , null , visitor , seenNodes , 0 ) ; } } } dfsCount ++ ; } }
a depth first search through the internal hierarchy model
