#ifndef FDP_H
#define FDP_H
#include <render.h>
#ifdef FDP_PRIVATE
#ifndef NOTUSED
#define NOTUSED(var) (void) var
#endif
#define NDIM 2
typedef struct {
pointf LL,UR;
} boxf;
typedef struct bport_s {
edge_t* e;
node_t* n;
double alpha;
} bport_t;
typedef struct {
bport_t* ports;
int nports;
boxf bb;
point delta;
int flags;
} gdata;
#define GDATA(g) ((gdata*)(GD_alg(g)))
#define BB(g) (GDATA(g)->bb)
#define PORTS(g) (GDATA(g)->ports)
#define NPORTS(g) (GDATA(g)->nports)
#define DELTA(g) (GDATA(g)->delta)
typedef struct {
node_t* dn;
graph_t* parent;
} ndata;
#define NDATA(n) ((ndata*)(ND_alg(n)))
#define DNODE(n) (NDATA(n)->dn)
#define PARENT(n) (NDATA(n)->parent)
typedef struct {
int deg;
int wdeg;
node_t* dn;
double disp[NDIM];
} dndata;
#define DNDATA(n) ((dndata*)(ND_alg(n)))
#define DISP(n) (DNDATA(n)->disp)
#define ANODE(n) (DNDATA(n)->dn)
#define DEG(n) (DNDATA(n)->deg)
#define WDEG(n) (DNDATA(n)->wdeg)
#define IS_PORT(n) (!ANODE(n) && !ND_clust(n))
#endif
extern void fdp_layout(Agraph_t* g);
extern void fdp_nodesize(node_t*, boolean);
extern void fdp_init_graph (Agraph_t *g);
extern void fdp_init_node_edge(Agraph_t* g);
extern void fdp_cleanup(Agraph_t* g);
extern int fdp_isPort (Agnode_t*);
#endif