added iteration test to graph_test.py
[pygr.git] / pygr / cgraph.c
blob1381b78719dde66a89d46d7087028a9fafff6b2b
3 #include "cgraph.h"
6 CDict *cdict_alloc(int n)
8 CDict *d=0;
10 d=calloc(1,sizeof(CDict));
11 if (d==0) /* calloc FAILED!! */
12 return 0;
13 d->dict=calloc(n,sizeof(CDictEntry));
14 if (d->dict==0) { /* calloc FAILED!! */
15 free(d); /* DUMP OUR EMPTY STRUCTURE */
16 return 0;
18 return d; /* RETURN OUR DATA STRUCTURE */
22 int cdict_free(CDict *d)
24 free(d->dict);
25 free(d);
26 return 0;
30 int cdict_qsort_cmp(const void *void_a,const void *void_b)
31 { /* STRAIGHTFORWARD COMPARISON OF SIGNED start VALUES, LONGER INTERVALS 1ST */
32 CDictEntry *a=(CDictEntry *)void_a,*b=(CDictEntry *)void_b;
33 if (a->k<b->k)
34 return -1;
35 else if (a->k>b->k)
36 return 1;
37 else
38 return 0;
42 CDictEntry *cdict_getitem(CDict *d,int k)
44 int l=0,mid,r;
45 CDictEntry *p;
47 if (d==0) /* HANDLE NULL POINTER PROPERLY */
48 return 0;
50 p=d->dict; /* SORTED ARRAY OF ENTRIES */
51 r=d->n;
52 while (l<r) {
53 mid=(l+r)/2;
54 if (p[mid].k==k)
55 return p+mid;
56 else if (p[mid].k<k)
57 l=mid+1;
58 else
59 r=mid;
61 return 0;
66 CGraph *cgraph_alloc(int n)
68 CGraph *d=0;
70 d=calloc(1,sizeof(CGraph));
71 if (d==0) /* calloc FAILED!! */
72 return 0;
73 d->dict=calloc(n,sizeof(CGraphEntry));
74 if (d->dict==0) { /* calloc FAILED!! */
75 free(d); /* DUMP OUR EMPTY STRUCTURE */
76 return 0;
78 return d; /* RETURN OUR DATA STRUCTURE */
82 int cgraph_free(CGraph *d)
84 int i;
85 for (i=0;i<d->n;i++) /* DUMP ALL ASSOCIATED DICTIONARIES */
86 cdict_free(d->dict[i].v);
87 free(d->dict);
88 free(d);
89 return 0;
93 CGraphEntry *cgraph_getitem(CGraph *d,int k)
95 int l=0,mid,r;
96 CGraphEntry *p;
98 if (d==0) /* HANDLE NULL POINTER PROPERLY */
99 return 0;
101 p=d->dict; /* SORTED ARRAY OF ENTRIES */
102 r=d->n;
103 while (l<r) {
104 mid=(l+r)/2;
105 if (p[mid].k==k)
106 return p+mid;
107 else if (p[mid].k<k)
108 l=mid+1;
109 else
110 r=mid;
112 return 0;
116 int *calloc_int(int n)
118 return (int *)calloc(n,sizeof(int));