1 /* { dg-do compile } */
2 /* { dg-options "-O3" } */
3 
4 typedef long unsigned int size_t;
5 typedef struct
6 {
7 }
8 box;
9 typedef struct
10 {
11 }
12 textpara_t;
13 typedef struct _dtlink_s Dtlink_t;
14 typedef struct _dtdisc_s Dtdisc_t;
15 typedef struct _dtmethod_s Dtmethod_t;
16 typedef struct _dt_s Dt_t;
17 typedef void *(*Dtmemory_f) (Dt_t *, void *, size_t, Dtdisc_t *);
18 typedef void *(*Dtsearch_f) (Dt_t *, void *, int);
19 typedef void *(*Dtmake_f) (Dt_t *, void *, Dtdisc_t *);
20 typedef void (*Dtfree_f) (Dt_t *, void *, Dtdisc_t *);
21 typedef int (*Dtcompar_f) (Dt_t *, void *, void *, Dtdisc_t *);
22 typedef unsigned int (*Dthash_f) (Dt_t *, void *, Dtdisc_t *);
23 typedef int (*Dtevent_f) (Dt_t *, int, void *, Dtdisc_t *);
24 struct _dtlink_s
25 {
26   Dtlink_t *right;
27 };
28 struct _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 };
40 struct _dt_s
41 {
42   Dtsearch_f searchf;
43 };
44 extern Dtmethod_t *Dtobag;
45 extern Dt_t *dtopen (Dtdisc_t *, Dtmethod_t *);
46 extern Dtlink_t *dtflatten (Dt_t *);
47 typedef struct Agobj_s Agobj_t;
48 typedef struct Agraph_s Agraph_t;
49 typedef struct Agnode_s Agnode_t;
50 typedef struct Agedge_s Agedge_t;
51 typedef struct Agdesc_s Agdesc_t;
52 typedef struct Agdisc_s Agdisc_t;
53 typedef struct Agrec_s Agrec_t;
54 struct Agobj_s
55 {
56   Agrec_t *data;
57 };
58 struct Agdesc_s
59 {
60 };
61 extern Agraph_t *agopen (char *name, Agdesc_t desc, Agdisc_t * disc);
62 extern Agnode_t *agfstnode (Agraph_t * g);
63 extern Agnode_t *agnxtnode (Agraph_t * g, Agnode_t * n);
64 extern Agedge_t *agedge (Agraph_t * g, Agnode_t * t, Agnode_t * h, char *name,
65 			 int createflag);
66 extern Agedge_t *agfstout (Agraph_t * g, Agnode_t * n);
67 extern Agedge_t *agnxtout (Agraph_t * g, Agedge_t * e);
68 extern Agdesc_t Agdirected, Agstrictdirected, Agundirected,
69   Agstrictundirected;
70 typedef struct Agraph_s graph_t;
71 typedef struct Agnode_s node_t;
72 typedef struct Agedge_s edge_t;
73 typedef union inside_t
74 {
75   unsigned short minlen;
76 }
77 Agedgeinfo_t;
78 extern void *gmalloc (size_t);
79 typedef 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 }
83 adjust_mode;
84 typedef struct nitem
85 {
86   Dtlink_t link;
87   int val;
88   node_t *cnode;
89   box bb;
90 }
91 nitem;
92 typedef int (*distfn) (box *, box *);
93 typedef int (*intersectfn) (nitem *, nitem *);
94 int agnnodes (graph_t *);
95 int overlaps (nitem *, int);
96 static int
cmpitem(Dt_t * d,int * p1,int * p2,Dtdisc_t * disc)97 cmpitem (Dt_t * d, int *p1, int *p2, Dtdisc_t * disc)
98 {
99 }
100 static 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) };
105 static int
distX(box * b1,box * b2)106 distX (box * b1, box * b2)
107 {
108 }
109 
110 static int
intersectY0(nitem * p,nitem * q)111 intersectY0 (nitem * p, nitem * q)
112 {
113 }
114 
115 static int
intersectY(nitem * p,nitem * q)116 intersectY (nitem * p, nitem * q)
117 {
118 }
119 
120 static void
mapGraphs(graph_t * g,graph_t * cg,distfn dist)121 mapGraphs (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 
148 static graph_t *
mkNConstraintG(graph_t * g,Dt_t * list,intersectfn intersect,distfn dist)149 mkNConstraintG (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 
171 static graph_t *
mkConstraintG(graph_t * g,Dt_t * list,intersectfn intersect,distfn dist)172 mkConstraintG (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 
179 static void
constrainX(graph_t * g,nitem * nlist,int nnodes,intersectfn ifn,int ortho)180 constrainX (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 
197 int
cAdjust(graph_t * g,int mode)198 cAdjust (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