New functions...

FossilOrigin-Name: 31c0364f998290aa3090dcba55d276387ad6937840eb7583da577f123463a668
This commit is contained in:
7u83@mail.ru 2015-05-04 05:35:47 +00:00
parent 14302b1531
commit f7f00c22e9
1 changed files with 46 additions and 2 deletions

View File

@ -41,8 +41,8 @@ struct mbag_typedef{
const char *name;
/** A pointer to a function to delete elements of this type */
void (*del)(void*);
/** A pointer to convert elements of this type to a string.
This function is maily used to store elements to a SQL database
/** A pointer to a function to convert elements of this type to a string.
This function is mainly used to store elements to an SQL database
or to json strings */
int (*to_str)(void*,char *dst);
/** Cereate an item of this type from a string, which was previously
@ -69,6 +69,10 @@ struct mbag_item{
uint32_t iid;
const char *id;
};
/** indicates if the key is dynamic oder static.
If dynamic, the id will be freed using free
if mbag_item is deleted */
uint8_t dynid;
/** Type of this item */
const struct mbag_typedef * type;
/** Value of this item */
@ -101,6 +105,7 @@ extern const struct mbag_typedef mbag_type_vendorstr;
extern const struct mbag_typedef mbag_type_str;
extern const struct mbag_typedef mbag_type_avltree;
extern const struct mbag_typedef mbag_type_const_data;
extern const struct mbag_typedef mbag_type_mbag_dyn;
/**
*@defgroup MbagTypes MBAG Types
@ -110,6 +115,7 @@ extern const struct mbag_typedef mbag_type_const_data;
#define MBAG_WORD (&mbag_type_word)
#define MBAG_DWORD (&mbag_type_dword)
#define MBAG_MBAG (&mbag_type_mbag)
#define MBAG_MBAG_DYN (&mbag_type_mbag_dyn)
#define MBAG_BSTR (&mbag_type_bstr)
#define MBAG_BSTR16 (&mbag_type_bstr16)
#define MBAG_VENDORSTR (&mbag_type_vendorstr)
@ -222,6 +228,8 @@ static inline vendorstr_t mbag_set_vendorstr(mbag_t s, const char *id, uint32_t
}
mbag_item_t *mbag_item_new(mbagtype_t type);
@ -406,6 +414,42 @@ static inline mavl_t mbag_get_mavl_c(mbag_t s, const char *id,
return avltree;
}
static inline mavl_t mbag_get_mbag_c(mbag_t s, const char *id,
mavl_t (creator) ())
{
struct mbag_item *i = mbag_get(s, id);
if (i)
return i->data;
if (!creator)
return NULL;
mavl_t avltree = creator();
if (!avltree)
return NULL;
mbag_set_mbag(s, id, avltree);
return avltree;
}
static inline mavl_t mbag_i_get_mbag_c(mbag_t s, uint32_t iid,
mavl_t (creator) ())
{
struct mbag_item *i = mbag_i_get(s, iid);
if (i)
return i->data;
if (!creator)
return NULL;
mavl_t avltree = creator();
if (!avltree)
return NULL;
mbag_i_set_mbag(s, iid, avltree);
return avltree;
}
static inline mavl_t mbag_i_get_mavl(mbag_t s, uint32_t id,
mavl_t (creator) ())
{