]> granicus.if.org Git - graphviz/commitdiff
Fix edge ordering in cdt compare function so multiedges of the same
authorStephen North <north@research.att.com>
Thu, 21 Feb 2013 19:51:51 +0000 (14:51 -0500)
committerStephen North <north@research.att.com>
Thu, 21 Feb 2013 19:51:51 +0000 (14:51 -0500)
nodes are adjacent in edge scanning.

lib/cgraph/edge.c

index f8cae4fdb14b89c27842d921e191c2ed0e45d10e..8833e0746ee5751cd42bb60cd78141ff6cfa5bff 100644 (file)
@@ -419,7 +419,7 @@ int agedgeidcmpf(Dict_t * d, void *arg_e0, void *arg_e1, Dtdisc_t * disc)
     return ((v==0)?0:(v<0?-1:1));
 }
 
-/* edge comparison.  OBJTYPE(e) == 0 means ID is a wildcard. */
+/* edge comparison.  for ordered traversal. */
 int agedgeseqcmpf(Dict_t * d, void *arg_e0, void *arg_e1, Dtdisc_t * disc)
 {
     long v;
@@ -429,10 +429,13 @@ int agedgeseqcmpf(Dict_t * d, void *arg_e0, void *arg_e1, Dtdisc_t * disc)
     e0 = arg_e0;
     e1 = arg_e1;
     NOTUSED(disc);
-    v = (AGSEQ(e0) - AGSEQ(e1));
+       assert(arg_e0 && arg_e1);
+       if (e0->node != e1->node) v = AGSEQ(e0->node) - AGSEQ(e1->node);
+       else v = (AGSEQ(e0) - AGSEQ(e1));
     return ((v==0)?0:(v<0?-1:1));
 }
 
+/* indexing for ordered traversal */
 Dtdisc_t Ag_mainedge_seq_disc = {
     0,                         /* pass object ptr      */
     0,                         /* size (ignored)       */
@@ -457,6 +460,7 @@ Dtdisc_t Ag_subedge_seq_disc = {
     NIL(Dtevent_f)
 };
 
+/* indexing for random search */
 Dtdisc_t Ag_mainedge_id_disc = {
     0,                         /* pass object ptr      */
     0,                         /* size (ignored)       */