#ifndef BLOCK_H
#define BLOCK_H
#include <nodelist.h>
typedef struct block block_t;
typedef struct {
block_t* first;
block_t* last;
} blocklist_t;
struct block {
Agnode_t* child;
block_t* next;
Agraph_t* sub_graph;
double radius;
double rad0;
nodelist_t* circle_list;
blocklist_t children;
double parent_pos;
int flags;
};
extern block_t* mkBlock(Agraph_t*);
extern void freeBlock(block_t* sp);
extern void initBlocklist(blocklist_t*);
extern void appendBlock (blocklist_t* sp, block_t* sn);
extern void insertBlock (blocklist_t* sp, block_t* sn);
#ifdef DEBUG
extern void printBlocklist(blocklist_t* snl);
#endif
#define CHILD(b) ((b)->child)
#define BLK_PARENT(b) (CHILD(b)? PARENT(CHILD(b)) : 0)
#define BLK_FLAGS(b) ((b)->flags)
#define COALESCED_F (1 << 0)
#define COALESCED(b) (BLK_FLAGS(b)&COALESCED_F)
#define SET_COALESCED(b) (BLK_FLAGS(b) |= COALESCED_F)
#endif