diff options
| author | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-06-28 16:38:35 +0000 |
|---|---|---|
| committer | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-06-28 16:38:35 +0000 |
| commit | 2d776fcd61be168e1ff0ff2e4a5e71835e7cea19 (patch) | |
| tree | 7cf274897bf540d5332d446f583ffd066e4e2e1d /src/base/storage.c | |
| parent | b877ae23ac5d380ab3aa48d7724045cf4883b186 (diff) | |
- prekopanie adresarovej struktury, prva cast
git-svn-id: http://opensvn.csie.org/tuxanci_ng@77 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/base/storage.c')
| -rw-r--r-- | src/base/storage.c | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/base/storage.c b/src/base/storage.c new file mode 100644 index 0000000..e7afa45 --- /dev/null +++ b/src/base/storage.c @@ -0,0 +1,138 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> + +#include "main.h" +#include "list.h" + +typedef struct struct_storage_item +{ + char *name; + char *group; + void *data; +} storage_item_t; + +list_t* newStorage() +{ + return newList(); +} + +static storage_item_t* newStorageItem(char *group, char *name, void *data) +{ + storage_item_t *new; + + assert( name != NULL ); + assert( group != NULL ); + assert( data != NULL ); + + new = malloc( sizeof(storage_item_t) ); + new->name = strdup(name); + new->group = strdup(group); + new->data = data; + + return new; +} + +static void destroyStorageItem(storage_item_t *p, void *f) +{ + void(*fce)(void *); + + assert( p != NULL ); + assert( f != NULL ); + + fce = f; + + fce(p->data); + free(p->name); + free(p->group); + free(p); +} + +void addItemToStorage(list_t *list, char *group, char *name, void *data) +{ + addList(list, newStorageItem(group, name, data) ); +} + +void* getItemFromStorage(list_t *list, char *group, char *name) +{ + storage_item_t *this; + int i; + + assert( group != NULL ); + assert( name != NULL ); + + for(i = 0 ; i < list->count; i++) + { + this = (storage_item_t *) list->list[i]; + + if( strcmp(group, this->group) == 0 && strcmp(name, this->name) == 0 ) + { + return this->data; + } + } + + printf("%s %s not found in storage !!!\n", group, name); + return NULL; +} + +void delItemFromStorage(list_t *list, char *group, char *name, void *f) +{ + storage_item_t *this; + int i; + + assert( group != NULL ); + assert( name != NULL ); + + for(i = 0 ; i < list->count; i++) + { + this = (storage_item_t *) list->list[i]; + + if( strcmp(group, this->group) == 0 && strcmp(name, this->name) == 0 ) + { + destroyStorageItem(this, f); + delList(list, i); + return; + } + } + + return; +} + +void delAllItemFromStorage(list_t *list, char *group, void *f) +{ + storage_item_t *this; + int i; + + assert( group != NULL ); + + for(i = 0 ; i < list->count; i++) + { + this = (storage_item_t *) list->list[i]; + + if( strcmp(group, this->group) == 0 ) + { + destroyStorageItem(this, f); + delList(list, i); + i--; + } + } +} + +void destroyStorage(list_t *p, void *f) +{ + storage_item_t *this; + int i; + + assert( p != NULL ); + assert( f != NULL ); + + for( i = 0 ; i < p->count ; i++ ) + { + this = (storage_item_t *)p->list[i]; + destroyStorageItem(this, f); + } + + destroyList(p); +} |