More fixes for large ID and SEQ values
authornorth <devnull@localhost>
Mon, 15 Feb 2010 22:45:43 +0000 (22:45 +0000)
committernorth <devnull@localhost>
Mon, 15 Feb 2010 22:45:43 +0000 (22:45 +0000)
lib/cgraph/edge.c
lib/cgraph/graph.c

index 75dd75f4a4c2483baadf548d4741892693d62331..415c5da95c297612c1b647edb578340434431ab3 100644 (file)
@@ -400,41 +400,41 @@ Agedge_t *agsubedge(Agraph_t * g, Agedge_t * e, int cflag)
 /* edge comparison.  OBJTYPE(e) == 0 means ID is a wildcard. */
 int agedgeidcmpf(Dict_t * d, void *arg_e0, void *arg_e1, Dtdisc_t * disc)
 {
-    int rv;
+    long v;
     Agedge_t *e0, *e1;
 
     NOTUSED(d);
     e0 = arg_e0;
     e1 = arg_e1;
     NOTUSED(disc);
-    rv = AGID(e0->node) - AGID(e1->node);
-    if (rv == 0) {             /* same node */
+    v = AGID(e0->node) - AGID(e1->node);
+    if (v == 0) {              /* same node */
        if ((AGTYPE(e0) == 0) || (AGTYPE(e1) == 0))
-           rv = 0;
+           v = 0;
        else
-           rv = AGID(e0) - AGID(e1);
+           v = AGID(e0) - AGID(e1);
     }
-    return rv;
+    return ((v==0)?0:(v<0?-1:1));
 }
 
 /* edge comparison.  OBJTYPE(e) == 0 means ID is a wildcard. */
 int agedgeseqcmpf(Dict_t * d, void *arg_e0, void *arg_e1, Dtdisc_t * disc)
 {
-    int rv;
+    long v;
     Agedge_t *e0, *e1;
 
     NOTUSED(d);
     e0 = arg_e0;
     e1 = arg_e1;
     NOTUSED(disc);
-    rv = AGID(e0->node) - AGID(e1->node);
-    if (rv == 0) {             /* same node */
+    v = AGID(e0->node) - AGID(e1->node);
+    if (v == 0) {              /* same node */
        if ((AGTYPE(e0) == 0) || (AGTYPE(e1) == 0))
-           rv = 0;
+           v = 0;
        else
-           rv = AGSEQ(e0) - AGSEQ(e1);
+           v = AGSEQ(e0) - AGSEQ(e1);
     }
-    return rv;
+    return ((v==0)?0:(v<0?-1:1));
 }
 
 Dtdisc_t Ag_mainedge_seq_disc = {
index 2685d4a6ffbe6bb4f295e01ae7bc209e7239e954..82713a28feeef3abf3eba68780480437685cb574 100644 (file)
@@ -238,18 +238,22 @@ int agdegree(Agraph_t * g, Agnode_t * n, int want_in, int want_out)
 
 int agraphidcmpf(Dict_t * d, void *arg0, void *arg1, Dtdisc_t * disc)
 {
+    long       v;
     Agraph_t *sg0, *sg1;
     sg0 = (Agraph_t *) arg0;
     sg1 = (Agraph_t *) arg1;
-    return (AGID(sg0) - AGID(sg1));
+    v = (AGID(sg0) - AGID(sg1));
+    return ((v==0)?0:(v<0?-1:1));
 }
 
 int agraphseqcmpf(Dict_t * d, void *arg0, void *arg1, Dtdisc_t * disc)
 {
+    long       v;
     Agraph_t *sg0, *sg1;
     sg0 = (Agraph_t *) arg0;
     sg1 = (Agraph_t *) arg1;
-    return (AGSEQ(sg0) - AGSEQ(sg1));
+    v = (AGSEQ(sg0) - AGSEQ(sg1));
+    return ((v==0)?0:(v<0?-1:1));
 }
 
 Dtdisc_t Ag_subgraph_id_disc = {
@@ -272,3 +276,11 @@ Agdesc_t Agundirected = { 0, 0, 0, 1 };
 Agdesc_t Agstrictundirected = { 0, 1, 0, 1 };
 
 Agdisc_t AgDefaultDisc = { &AgMemDisc, &AgIdDisc, &AgIoDisc };
+
+
+#include <stdio.h>
+void scndump(Agraph_t *g, char *file)
+{
+       FILE * f = fopen(file,"w");
+       if (f) {agwrite(g,f); fclose(f);}
+}