diff options
Diffstat (limited to 'libcnary/include/node.h')
-rw-r--r-- | libcnary/include/node.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/libcnary/include/node.h b/libcnary/include/node.h new file mode 100644 index 0000000..35f6333 --- /dev/null +++ b/libcnary/include/node.h @@ -0,0 +1,59 @@ +/* + * node.h + * + * Created on: Mar 7, 2011 + * Author: posixninja + */ + +#ifndef NODE_H_ +#define NODE_H_ + +#include "object.h" + +#define NODE_TYPE 1; + +struct node_list_t; + +// This class implements the abstract iterator class +typedef struct node_t { + // Super class + struct node_t* next; + struct node_t* prev; + unsigned int count; + + // Local Properties + int isRoot; + int isLeaf; + + // Local Members + void *data; + unsigned int depth; + struct node_t* parent; + struct node_list_t* children; + + // Virtual Functions + int(*attach)(struct node_t* parent, struct node_t* child); + int(*detach)(struct node_t* parent, struct node_t* child); + +} node_t; + +void node_destroy(struct node_t* node); +struct node_t* node_create(struct node_t* parent, void* data); + +int node_attach(struct node_t* parent, struct node_t* child); +int node_detach(struct node_t* parent, struct node_t* child); +int node_insert(struct node_t* parent, unsigned int index, struct node_t* child); + +unsigned int node_n_children(struct node_t* node); +node_t* node_nth_child(struct node_t* node, unsigned int n); +node_t* node_first_child(struct node_t* node); +node_t* node_prev_sibling(struct node_t* node); +node_t* node_next_sibling(struct node_t* node); +int node_child_position(struct node_t* parent, node_t* child); + +typedef void* (*copy_func_t)(const void *src); +node_t* node_copy_deep(node_t* node, copy_func_t copy_func); + +void node_debug(struct node_t* node); + +#endif /* NODE_H_ */ |