00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef CIRCULAR_H
00018 #define CIRCULAR_H
00019
00020 #include <render.h>
00021 #include <block.h>
00022 #include <stack.h>
00023
00024 typedef struct {
00025 blocklist_t bl;
00026 int orderCount;
00027 int blockCount;
00028 nstack_t *bcstack;
00029 attrsym_t *N_artpos;
00030 attrsym_t *N_root;
00031 char *rootname;
00032 double min_dist;
00033 } circ_state;
00034
00035 typedef struct {
00036 Agnode_t *dnode;
00037 } ndata;
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 typedef struct {
00050 union {
00051 Agraph_t *g;
00052 Agnode_t *np;
00053 } orig;
00054 int flags;
00055 node_t *parent;
00056 block_t *block;
00057 union {
00058 struct {
00059 node_t *next;
00060 int val;
00061 int low_val;
00062 } bc;
00063 node_t *clone;
00064 struct {
00065 node_t *tparent;
00066 node_t *first;
00067 node_t *second;
00068 int fdist;
00069 int sdist;
00070 } t;
00071 struct {
00072 int pos;
00073 double psi;
00074 } f;
00075 } u;
00076 } cdata;
00077
00078 typedef struct {
00079 int order;
00080 } edata;
00081
00082 #define NDATA(n) ((ndata*)((n)->u.alg))
00083 #define DNODE(n) (NDATA(n)->dnode)
00084
00085 #define EDGEDATA(e) ((edata*)((e)->u.alg))
00086 #define EDGEORDER(e) (EDGEDATA(e)->order)
00087
00088 #define DATA(n) ((cdata*)((n)->u.alg))
00089 #define ORIGG(n) (DATA(n)->orig.g)
00090 #define ORIGN(n) (DATA(n)->orig.np)
00091 #define FLAGS(n) (DATA(n)->flags)
00092 #define PARENT(n) (DATA(n)->parent)
00093 #define BLOCK(n) (DATA(n)->block)
00094 #define NEXT(n) (DATA(n)->u.bc.next)
00095 #define VAL(n) (DATA(n)->u.bc.val)
00096 #define LOWVAL(n) (DATA(n)->u.bc.low_val)
00097 #define CLONE(n) (DATA(n)->u.clone)
00098 #define TPARENT(n) (DATA(n)->u.t.tparent)
00099 #define LEAFONE(n) (DATA(n)->u.t.first)
00100 #define LEAFTWO(n) (DATA(n)->u.t.second)
00101 #define DISTONE(n) (DATA(n)->u.t.fdist)
00102 #define DISTTWO(n) (DATA(n)->u.t.sdist)
00103 #define POSITION(n) (DATA(n)->u.f.pos)
00104 #define PSI(n) (DATA(n)->u.f.psi)
00105
00106 #define VISITED_F (1 << 0)
00107 #define BCDONE_F (1 << 1)
00108 #define ONSTACK_F (1 << 2)
00109 #define PARENT_F (1 << 3)
00110 #define PATH_F (1 << 4)
00111 #define NEIGHBOR_F (1 << 5)
00112
00113 #define VISITED(n) (FLAGS(n)&VISITED_F)
00114 #define BCDONE(n) (FLAGS(n)&BCDONE_F)
00115 #define ONSTACK(n) (FLAGS(n)&ONSTACK_F)
00116 #define ISPARENT(n) (FLAGS(n)&PARENT_F)
00117 #define ONPATH(n) (FLAGS(n)&PATH_F)
00118 #define NEIGHBOR(n) (FLAGS(n)&NEIGHBOR_F)
00119
00120 #define SET_VISITED(n) (FLAGS(n) |= VISITED_F)
00121 #define SET_BCDONE(n) (FLAGS(n) |= BCDONE_F)
00122 #define SET_ONSTACK(n) (FLAGS(n) |= ONSTACK_F)
00123 #define SET_PARENT(n) (FLAGS(n) |= PARENT_F)
00124 #define SET_ONPATH(n) (FLAGS(n) |= PATH_F)
00125 #define SET_NEIGHBOR(n) (FLAGS(n) |= NEIGHBOR_F)
00126
00127 #define UNSET_VISITED(n) (FLAGS(n) &= ~VISITED_F)
00128 #define UNSET_BCDONE(n) (FLAGS(n) &= ~BCDONE_F)
00129 #define UNSET_ONSTACK(n) (FLAGS(n) &= ~ONSTACK_F)
00130 #define UNSET_NEIGHBOR(n) (FLAGS(n) &= ~NEIGHBOR_F)
00131
00132 #define DEGREE(n) (ND_order(n))
00133
00134 #include <circo.h>
00135
00136 #ifdef __cplusplus
00137 extern "C" {
00138 #endif
00139
00140 #ifdef DEBUG
00141 extern void prData(Agnode_t * n, int pass);
00142 #endif
00143
00144 extern void circularLayout(Agraph_t * sg);
00145
00146 #ifdef __cplusplus
00147 }
00148 #endif
00149 #endif