#ifndef PLIST_H_ #define PLIST_H_ /* * A list of values (PNodes), each of which has just a pointer, since we are * storing Perl SVs in here. */ /* when we first allocate a chunk of values, this is the size we use */ #define PLIST_INITIAL_SIZE 2 /* 16 */ typedef struct PNode { const void* ptr; /* the pointer we are storing; we claim NO OWNERSHIP on it */ } PNode; typedef struct PList { PNode* data; /* a chunk of values */ unsigned short alen; /* allocated size of chunk */ unsigned short ulen; /* actual used size in chunk */ } PList; /* * Create a new PList object. */ PList* plist_create(void); /* * Destroy a given PList object. */ void plist_destroy(PList* plist); /* * Clone a given PList object. */ PList* plist_clone(PList* plist); /* * Initialise a given PList object, leaving it as newly created. */ void plist_init(PList* plist); /* * Clear all data from a given PList object, leaving it as newly created * (maybe with room already allocated). */ void plist_clear(PList* plist); /* * Return the number of elements in a given PList object. */ int plist_size(const PList* plist); /* * Add a void* value to the PList. */ PNode* plist_add(PList* plist, const void* obj); /* * Dump PList object to an output stream. */ void plist_dump(const PList* plist, FILE* fp); #endif