Changeset 196 for trunk/archive/pslib/include/psDlist.h
- Timestamp:
- Mar 9, 2004, 5:19:15 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/archive/pslib/include/psDlist.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/archive/pslib/include/psDlist.h
r181 r196 4 4 * Support for doubly linked lists 5 5 */ 6 7 /** Doubly-linked list element */ 6 8 typedef struct psDlistElem { 7 struct psDlistElem *prev; // previous link in list8 struct psDlistElem *next; // next link in list9 void *data; // real data item9 struct psDlistElem *prev; //!< previous link in list 10 struct psDlistElem *next; //!< next link in list 11 void *data; //!< real data item 10 12 } psDlistElem; 11 13 14 /** Doubly-linked list */ 12 15 typedef struct { 13 int n; // number of elements on list14 psDlistElem *head; // first element on list (may be NULL)15 psDlistElem *tail; // last element on list (may be NULL)16 psDlistElem *iter; // iteration cursor16 int n; //!< number of elements on list 17 psDlistElem *head; //!< first element on list (may be NULL) 18 psDlistElem *tail; //!< last element on list (may be NULL) 19 psDlistElem *iter; //!< iteration cursor 17 20 } psDlist; 18 21 19 enum { // Special values of index into list 20 PS_DLIST_HEAD = 0, // at head 21 PS_DLIST_TAIL = -1, // at tail 22 PS_DLIST_UNKNOWN = -2, // unknown position 23 PS_DLIST_PREV = -3, // previous element 24 PS_DLIST_NEXT = -4 // next element 22 /** Special values of index into list */ 23 enum { 24 PS_DLIST_HEAD = 0, //!< at head 25 PS_DLIST_TAIL = -1, //!< at tail 26 PS_DLIST_UNKNOWN = -2, //!< unknown position 27 PS_DLIST_PREV = -3, //!< previous element 28 PS_DLIST_NEXT = -4 //!< next element 25 29 }; 26 30 27 31 /*****************************************************************************/ 28 /* 29 * Constructors and Destructors 30 */ 31 psDlist *psDlistAlloc(void *data); // initial data item; may be NULL 32 /** Constructor */ 33 psDlist *psDlistAlloc(void *data //!< initial data item; may be NULL 34 ); 32 35 33 void psDlistFree(psDlist *list, // list to destroy 34 void (*elemFree)(void *)); // destructor for data on list 36 /** Destructor */ 37 void psDlistFree(psDlist *list, //!< list to destroy 38 void (*elemFree)(void *) //!< destructor for data on list 39 ); 35 40 36 41 /* 37 42 * List maintainence functions 38 43 */ 39 psDlist *psDlistAdd(psDlist *list, // list to add to (may be NULL) 40 void *data, // data item to add 41 int where); // index, PS_DLIST_HEAD, or PS_DLIST_TAIL 42 psDlist *psDlistAppend(psDlist *list, // list to append to (may be NULL) 43 void *data); // data item to add 44 void *psDlistRemove(psDlist *list, // list to remove element from 45 void *data, // data item to remove 46 int which); // index of item, or PS_DLIST_UNKNOWN, 47 // or PS_DLIST_NEXT, or PS_DLIST_PREV 48 void *psDlistGet(const psDlist *list, // list to retrieve element from 49 int which); // index of item, or PS_DLIST_NEXT, 50 // or PS_DLIST_PREV 44 45 /** Add to list */ 46 psDlist *psDlistAdd(psDlist *list, //!< list to add to (may be NULL) 47 void *data, //!< data item to add 48 int where //!< index, PS_DLIST_HEAD, or PS_DLIST_TAIL 49 ); 50 51 /** Append to a list */ 52 psDlist *psDlistAppend(psDlist *list, //!< list to append to (may be NULL) 53 void *data //!< data item to add 54 ); 55 56 /** Remove from a list */ 57 void *psDlistRemove(psDlist *list, //!< list to remove element from 58 void *data, //!< data item to remove 59 int which //!< index of item, or PS_DLIST_UNKNOWN, or PS_DLIST_NEXT, or 60 //!< PS_DLIST_PREV 61 ); 62 63 /** Retrieve from a list */ 64 void *psDlistGet(const psDlist *list, //!< list to retrieve element from 65 int which //!< index of item, or PS_DLIST_NEXT, or PS_DLIST_PREV 66 ); 67 51 68 /* 52 69 * convenience functions to use psDlistGet as an iterator 53 70 */ 54 void psDlistSetIterator(psDlist *list, int where, int which); 55 void *psDlistGetNext(psDlist *list, int which); 56 void *psDlistGetPrev(psDlist *list, int which); 57 /* 58 * Conversions to/from arrays 59 */ 60 psVoidPtrArray *psDlistToArray(psDlist *dlist); 61 psDlist *psArrayToDlist(psVoidPtrArray *arr); 71 72 /** Set the iterator */ 73 void psDlistSetIterator(psDlist *list, //!< list to retrieve element from 74 int where, //!< index, PS_DLIST_HEAD, or PS_DLIST_TAIL 75 int which //!< index of item, or PS_DLIST_UNKNOWN, or PS_DLIST_NEXT, or 76 //!< PS_DLIST_PREV 77 ); 78 79 /** Get next element */ 80 void *psDlistGetNext(psDlist *list, //!< list to retrieve element from 81 int which //!< index of item, or PS_DLIST_UNKNOWN, or PS_DLIST_NEXT, or 82 //!< PS_DLIST_PREV 83 ); 84 85 /** Get previous element */ 86 void *psDlistGetPrev(psDlist *list, //!< list to retrieve element from 87 int which //!< index of item, or PS_DLIST_UNKNOWN, or PS_DLIST_NEXT, or 88 //!< PS_DLIST_PREV 89 ); 90 91 92 /** Convert doubly-linked list to an array */ 93 psVoidPtrArray *psDlistToArray(psDlist *dlist //!< List to convert 94 ); 95 96 /** Convert array to a doubly-linked list */ 97 psDlist *psArrayToDlist(psVoidPtrArray *arr //!< Array to convert 98 ); 99 100 62 101 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
