#pragma prototyped
#include <aghdr.h>
#ifdef DMALLOC
#include "dmalloc.h"
#endif
void agflatten_elist(Dict_t *d, Dtlink_t **lptr)
{
dtrestore(d,*lptr);
(void) dtflatten(d);
*lptr = dtextract(d);
}
void agflatten_edges(Agraph_t *g, Agnode_t *n)
{
agflatten_elist(g->e_seq,(Dtlink_t**)&(n->out));
agflatten_elist(g->e_seq,(Dtlink_t**)&(n->in));
}
void agflatten(Agraph_t *g, int flag)
{
Agnode_t *n;
if (flag) {
if (g->desc.flatlock == FALSE) {
dtflatten(g->n_seq);
g->desc.flatlock = TRUE;
for (n = agfstnode(g); n; n = agnxtnode(n))
agflatten_edges(g,n);
}
}
else {
if (g->desc.flatlock) {
g->desc.flatlock = FALSE;
}
}
}
void agnotflat(Agraph_t *g)
{
if(g->desc.flatlock) agerror(AGERROR_FLAT,"");
}