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