diff options
Diffstat (limited to 'src/base/list.c')
| -rwxr-xr-x | src/base/list.c | 142 |
1 files changed, 34 insertions, 108 deletions
diff --git a/src/base/list.c b/src/base/list.c index 39b3962..b59f64b 100755 --- a/src/base/list.c +++ b/src/base/list.c @@ -1,19 +1,18 @@ -#include "main.h" -#include "list.h" - #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> +#include "main.h" +#include "list.h" + list_t* newList() { list_t *new; - new = malloc( sizeof(list_t) ); - memset(new, 0, sizeof(list_t) ); - + new = malloc(sizeof(list_t)); + memset(new, 0, sizeof(list_t)); return new; } @@ -21,17 +20,13 @@ list_t* cloneList(list_t *p) { list_t *new; - assert( p != NULL ); - + assert(p != NULL); new = malloc( sizeof(list_t) ); memcpy(new, p, sizeof(list_t) ); - - if( p->list != NULL ) - { + if(p->list != NULL) { new->list = malloc( p->alloc * sizeof(void *) ); memcpy(new->list, p->list, p->alloc * sizeof(void *)); } - return new; } @@ -41,15 +36,12 @@ list_t* cloneListItem(list_t *p, void *f) void* (*fce)(void *); int i; - assert( p != NULL ); - assert( f != NULL ); - + assert(p != NULL); + assert(f != NULL); new = cloneList(p); fce = f; - - for(i = 0 ; i < p->count ; i++) + for (i = 0; i < p->count; i++) new->list[i] = fce(p->list[i]); - return new; } @@ -57,41 +49,33 @@ void addList(list_t *p, void *item) { assert( p != NULL ); - if( p->alloc == 0 ) - { + if (p->alloc == 0) { p->alloc = LIST_ALLOC_LIMIT; p->count = 1; - p->list = malloc(p->alloc * sizeof(void *) ); + p->list = malloc(p->alloc * sizeof(void *)); p->list[0] = item; - return; } - if( p->count + 1 <= p->alloc ) - { + if (p->count + 1 <= p->alloc) { p->list[p->count] = item; p->count += 1; - return; } - if( p->count + 1 > p->alloc ) - { + if (p->count + 1 > p->alloc) { void **new; - #ifdef DEBUG_LIST - printf("realocating from %d to %d (count=%d)\n", + printf("Realocating from %d to %d (count=%d)\n", p->alloc, p->alloc+LIST_ALLOC_LIMIT, p->count); #endif - p->alloc += LIST_ALLOC_LIMIT; - new = malloc(p->alloc * sizeof(void *) ); - memcpy(new, p->list, p->count * sizeof(void *) ); + new = malloc(p->alloc * sizeof(void *)); + memcpy(new, p->list, p->count * sizeof(void *)); free(p->list); p->list = new; p->list[p->count] = item; p->count++; - return; } } @@ -99,21 +83,16 @@ void addList(list_t *p, void *item) void insList(list_t *p, int n, void *item) { assert( p != NULL ); - addList(p, NULL); // :) - - assert( n >= 0 || n < p->count ); - - memmove(p->list+n+1, p->list+n, ( (p->count-1) - n ) * sizeof(void *)); - + assert(n >= 0 || n < p->count); + memmove(p->list+n+1, p->list+n, ((p->count-1) - n) * sizeof(void *)); p->list[n] = item; } void *getList(list_t *p, int n) { - assert( p != NULL ); - assert( n >= 0 || n < p->count ); - + assert(p != NULL); + assert(n >= 0 || n < p->count); return p->list[n]; } @@ -122,31 +101,25 @@ int searchListItem(list_t *p, void *n) int i; assert( p != NULL ); - - for( i = 0 ; i < p->count ; i++ ) - if( p->list[i] == n )return i; - + for (i = 0; i < p->count; i++) + if (p->list[i] == n) + return i; return -1; } void delList(list_t *p, int n) { - assert( p != NULL ); - assert( n >= 0 || n < p->count ); - + assert(p != NULL); + assert(n >= 0 || n < p->count); memmove(p->list+n, p->list+n+1, ( (p->count-1) - n ) * sizeof(void *)); - p->count--; - - if( p->count + LIST_ALLOC_LIMIT < p->alloc ) - { + if(p->count + LIST_ALLOC_LIMIT < p->alloc) { void **new; #ifdef DEBUG_LIST - printf("realocating from %d to %d (count=%d)\n", + printf("Realocating from %d to %d (count=%d)\n", p->alloc, p->alloc-LIST_ALLOC_LIMIT, p->count); #endif - p->alloc -= LIST_ALLOC_LIMIT; new = malloc(p->alloc * sizeof(void *) ); memcpy(new, p->list, p->count * sizeof(void *) ); @@ -159,12 +132,11 @@ void delListItem(list_t *p, int n, void *f) { int (*fce)(void *); - assert( p != NULL ); - assert( n >= 0 || n < p->count ); - + assert(p != NULL); + assert(n >= 0 || n < p->count); fce = f; - if( fce != NULL )fce(p->list[n]); - + if(fce != NULL) + fce(p->list[n]); delList(p, n); } @@ -188,54 +160,8 @@ void destroyListItem(list_t *p, void *f) assert( p != NULL ); assert( f != NULL ); - fce = f; - - for(i = 0 ; i < p->count ; i++) + for (i = 0; i < p->count; i++) fce(p->list[i]); - destroyList(p); -} - -/* -typedef struct pokus_str -{ - int x; -} pokus; - -pokus* newPokus(int n) -{ - pokus *new; - new = malloc(sizeof(pokus)); - new->x = n; - return new; -} - -pokus *clonePokus(pokus *p) -{ - pokus *new; - new = malloc(sizeof(pokus)); - memcpy(new, p, sizeof(pokus)); - return new; -} - -void destroyPokus(pokus *p) -{ - free(p); -} - -int main() -{ - list_t *my; - int i; - - my = newList(); - - for(i = 0; i < 100; i++) - addList(my, newPokus(i)); - - destroyListItem(my, destroyPokus); - - return 0; -} -*/ +}
\ No newline at end of file |