add62d0ce8
FossilOrigin-Name: 41f173c229e684c67375aa023e860edfb9d30b9de108e8cc3b82f768b2a4a4f1
136 lines
2.2 KiB
C
136 lines
2.2 KiB
C
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "itemstore.h"
|
|
|
|
|
|
|
|
static inline void cw_itemstore_del_data(void *e)
|
|
{
|
|
struct cw_item * item = (struct cw_item*)e;
|
|
if (item->type==CW_ITEMTYPE_DATA)
|
|
free (item->data);
|
|
|
|
}
|
|
|
|
static void cw_itemstore_del(void * e)
|
|
{
|
|
|
|
cw_itemstore_del_data(e);
|
|
free(e);
|
|
}
|
|
|
|
|
|
static int cw_itemstore_cmp(const void *x1,const void*x2)
|
|
{
|
|
return ((struct cw_item*)x1)->id - ((struct cw_item*)x2)->id;
|
|
}
|
|
|
|
|
|
cw_itemstore_t cw_itemstore_create()
|
|
{
|
|
return avltree_create(cw_itemstore_cmp,cw_itemstore_del);
|
|
}
|
|
|
|
|
|
struct cw_item * cw_item_create(cw_itemstore_t s,uint32_t id)
|
|
{
|
|
struct cw_item is;
|
|
is.id=id;
|
|
|
|
struct cw_item *i=avltree_get(s,&is);
|
|
if (i) {
|
|
cw_itemstore_del_data(i);
|
|
return i;
|
|
}
|
|
|
|
i = malloc(sizeof(struct cw_item));
|
|
if (!i)
|
|
return 0;
|
|
i->id=id;
|
|
return avltree_add(s,i);
|
|
}
|
|
|
|
|
|
|
|
int cw_itemstore_set_byte(cw_itemstore_t s,uint32_t id,uint8_t byte)
|
|
{
|
|
struct cw_item *i = cw_item_create(s,id);
|
|
if (!i)
|
|
return 0;
|
|
i->byte=byte;
|
|
i->type=CW_ITEMTYPE_BYTE;
|
|
return 1;
|
|
}
|
|
|
|
int cw_itemstore_set_word(cw_itemstore_t s,uint32_t id,uint32_t word)
|
|
{
|
|
struct cw_item *i = cw_item_create(s,id);
|
|
if (!i)
|
|
return 0;
|
|
i->word=word;
|
|
i->type=CW_ITEMTYPE_WORD;
|
|
return 1;
|
|
}
|
|
|
|
int cw_itemstore_set_dword(cw_itemstore_t s,uint32_t id,uint32_t dword)
|
|
{
|
|
struct cw_item *i = cw_item_create(s,id);
|
|
if (!i)
|
|
return 0;
|
|
i->dword=dword;
|
|
i->type=CW_ITEMTYPE_DWORD;
|
|
return 1;
|
|
}
|
|
|
|
int cw_itemstore_set_str(cw_itemstore_t s,uint32_t id,char *str)
|
|
{
|
|
struct cw_item *i = cw_item_create(s,id);
|
|
if (!i)
|
|
return 0;
|
|
i->type=CW_ITEMTYPE_DATA;
|
|
i->data=strdup(str);
|
|
return 1;
|
|
}
|
|
|
|
int cw_itemstore_set_strn(cw_itemstore_t s,uint32_t id,char *str,int n)
|
|
{
|
|
struct cw_item *i = cw_item_create(s,id);
|
|
if (!i)
|
|
return 0;
|
|
i->type=CW_ITEMTYPE_DATA;
|
|
i->data=strndup(str,n);
|
|
return 1;
|
|
}
|
|
|
|
|
|
/*
|
|
struct cw_item * i = malloc(sizeof(struct cw_item));
|
|
if ( !i)
|
|
return 0;
|
|
i->id=id;
|
|
i->type=CW_ITEMTYPE_BYTE;
|
|
i->byte=byte;
|
|
struct cw_item * r = avltree_add(s,i);
|
|
if (r!=i) {
|
|
r->byte=byte;
|
|
free(i);
|
|
}
|
|
return 1;
|
|
*/
|
|
|
|
|
|
/*
|
|
char * cw_itemstore_get_str(cw_itemstore_t s,uint32_t id)
|
|
{
|
|
// struct cw_item * item = avltree_get(s,id);
|
|
|
|
}
|
|
*/
|
|
|
|
//cw_itemstore_set_str(
|
|
|
|
// cw_item_t item = (cw_item_t) avltree_get(t,a);
|
|
|