From: Stephen North Date: Thu, 21 Feb 2013 19:51:51 +0000 (-0500) Subject: Fix edge ordering in cdt compare function so multiedges of the same X-Git-Tag: LAST_LIBGRAPH~32^2~227^2~2^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=38adfe921149636ad400cd794fa21f70fbf67ffd;p=graphviz Fix edge ordering in cdt compare function so multiedges of the same nodes are adjacent in edge scanning. --- diff --git a/lib/cgraph/edge.c b/lib/cgraph/edge.c index f8cae4fdb..8833e0746 100644 --- a/lib/cgraph/edge.c +++ b/lib/cgraph/edge.c @@ -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) */