#ifndef NODELIST_H
#define NODELIST_H
#include <render.h>
typedef struct nodelistitem nodelistitem_t;
struct nodelistitem {
node_t* curr;
nodelistitem_t* next;
nodelistitem_t* prev;
};
typedef struct {
nodelistitem_t* first;
nodelistitem_t* last;
int sz;
} nodelist_t;
extern nodelist_t* mkNodelist();
extern void freeNodelist(nodelist_t*);
extern int sizeNodelist(nodelist_t* list);
extern void appendNodelist(nodelist_t*, nodelistitem_t*, Agnode_t* n);
extern int node_position(nodelist_t* list, Agnode_t* n);
extern void realignNodelist(nodelist_t* list, nodelistitem_t* n);
extern void insertNodelist(nodelist_t*, Agnode_t*, Agnode_t*, int);
extern void reverseAppend(nodelist_t*, nodelist_t*);
extern nodelist_t* reverseNodelist(nodelist_t* list);
extern nodelist_t* cloneNodelist(nodelist_t* list);
#ifdef DEBUG
extern void printNodelist(nodelist_t* list);
#endif
#endif