#include #include #include #include #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); }