3 osrfList* osrfNewList() {
4 //osrfList* list = safe_malloc(sizeof(osrfList));
6 OSRF_MALLOC(list, sizeof(osrfList));
9 list->arrsize = OSRF_LIST_DEFAULT_SIZE;
10 //list->arrlist = safe_malloc( list->arrsize * sizeof(void*) );
11 OSRF_MALLOC(list->arrlist, list->arrsize * sizeof(void*));
15 osrfList* osrfNewListSize( unsigned int size ) {
16 //osrfList* list = safe_malloc(sizeof(osrfList));
18 OSRF_MALLOC(list, sizeof(osrfList));
20 list->freeItem = NULL;
22 //list->arrlist = safe_malloc( list->arrsize * sizeof(void*) );
23 OSRF_MALLOC( list->arrlist, list->arrsize * sizeof(void*) );
28 int osrfListPush( osrfList* list, void* item ) {
29 if(!(list)) return -1;
30 osrfListSet( list, item, list->size );
34 int osrfListPushFirst( osrfList* list, void* item ) {
35 if(!(list && item)) return -1;
37 for( i = 0; i < list->size; i++ )
38 if(!list->arrlist[i]) break;
39 osrfListSet( list, item, i );
43 void* osrfListSet( osrfList* list, void* item, unsigned int position ) {
44 if(!list || position < 0) return NULL;
47 int newsize = list->arrsize;
50 while( position >= newsize )
51 newsize += OSRF_LIST_INC_SIZE;
53 if( newsize > list->arrsize ) { /* expand the list if necessary */
54 OSRF_MALLOC(newarr, newsize * sizeof(void*));
55 for( i = 0; i < list->arrsize; i++ )
56 newarr[i] = list->arrlist[i];
58 list->arrlist = newarr;
59 list->arrsize = newsize;
62 void* olditem = osrfListRemove( list, position );
63 list->arrlist[position] = item;
64 if( list->size == 0 || list->size <= position )
65 list->size = position + 1;
70 void* osrfListGetIndex( osrfList* list, unsigned int position ) {
71 if(!list || position >= list->size) return NULL;
72 return list->arrlist[position];
75 void osrfListFree( osrfList* list ) {
78 if( list->freeItem ) {
80 for( i = 0; i < list->size; i++ ) {
81 if( (val = list->arrlist[i]) )
90 void* osrfListRemove( osrfList* list, int position ) {
91 if(!list || position >= list->size) return NULL;
93 void* olditem = list->arrlist[position];
94 list->arrlist[position] = NULL;
95 if( list->freeItem ) {
96 list->freeItem(olditem);
100 if( position == list->size - 1 ) list->size--;
105 int osrfListFind( osrfList* list, void* addr ) {
106 if(!(list && addr)) return -1;
108 for( index = 0; index < list->size; index++ ) {
109 if( list->arrlist[index] == addr )
116 unsigned int osrfListGetCount( osrfList* list ) {
122 void* osrfListPop( osrfList* list ) {
123 if(!list) return NULL;
124 return osrfListRemove( list, list->size - 1 );
128 osrfListIterator* osrfNewListIterator( osrfList* list ) {
129 if(!list) return NULL;
130 //osrfListIterator* itr = safe_malloc(sizeof(osrfListIterator));
131 osrfListIterator* itr;
132 OSRF_MALLOC(itr, sizeof(osrfListIterator));
138 void* osrfListIteratorNext( osrfListIterator* itr ) {
139 if(!(itr && itr->list)) return NULL;
140 if(itr->current >= itr->list->size) return NULL;
141 return itr->list->arrlist[itr->current++];
144 void osrfListIteratorFree( osrfListIterator* itr ) {
150 void osrfListIteratorReset( osrfListIterator* itr ) {
156 void osrfListVanillaFree( void* item ) {
160 void osrfListSetDefaultFree( osrfList* list ) {
162 list->freeItem = osrfListVanillaFree;