/* { dg-do compile } */ /* { dg-options "-O3" } */ typedef long unsigned int size_t; typedef struct { } box; typedef struct { } textpara_t; typedef struct _dtlink_s Dtlink_t; typedef struct _dtdisc_s Dtdisc_t; typedef struct _dtmethod_s Dtmethod_t; typedef struct _dt_s Dt_t; typedef void *(*Dtmemory_f) (Dt_t *, void *, size_t, Dtdisc_t *); typedef void *(*Dtsearch_f) (Dt_t *, void *, int); typedef void *(*Dtmake_f) (Dt_t *, void *, Dtdisc_t *); typedef void (*Dtfree_f) (Dt_t *, void *, Dtdisc_t *); typedef int (*Dtcompar_f) (Dt_t *, void *, void *, Dtdisc_t *); typedef unsigned int (*Dthash_f) (Dt_t *, void *, Dtdisc_t *); typedef int (*Dtevent_f) (Dt_t *, int, void *, Dtdisc_t *); struct _dtlink_s { Dtlink_t *right; }; struct _dtdisc_s { int key; int size; int link; Dtmake_f makef; Dtfree_f freef; Dtcompar_f comparf; Dthash_f hashf; Dtmemory_f memoryf; Dtevent_f eventf; }; struct _dt_s { Dtsearch_f searchf; }; extern Dtmethod_t *Dtobag; extern Dt_t *dtopen (Dtdisc_t *, Dtmethod_t *); extern Dtlink_t *dtflatten (Dt_t *); typedef struct Agobj_s Agobj_t; typedef struct Agraph_s Agraph_t; typedef struct Agnode_s Agnode_t; typedef struct Agedge_s Agedge_t; typedef struct Agdesc_s Agdesc_t; typedef struct Agdisc_s Agdisc_t; typedef struct Agrec_s Agrec_t; struct Agobj_s { Agrec_t *data; }; struct Agdesc_s { }; extern Agraph_t *agopen (char *name, Agdesc_t desc, Agdisc_t * disc); extern Agnode_t *agfstnode (Agraph_t * g); extern Agnode_t *agnxtnode (Agraph_t * g, Agnode_t * n); extern Agedge_t *agedge (Agraph_t * g, Agnode_t * t, Agnode_t * h, char *name, int createflag); extern Agedge_t *agfstout (Agraph_t * g, Agnode_t * n); extern Agedge_t *agnxtout (Agraph_t * g, Agedge_t * e); extern Agdesc_t Agdirected, Agstrictdirected, Agundirected, Agstrictundirected; typedef struct Agraph_s graph_t; typedef struct Agnode_s node_t; typedef struct Agedge_s edge_t; typedef union inside_t { unsigned short minlen; } Agedgeinfo_t; extern void *gmalloc (size_t); typedef enum { AM_NONE, AM_VOR, AM_SCALE, AM_NSCALE, AM_SCALEXY, AM_PUSH, AM_PUSHPULL, AM_ORTHO, AM_ORTHO_YX, AM_ORTHOXY, AM_ORTHOYX, AM_PORTHO, AM_PORTHO_YX, AM_PORTHOXY, AM_PORTHOYX, AM_COMPRESS, AM_VPSC, AM_IPSEP, AM_PRISM } adjust_mode; typedef struct nitem { Dtlink_t link; int val; node_t *cnode; box bb; } nitem; typedef int (*distfn) (box *, box *); typedef int (*intersectfn) (nitem *, nitem *); static int cmpitem (Dt_t * d, int *p1, int *p2, Dtdisc_t * disc) { } static Dtdisc_t constr = { __builtin_offsetof (nitem, val), sizeof (int), __builtin_offsetof (nitem, link), ((Dtmake_f) 0), ((Dtfree_f) 0), (Dtcompar_f) cmpitem, ((Dthash_f) 0), ((Dtmemory_f) 0), ((Dtevent_f) 0) }; static int distX (box * b1, box * b2) { } static int intersectY0 (nitem * p, nitem * q) { } static int intersectY (nitem * p, nitem * q) { } static void mapGraphs (graph_t * g, graph_t * cg, distfn dist) { node_t *n; edge_t *e; edge_t *ce; node_t *t; node_t *h; nitem *tp; nitem *hp; int delta; for (n = agfstnode (g); n; n = agnxtnode (g, n)) { for (e = agfstout (g, n); e; e = agnxtout (g, e)) { delta = dist (&tp->bb, &hp->bb); ce = agedge (cg, t, h, ((void *) 0), 1); if ((((Agedgeinfo_t *) (((Agobj_t *) (ce))->data))->minlen) < delta) { if ((((Agedgeinfo_t *) (((Agobj_t *) (ce))->data))->minlen) == 0.0) { } } } } } static graph_t * mkNConstraintG (graph_t * g, Dt_t * list, intersectfn intersect, distfn dist) { nitem *p; nitem *nxp; edge_t *e; graph_t *cg = agopen ("cg", Agstrictdirected, ((Agdisc_t *) 0)); for (p = (nitem *) dtflatten (list); p; p = (nitem *) (((Dtlink_t *) ((Dtlink_t *) p))->right)) { for (nxp = (nitem *) (((Dtlink_t *) ((Dtlink_t *) p))->right); nxp; nxp = (nitem *) (((Dtlink_t *) ((Dtlink_t *) nxp))->right)) { if (intersect (p, nxp)) { e = agedge (cg, p->cnode, nxp->cnode, ((void *) 0), 1); } }} for (p = (nitem *) dtflatten (list); p; p = (nitem *) (((Dtlink_t *) ((Dtlink_t *) p))->right)) { } } static graph_t * mkConstraintG (graph_t * g, Dt_t * list, intersectfn intersect, distfn dist) { graph_t *vg; graph_t *cg = agopen ("cg", Agstrictdirected, ((Agdisc_t *) 0)); mapGraphs (vg, cg, dist); } static void constrainX (graph_t * g, nitem * nlist, int nnodes, intersectfn ifn, int ortho) { Dt_t *list = dtopen (&constr, Dtobag); nitem *p = nlist; graph_t *cg; int i; for (i = 0; i < nnodes; i++) { (*(((Dt_t *) (list))->searchf)) ((list), (void *) (p), 0000001); p++; } if (ortho) cg = mkConstraintG (g, list, ifn, distX); else cg = mkNConstraintG (g, list, ifn, distX); } int cAdjust (graph_t * g, int mode) { int ret, i, nnodes = agnnodes (g); nitem *nlist = (nitem *) gmalloc ((nnodes) * sizeof (nitem)); node_t *n; for (n = agfstnode (g); n; n = agnxtnode (g, n)) { } if (overlaps (nlist, nnodes)) { switch ((adjust_mode) mode) { case AM_ORTHOXY: constrainX (g, nlist, nnodes, intersectY, 1); case AM_ORTHO: constrainX (g, nlist, nnodes, intersectY0, 1); constrainX (g, nlist, nnodes, intersectY, 1); case AM_PORTHO: default: constrainX (g, nlist, nnodes, intersectY0, 0); } } }