diff -r f13472d00645 -r 1e07f6ab3118 lib/browser/GraphBrowser/Vertex.java --- a/lib/browser/GraphBrowser/Vertex.java Thu Oct 06 08:58:58 2005 +0200 +++ b/lib/browser/GraphBrowser/Vertex.java Thu Oct 06 10:13:34 2005 +0200 @@ -134,22 +134,24 @@ /********************************************************************/ public Vector getPreds() { - Vector v1=new Vector(10,10); - Vertex vx1,vx2; - Enumeration e1,e2; + Vector preds=new Vector(10,10); + Vector todo=(Vector)(parents.clone()); + Vertex vx1,vx2; + Enumeration e; - e1=getParents(); - while (e1.hasMoreElements()) { - vx1=(Vertex)(e1.nextElement()); - if (v1.indexOf(vx1)<0) v1.addElement(vx1); - e2=vx1.getPreds().elements(); - while (e2.hasMoreElements()) { - vx2=(Vertex)(e2.nextElement()); - if (v1.indexOf(vx2)<0) v1.addElement(vx2); - } + while (!todo.isEmpty()) { + vx1=(Vertex)(todo.lastElement()); + todo.removeElementAt(todo.size()-1); + preds.addElement(vx1); + e=vx1.parents.elements(); + while (e.hasMoreElements()) { + vx2=(Vertex)(e.nextElement()); + if (preds.indexOf(vx2)<0 && todo.indexOf(vx2)<0) + todo.addElement(vx2); } + } - return v1; + return preds; } /********************************************************************/ @@ -157,22 +159,24 @@ /********************************************************************/ public Vector getSuccs() { - Vector v1=new Vector(10,10); - Vertex vx1,vx2; - Enumeration e1,e2; + Vector succs=new Vector(10,10); + Vector todo=(Vector)(children.clone()); + Vertex vx1,vx2; + Enumeration e; - e1=getChildren(); - while (e1.hasMoreElements()) { - vx1=(Vertex)(e1.nextElement()); - if (v1.indexOf(vx1)<0) v1.addElement(vx1); - e2=vx1.getSuccs().elements(); - while (e2.hasMoreElements()) { - vx2=(Vertex)(e2.nextElement()); - if (v1.indexOf(vx2)<0) v1.addElement(vx2); - } + while (!todo.isEmpty()) { + vx1=(Vertex)(todo.lastElement()); + todo.removeElementAt(todo.size()-1); + succs.addElement(vx1); + e=vx1.children.elements(); + while (e.hasMoreElements()) { + vx2=(Vertex)(e.nextElement()); + if (succs.indexOf(vx2)<0 && todo.indexOf(vx2)<0) + todo.addElement(vx2); } + } - return v1; + return succs; } public void setX(int x) {this.x=x;}