50#define WEED_ABI_VERSION 200
51#define WEED_API_VERSION WEED_ABI_VERSION
56#define WEED_ABI_CHECK_VERSION(version) (WEED_ABI_VERSION >= version)
57#define WEED_API_CHECK_VERSION(version) WEED_ABI_CHECK_VERSION(version)
60#define __WEED_FN_DEF__ extern
63#define __WEED_FN_DEF__
65#define __WEED_FN_DEF__ static
74#define WEED_VOIDPTR_SIZE sizeof(weed_voidptr_t)
75#define WEED_FUNCPTR_SIZE sizeof(weed_funcptr_t)
77#ifndef HAVE_WEED_DATA_T
78#define HAVE_WEED_DATA_T
91#ifndef HAVE_WEED_LEAF_T
92#define HAVE_WEED_LEAF_T
95#define _CACHE_SIZE_ 64
97struct _weed_leaf_nopadding {
102 uint32_t seed_type, flags;
108#define _WEED_PADBYTES_ ((_CACHE_SIZE_-(int)(sizeof(struct _weed_leaf_nopadding)))%_CACHE_SIZE_)
115 uint32_t seed_type, flags;
118 char padding[_WEED_PADBYTES_];
123#ifndef HAVE_WEED_PLANT_T
124#define HAVE_WEED_PLANT_T
130typedef void *(*weed_malloc_f)(size_t);
132typedef void *(*weed_memset_f)(
void *, int, size_t);
133typedef void *(*weed_memcpy_f)(
void *,
const void *, size_t);
136typedef void *(*weed_realloc_f)(
void *, size_t);
137typedef void *(*weed_calloc_f)(size_t, size_t);
138typedef void *(*weed_memmove_f)(
void *,
const void *, size_t);
152#if defined (__WEED_HOST__) || defined (__LIBWEED__)
159__WEED_FN_DEF__ weed_leaf_set_private_data_f weed_leaf_set_private_data;
160__WEED_FN_DEF__ weed_leaf_get_private_data_f weed_leaf_get_private_data;
162#if defined(__WEED_HOST__) || defined(__LIBWEED__)
164#define WEED_INIT_ALLBUGFIXES (1<<0)
167#define WEED_INIT_DEBUGMODE (1<<1)
205#define WEED_PLANT_UNKNOWN 0
206#define WEED_PLANT_FIRST_CUSTOM 16384
207#define WEED_PLANT_GENERIC (WEED_PLANT_FIRST_CUSTOM - 1)
210#define WEED_SUCCESS 0
211#define WEED_ERROR_MEMORY_ALLOCATION 1
212#define WEED_ERROR_NOSUCH_LEAF 2
213#define WEED_ERROR_NOSUCH_ELEMENT 3
214#define WEED_ERROR_WRONG_SEED_TYPE 4
215#define WEED_ERROR_IMMUTABLE 5
216#define WEED_ERROR_UNDELETABLE 6
217#define WEED_ERROR_CONCURRENCY 7
218#define WEED_ERROR_BADVERSION 8
220#define WEED_ERROR_FIRST_CUSTOM 1024
223#define WEED_SEED_INVALID 0
226#define WEED_SEED_INT 1
227#define WEED_SEED_DOUBLE 2
228#define WEED_SEED_BOOLEAN 3
229#define WEED_SEED_STRING 4
230#define WEED_SEED_INT64 5
233#define WEED_SEED_FUNCPTR 64
234#define WEED_SEED_VOIDPTR 65
235#define WEED_SEED_PLANTPTR 66
237#define WEED_SEED_FIRST_CUSTOM 1024
240#define WEED_FLAG_UNDELETABLE (1 << 0)
241#define WEED_FLAG_IMMUTABLE (1 << 1)
242#define WEED_FLAG_RESERVED_13 (1 << 2)
243#define WEED_FLAG_RESERVED_12 (1 << 3)
244#define WEED_FLAG_RESERVED_11 (1 << 4)
245#define WEED_FLAG_RESERVED_10 (1 << 5)
246#define WEED_FLAG_RESERVED_9 (1 << 6)
247#define WEED_FLAG_RESERVED_8 (1 << 7)
248#define WEED_FLAG_RESERVED_7 (1 << 8)
249#define WEED_FLAG_RESERVED_6 (1 << 9)
250#define WEED_FLAG_RESERVED_5 (1 << 10)
251#define WEED_FLAG_RESERVED_4 (1 << 11)
252#define WEED_FLAG_RESERVED_3 (1 << 12)
253#define WEED_FLAG_RESERVED_2 (1 << 13)
254#define WEED_FLAG_RESERVED_1 (1 << 14)
255#define WEED_FLAG_RESERVED_0 (1 << 15)
256#define WEED_FLAGBITS_RESERVED (WEED_FLAG_FIRST_CUSTOM - 1 \
257 - WEED_FLAG_UNDELETABLE - WEED_FLAG_IMMUTABLE)
258#define WEED_FLAG_FIRST_CUSTOM (1 << 16)
261#define WEED_LEAF_TYPE "type"
264#define WEED_LEAF_WEED_API_VERSION "weed_api_version"
265#define WEED_LEAF_WEED_ABI_VERSION WEED_LEAF_WEED_API_VERSION
EXPORTED weed_error_t weed_init(int32_t abi, uint64_t init_flags)
Definition: weed.c:286
EXPORTED int32_t weed_get_abi_version(void)
weed_error_t(* weed_leaf_set_f)(weed_plant_t *, const char *key, uint32_t seed_type, weed_size_t num_elems, weed_voidptr_t values)
Definition: weed.h:142
void *(* weed_calloc_f)(size_t, size_t)
Definition: weed.h:137
__WEED_FN_DEF__ weed_plant_list_leaves_f weed_plant_list_leaves
Definition: weed.h:182
uint32_t(* weed_leaf_get_flags_f)(weed_plant_t *, const char *key)
Definition: weed.h:148
__WEED_FN_DEF__ weed_leaf_set_f weed_leaf_set
Definition: weed.h:180
__WEED_FN_DEF__ weed_memset_f weed_memset
Definition: weed.h:196
__WEED_FN_DEF__ weed_calloc_f weed_calloc
Definition: weed.h:200
void *(* weed_memcpy_f)(void *, const void *, size_t)
Definition: weed.h:133
char **(* weed_plant_list_leaves_f)(weed_plant_t *, weed_size_t *nleaves)
Definition: weed.h:141
int32_t weed_error_t
Definition: weed.h:70
__WEED_FN_DEF__ weed_plant_free_f weed_plant_free
Definition: weed.h:189
weed_size_t(* weed_leaf_num_elements_f)(weed_plant_t *, const char *key)
Definition: weed.h:145
__WEED_FN_DEF__ weed_memcpy_f weed_memcpy
Definition: weed.h:195
__WEED_FN_DEF__ weed_realloc_f weed_realloc
Definition: weed.h:199
__WEED_FN_DEF__ weed_plant_new_f weed_plant_new
Definition: weed.h:181
void *(* weed_memmove_f)(void *, const void *, size_t)
Definition: weed.h:138
__WEED_FN_DEF__ weed_leaf_get_flags_f weed_leaf_get_flags
Definition: weed.h:186
#define __WEED_FN_DEF__
Definition: weed.h:65
weed_error_t(* weed_leaf_get_f)(weed_plant_t *, const char *key, int32_t idx, weed_voidptr_t value)
Definition: weed.h:144
void(* weed_funcptr_t)()
Definition: weed.h:72
weed_error_t(* weed_plant_free_f)(weed_plant_t *)
Definition: weed.h:149
void(* weed_free_f)(void *)
Definition: weed.h:131
__WEED_FN_DEF__ weed_malloc_f weed_malloc
Definition: weed.h:193
void * weed_voidptr_t
Definition: weed.h:71
weed_leaf_t weed_plant_t
Definition: weed.h:125
weed_error_t(* weed_leaf_delete_f)(weed_plant_t *, const char *key)
Definition: weed.h:150
__WEED_FN_DEF__ weed_leaf_seed_type_f weed_leaf_seed_type
Definition: weed.h:185
__WEED_FN_DEF__ weed_memmove_f weed_memmove
Definition: weed.h:201
weed_plant_t *(* weed_plant_new_f)(int32_t plant_type)
Definition: weed.h:140
struct _weed_data weed_data_t
Definition: weed.h:79
__WEED_FN_DEF__ weed_free_f weed_free
Definition: weed.h:194
void *(* weed_memset_f)(void *, int, size_t)
Definition: weed.h:132
__WEED_FN_DEF__ weed_leaf_element_size_f weed_leaf_element_size
Definition: weed.h:184
uint32_t(* weed_leaf_seed_type_f)(weed_plant_t *, const char *key)
Definition: weed.h:147
weed_plant_t * weed_plantptr_t
Definition: weed.h:128
__WEED_FN_DEF__ weed_leaf_delete_f weed_leaf_delete
Definition: weed.h:190
weed_size_t(* weed_leaf_element_size_f)(weed_plant_t *, const char *key, int32_t idx)
Definition: weed.h:146
struct _weed_leaf weed_leaf_t
Definition: weed.h:93
uint32_t weed_size_t
Definition: weed.h:69
void *(* weed_malloc_f)(size_t)
Definition: weed.h:130
void *(* weed_realloc_f)(void *, size_t)
Definition: weed.h:136
__WEED_FN_DEF__ weed_leaf_num_elements_f weed_leaf_num_elements
Definition: weed.h:183
__WEED_FN_DEF__ weed_leaf_get_f weed_leaf_get
Definition: weed.h:179