/* node.h */ /********************************************************** * NODE CLASS DEFINTIONS ********************************************************** */ #define LEAKED_MASK 0x00000001 #define PARTIAL_MASK 0x00000002 #define SCANNED_MASK 0x00000001 struct _lub_heap_node { lub_heap_context_t *_context; /* bottom two bits used for leaked, partial flags */ lub_heap_node_t *_next; /* linked list of nodes per context (bottom bit used for scanned mask) */ lub_heap_node_t *prev; lub_bintree_node_t bt_node; }; typedef struct _lub_heap_node_key lub_heap_node_key_t; struct _lub_heap_node_key { const lub_heap_node_t *node; }; /*--------------------------------------------------------- * PUBLIC META DATA *--------------------------------------------------------- */ /* * Get the size (in bytes) of an instance of a node object */ extern size_t lub_heap_node__get_instanceSize(void); /*--------------------------------------------------------- * PUBLIC META FUNCTIONS *--------------------------------------------------------- */ extern void lub_heap_node_clear(lub_heap_node_t * instance, void *arg); extern void lub_heap_foreach_node(void (*fn) (lub_heap_node_t *, void *), void *arg); extern void lub_heap_scan_memory(const void *mem, size_t size); /* * Given a pointer to the start of a data area of a node obtain the * node reference. Returns NULL if the node is not valid. */ extern lub_heap_node_t *lub_heap_node_from_start_of_block_ptr(char *ptr); extern void lub_heap_node_initialise(void); /*--------------------------------------------------------- * PUBLIC METHODS *--------------------------------------------------------- */ /* * Given a node return a pointer to the data area allocated. */ extern char *lub_heap_node__get_ptr(const lub_heap_node_t * instance); /* * Given a node return the size of memory that it encapsulates. */ extern size_t lub_heap_node__get_size(const lub_heap_node_t * instance); /* * Given a node return the size of memory overhead that it encapsulates. */ extern size_t lub_heap_node__get_overhead(const lub_heap_node_t * instance); /* * Get a node to remove itself from it's allocation tree */ extern void lub_heap_node_fini(lub_heap_node_t * instance); extern void lub_heap_node_init(lub_heap_node_t * instance, lub_heap_context_t * context); extern lub_bintree_compare_fn lub_heap_node_compare; extern lub_bintree_getkey_fn lub_heap_node_getkey; extern bool_t lub_heap_node__get_leaked(const lub_heap_node_t * instance); extern bool_t lub_heap_node__get_partial(const lub_heap_node_t * instance); extern bool_t lub_heap_node__get_scanned(const lub_heap_node_t * instance); extern void lub_heap_node__set_leaked(lub_heap_node_t * instance, bool_t value); extern void lub_heap_node__set_partial(lub_heap_node_t * instance, bool_t value); extern void lub_heap_node__set_scanned(lub_heap_node_t * instance, bool_t value); extern lub_heap_context_t *lub_heap_node__get_context(const lub_heap_node_t * instance); extern void lub_heap_node__set_context(lub_heap_node_t * instance, lub_heap_context_t * context); extern lub_heap_node_t *lub_heap_node__get_next(const lub_heap_node_t * instance); extern void lub_heap_node__set_next(lub_heap_node_t * instance, lub_heap_node_t * context);