From e12753d2ec9db83ec08bb9db63902a82fb245cdd Mon Sep 17 00:00:00 2001 From: "Tomas Chvatal (scarabeus)" Date: Wed, 22 Oct 2008 22:50:54 +0200 Subject: X --- src/base/storage.c~ | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 src/base/storage.c~ (limited to 'src/base/storage.c~') diff --git a/src/base/storage.c~ b/src/base/storage.c~ new file mode 100644 index 0000000..7a7ee91 --- /dev/null +++ b/src/base/storage.c~ @@ -0,0 +1,125 @@ + +#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) +{ + assert(list != NULL); + assert(group != NULL); + assert(name != NULL); + addList(list, newStorageItem(group, name, data) ); +} + +void* getItemFromStorage(list_t *list, char *group, char *name) +{ + storage_item_t *this; + int i; + + assert(list != NULL); + 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; + } +#ifdef DEBUG + printf(_("%s %s was not found in storage!\n"), group, name); +#endif + return NULL; +} + +void delItemFromStorage(list_t *list, char *group, char *name, void *f) +{ + storage_item_t *this; + int i; + + assert(list != NULL); + 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(list != NULL); + 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); +} -- cgit v1.2.3