1/* { dg-do compile } */ 2/* { dg-options "-O3" } */ 3 4typedef long unsigned int size_t; 5typedef struct 6{ 7} 8box; 9typedef struct 10{ 11} 12textpara_t; 13typedef struct _dtlink_s Dtlink_t; 14typedef struct _dtdisc_s Dtdisc_t; 15typedef struct _dtmethod_s Dtmethod_t; 16typedef struct _dt_s Dt_t; 17typedef void *(*Dtmemory_f) (Dt_t *, void *, size_t, Dtdisc_t *); 18typedef void *(*Dtsearch_f) (Dt_t *, void *, int); 19typedef void *(*Dtmake_f) (Dt_t *, void *, Dtdisc_t *); 20typedef void (*Dtfree_f) (Dt_t *, void *, Dtdisc_t *); 21typedef int (*Dtcompar_f) (Dt_t *, void *, void *, Dtdisc_t *); 22typedef unsigned int (*Dthash_f) (Dt_t *, void *, Dtdisc_t *); 23typedef int (*Dtevent_f) (Dt_t *, int, void *, Dtdisc_t *); 24struct _dtlink_s 25{ 26 Dtlink_t *right; 27}; 28struct _dtdisc_s 29{ 30 int key; 31 int size; 32 int link; 33 Dtmake_f makef; 34 Dtfree_f freef; 35 Dtcompar_f comparf; 36 Dthash_f hashf; 37 Dtmemory_f memoryf; 38 Dtevent_f eventf; 39}; 40struct _dt_s 41{ 42 Dtsearch_f searchf; 43}; 44extern Dtmethod_t *Dtobag; 45extern Dt_t *dtopen (Dtdisc_t *, Dtmethod_t *); 46extern Dtlink_t *dtflatten (Dt_t *); 47typedef struct Agobj_s Agobj_t; 48typedef struct Agraph_s Agraph_t; 49typedef struct Agnode_s Agnode_t; 50typedef struct Agedge_s Agedge_t; 51typedef struct Agdesc_s Agdesc_t; 52typedef struct Agdisc_s Agdisc_t; 53typedef struct Agrec_s Agrec_t; 54struct Agobj_s 55{ 56 Agrec_t *data; 57}; 58struct Agdesc_s 59{ 60}; 61extern Agraph_t *agopen (char *name, Agdesc_t desc, Agdisc_t * disc); 62extern Agnode_t *agfstnode (Agraph_t * g); 63extern Agnode_t *agnxtnode (Agraph_t * g, Agnode_t * n); 64extern Agedge_t *agedge (Agraph_t * g, Agnode_t * t, Agnode_t * h, char *name, 65 int createflag); 66extern Agedge_t *agfstout (Agraph_t * g, Agnode_t * n); 67extern Agedge_t *agnxtout (Agraph_t * g, Agedge_t * e); 68extern Agdesc_t Agdirected, Agstrictdirected, Agundirected, 69 Agstrictundirected; 70typedef struct Agraph_s graph_t; 71typedef struct Agnode_s node_t; 72typedef struct Agedge_s edge_t; 73typedef union inside_t 74{ 75 unsigned short minlen; 76} 77Agedgeinfo_t; 78extern void *gmalloc (size_t); 79typedef enum 80{ AM_NONE, AM_VOR, AM_SCALE, AM_NSCALE, AM_SCALEXY, AM_PUSH, AM_PUSHPULL, 81 AM_ORTHO, AM_ORTHO_YX, AM_ORTHOXY, AM_ORTHOYX, AM_PORTHO, AM_PORTHO_YX, 82 AM_PORTHOXY, AM_PORTHOYX, AM_COMPRESS, AM_VPSC, AM_IPSEP, AM_PRISM } 83adjust_mode; 84typedef struct nitem 85{ 86 Dtlink_t link; 87 int val; 88 node_t *cnode; 89 box bb; 90} 91nitem; 92typedef int (*distfn) (box *, box *); 93typedef int (*intersectfn) (nitem *, nitem *); 94int agnnodes (graph_t *); 95int overlaps (nitem *, int); 96static int 97cmpitem (Dt_t * d, int *p1, int *p2, Dtdisc_t * disc) 98{ 99} 100static Dtdisc_t constr = 101 { __builtin_offsetof (nitem, val), sizeof (int), __builtin_offsetof (nitem, 102 link), 103((Dtmake_f) 0), ((Dtfree_f) 0), (Dtcompar_f) cmpitem, ((Dthash_f) 0), ((Dtmemory_f) 0), 104((Dtevent_f) 0) }; 105static int 106distX (box * b1, box * b2) 107{ 108} 109 110static int 111intersectY0 (nitem * p, nitem * q) 112{ 113} 114 115static int 116intersectY (nitem * p, nitem * q) 117{ 118} 119 120static void 121mapGraphs (graph_t * g, graph_t * cg, distfn dist) 122{ 123 node_t *n; 124 edge_t *e; 125 edge_t *ce; 126 node_t *t; 127 node_t *h; 128 nitem *tp; 129 nitem *hp; 130 int delta; 131 for (n = agfstnode (g); n; n = agnxtnode (g, n)) 132 { 133 for (e = agfstout (g, n); e; e = agnxtout (g, e)) 134 { 135 delta = dist (&tp->bb, &hp->bb); 136 ce = agedge (cg, t, h, ((void *) 0), 1); 137 if ((((Agedgeinfo_t *) (((Agobj_t *) (ce))->data))->minlen) < delta) 138 { 139 if ((((Agedgeinfo_t *) (((Agobj_t *) (ce))->data))->minlen) == 140 0.0) 141 { 142 } 143 } 144 } 145 } 146} 147 148static graph_t * 149mkNConstraintG (graph_t * g, Dt_t * list, intersectfn intersect, distfn dist) 150{ 151 nitem *p; 152 nitem *nxp; 153 edge_t *e; 154 graph_t *cg = agopen ("cg", Agstrictdirected, ((Agdisc_t *) 0)); 155 for (p = (nitem *) dtflatten (list); p; 156 p = (nitem *) (((Dtlink_t *) ((Dtlink_t *) p))->right)) 157 { 158 for (nxp = (nitem *) (((Dtlink_t *) ((Dtlink_t *) p))->right); nxp; 159 nxp = (nitem *) (((Dtlink_t *) ((Dtlink_t *) nxp))->right)) 160 { 161 if (intersect (p, nxp)) 162 { 163 e = agedge (cg, p->cnode, nxp->cnode, ((void *) 0), 1); 164 } 165 }} for (p = (nitem *) dtflatten (list); p; 166 p = (nitem *) (((Dtlink_t *) ((Dtlink_t *) p))->right)) 167 { 168 } 169} 170 171static graph_t * 172mkConstraintG (graph_t * g, Dt_t * list, intersectfn intersect, distfn dist) 173{ 174 graph_t *vg; 175 graph_t *cg = agopen ("cg", Agstrictdirected, ((Agdisc_t *) 0)); 176 mapGraphs (vg, cg, dist); 177} 178 179static void 180constrainX (graph_t * g, nitem * nlist, int nnodes, intersectfn ifn, 181 int ortho) 182{ 183 Dt_t *list = dtopen (&constr, Dtobag); 184 nitem *p = nlist; 185 graph_t *cg; 186 int i; 187 for (i = 0; i < nnodes; i++) 188 { 189 (*(((Dt_t *) (list))->searchf)) ((list), (void *) (p), 0000001); 190 p++; 191 } if (ortho) 192 cg = mkConstraintG (g, list, ifn, distX); 193 else 194 cg = mkNConstraintG (g, list, ifn, distX); 195} 196 197int 198cAdjust (graph_t * g, int mode) 199{ 200 int ret, i, nnodes = agnnodes (g); 201 nitem *nlist = (nitem *) gmalloc ((nnodes) * sizeof (nitem)); 202 node_t *n; 203 for (n = agfstnode (g); n; n = agnxtnode (g, n)) 204 { 205 } 206 if (overlaps (nlist, nnodes)) 207 { 208 switch ((adjust_mode) mode) 209 { 210 case AM_ORTHOXY: 211 constrainX (g, nlist, nnodes, intersectY, 1); 212 case AM_ORTHO: 213 constrainX (g, nlist, nnodes, intersectY0, 1); 214 constrainX (g, nlist, nnodes, intersectY, 1); 215 case AM_PORTHO: 216 default: 217 constrainX (g, nlist, nnodes, intersectY0, 0); 218 } 219 } 220} 221