Changeset 460 for trunk/psLib/src/sysUtils/psDList.h
- Timestamp:
- Apr 19, 2004, 3:38:34 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/sysUtils/psDList.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/sysUtils/psDList.h
r455 r460 9 9 * @author Robert Daniel DeSonia, MHPCC 10 10 * 11 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-04- 19 21:06:37$11 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-04-20 01:38:34 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 15 15 */ 16 16 17 /** Special values of index into list */ 18 enum { 19 PS_DLIST_HEAD = 0, ///< at head 20 PS_DLIST_TAIL = -1, ///< at tail 21 PS_DLIST_UNKNOWN = -2, ///< unknown position 22 PS_DLIST_PREVIOUS = -3, ///< previous element 23 PS_DLIST_CURRENT = -4, ///< current element 24 PS_DLIST_NEXT = -5 ///< next element 25 }; 26 17 27 /** Doubly-linked list element */ 18 28 typedef struct psDlistElem 19 29 { 20 struct psDlistElem *prev; ///< previous link in list21 struct psDlistElem *next; ///< next link in list22 void *data; ///< real data item30 struct psDlistElem *prev; ///< previous link in list 31 struct psDlistElem *next; ///< next link in list 32 void *data; ///< real data item 23 33 } 24 34 psDlistElem; … … 27 37 typedef struct 28 38 { 29 int n; ///< number of elements on list 30 psDlistElem *head; ///< first element on list (may be NULL) 31 psDlistElem *tail; ///< last element on list (may be NULL) 32 psDlistElem *iter; ///< iteration cursor 39 int n; ///< number of elements on list 40 psDlistElem *head; ///< first element on list (may be NULL) 41 psDlistElem *tail; ///< last element on list (may be NULL) 42 psDlistElem *iter; ///< iteration cursor 43 int iterIndex; 33 44 } 34 45 psDlist; 35 46 36 /** Special values of index into list */ 37 enum { 38 PS_DLIST_HEAD = 0, ///< at head 39 PS_DLIST_TAIL = -1, ///< at tail 40 PS_DLIST_UNKNOWN = -2, ///< unknown position 41 PS_DLIST_PREV = -3, ///< previous element 42 PS_DLIST_NEXT = -4 ///< next element 43 }; 44 45 /** Functions **************************************************************/ 46 /** \addtogroup DataGroup General Data Container Utilities 47 * \{ 47 /** @addtogroup DataContainers General Data Container Utilities 48 * @{ 48 49 */ 49 50 50 51 /** Constructor */ 51 psDlist *psDlistAlloc(void *data) ///< initial data item; may be NULL 52 ; 52 psDlist *psDlistAlloc( 53 void *data ///< initial data item; may be NULL 54 ); 53 55 54 56 /** Destructor */ 55 void psDlistFree(psDlist *list, ///< list to destroy 56 void (*elemFree)(void *)) ///< destructor for data on list 57 ; 58 59 /**** List maintainence functions ****/ 57 void psDlistFree( 58 psDlist *list, ///< list to destroy 59 void (*elemFree)(void *) ///< destructor for data on list 60 ); 60 61 61 62 /** Add to list */ 62 psDlist *psDlistAdd(psDlist *list, ///< list to add to (may be NULL) 63 void *data, ///< data item to add 64 int where) ///< index, PS_DLIST_HEAD, or PS_DLIST_TAIL 65 ; 63 psDlist *psDlistAdd( 64 psDlist *list, ///< list to add to (may be NULL) 65 void *data, ///< data item to add 66 int where ///< index, PS_DLIST_HEAD, or PS_DLIST_TAIL 67 ); 66 68 67 69 /** Append to a list */ 68 psDlist *psDlistAppend(psDlist *list, ///< list to append to (may be NULL) 69 void *data) ///< data item to add 70 ; 70 psDlist *psDlistAppend( 71 psDlist *list, ///< list to append to (may be NULL) 72 void *data ///< data item to add 73 ); 71 74 72 75 /** Remove from a list */ 73 void *psDlistRemove(psDlist *list, ///< list to remove element from 74 void *data, ///< data item to remove 75 int which) ///< index of item, or PS_DLIST_UNKNOWN, PS_DLIST_NEXT, PS_DLIST_PREV 76 ; 76 void *psDlistRemove( 77 psDlist *list, ///< list to remove element from 78 void *data, ///< data item to remove 79 int which ///< index of item, or PS_DLIST_UNKNOWN, PS_DLIST_NEXT, PS_DLIST_PREV 80 ); 77 81 78 82 /** Retrieve from a list */ 79 void *psDlistGet(const psDlist *list, ///< list to retrieve element from 80 int which) ///< index of item, or PS_DLIST_NEXT, PS_DLIST_PREV, PS_DLIST_UNKNOWN 81 ; 83 void *psDlistGet( 84 const psDlist *list, ///< list to retrieve element from 85 int which ///< index of item, or PS_DLIST_NEXT, PS_DLIST_PREV, PS_DLIST_UNKNOWN 86 ); 82 87 83 88 /** Set the iterator */ 84 void psDlistSetIterator(psDlist *list, ///< list to retrieve element from 85 int where) ///< index, PS_DLIST_HEAD, or PS_DLIST_TAIL 86 ; 89 void psDlistSetIterator( 90 psDlist *list, ///< list to retrieve element from 91 int where ///< index, PS_DLIST_HEAD, or PS_DLIST_TAIL 92 ); 87 93 88 94 /** Get next element relative to iter */ 89 void *psDlistGetNext(psDlist *list) ///< list to retrieve element from 90 ; 95 void *psDlistGetNext( 96 psDlist *list ///< list to retrieve element from 97 ); 98 99 /** Get current element at iter */ 100 void *psDlistGetCurrent( 101 psDlist *list ///< list to retrieve element from 102 ); 91 103 92 104 /** Get prev element relative to iter */ 93 void *psDlistGetPrev(psDlist *list) ///< list to retrieve element from 94 ; 105 void *psDlistGetPrevious( 106 psDlist *list ///< list to retrieve element from 107 ); 95 108 96 109 /** Convert doubly-linked list to an array */ 97 psVoidPtrArray *psDlistToArray(psDlist *dlist) ///< List to convert 98 ; 110 #if 0 111 psVoidPtrArray *psDlistToArray( 112 psDlist *dlist ///< List to convert 113 ); 99 114 100 115 /** Convert array to a doubly-linked list */ 101 psDlist *psArrayToDlist(psVoidPtrArray *arr) ///< Array to convert 102 ; 116 psDlist *psArrayToDlist( 117 psVoidPtrArray *arr ///< Array to convert 118 ); 119 #endif 103 120 104 / * \} */ //End of DataGroup Functions121 /// @} End of DataGroup Functions 105 122 106 123 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
