Go to the documentation of this file.
44 #define __need_size_t // for malloc, realloc, etc
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
97 struct _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
130 typedef void *(*weed_malloc_f)(size_t);
132 typedef void *(*weed_memset_f)(
void *, int, size_t);
133 typedef void *(*weed_memcpy_f)(
void *,
const void *, size_t);
136 typedef void *(*weed_realloc_f)(
void *, size_t);
137 typedef void *(*weed_calloc_f)(size_t, size_t);
138 typedef 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__)
163 #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 // the "seed_type" of a non-existent leaf
226 #define WEED_SEED_INT 1 // int32_t / uint_32t
227 #define WEED_SEED_DOUBLE 2 // 64 bit signed double
228 #define WEED_SEED_BOOLEAN 3 // int32_t: should only be set to values WEED_TRUE or WEED_FALSE
229 #define WEED_SEED_STRING 4 // NUL terminated array of char
230 #define WEED_SEED_INT64 5 // int64_t
233 #define WEED_SEED_FUNCPTR 64 // weed_funcptr_t
234 #define WEED_SEED_VOIDPTR 65 // weed_voidptr_t
235 #define WEED_SEED_PLANTPTR 66 // weed_plant_t *
237 #define WEED_SEED_FIRST_CUSTOM 1024
240 #define WEED_FLAG_UNDELETABLE (1 << 0) // leaf value may be altered but it cannot be deleted
241 #define WEED_FLAG_IMMUTABLE (1 << 1) // leaf value may not be changed, but it may be deleted
242 #define WEED_FLAG_RESERVED_13 (1 << 2) // reserved for future use by Weed
243 #define WEED_FLAG_RESERVED_12 (1 << 3) // reserved for future use by Weed
244 #define WEED_FLAG_RESERVED_11 (1 << 4) // reserved for future use by Weed
245 #define WEED_FLAG_RESERVED_10 (1 << 5) // reserved for future use by Weed
246 #define WEED_FLAG_RESERVED_9 (1 << 6) // reserved for future use by Weed
247 #define WEED_FLAG_RESERVED_8 (1 << 7) // reserved for future use by Weed
248 #define WEED_FLAG_RESERVED_7 (1 << 8) // reserved for future use by Weed
249 #define WEED_FLAG_RESERVED_6 (1 << 9) // reserved for future use by Weed
250 #define WEED_FLAG_RESERVED_5 (1 << 10) // reserved for future use by Weed
251 #define WEED_FLAG_RESERVED_4 (1 << 11) // reserved for future use by Weed
252 #define WEED_FLAG_RESERVED_3 (1 << 12) // reserved for future use by Weed
253 #define WEED_FLAG_RESERVED_2 (1 << 13) // reserved for future use by Weed
254 #define WEED_FLAG_RESERVED_1 (1 << 14) // reserved for future use by Weed
255 #define WEED_FLAG_RESERVED_0 (1 << 15) // reserved for future use by Weed
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) // bits 16 - 31 left for custom use
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
271 #endif // #ifndef __WEED_H__
__WEED_FN_DEF__ weed_leaf_set_f weed_leaf_set
Definition: weed.h:180
#define __WEED_FN_DEF__
Definition: weed.h:65
int32_t weed_error_t
Definition: weed.h:70
uint32_t weed_size_t
Definition: weed.h:69
EXPORTED weed_error_t weed_init(int32_t abi, uint64_t init_flags)
Definition: weed.c:286
__WEED_FN_DEF__ weed_calloc_f weed_calloc
Definition: weed.h:200
struct _weed_data weed_data_t
Definition: weed.h:79
__WEED_FN_DEF__ weed_leaf_get_f weed_leaf_get
Definition: weed.h:179
__WEED_FN_DEF__ weed_memset_f weed_memset
Definition: weed.h:196
weed_leaf_t weed_plant_t
Definition: weed.h:125
EXPORTED int32_t weed_get_abi_version(void)
weed_error_t(* weed_leaf_delete_f)(weed_plant_t *, const char *key)
Definition: weed.h:150
uint32_t(* weed_leaf_get_flags_f)(weed_plant_t *, const char *key)
Definition: weed.h:148
__WEED_FN_DEF__ weed_memmove_f weed_memmove
Definition: weed.h:201
char **(* weed_plant_list_leaves_f)(weed_plant_t *, weed_size_t *nleaves)
Definition: weed.h:141
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
__WEED_FN_DEF__ weed_leaf_element_size_f weed_leaf_element_size
Definition: weed.h:184
__WEED_FN_DEF__ weed_leaf_get_flags_f weed_leaf_get_flags
Definition: weed.h:186
void *(* weed_memmove_f)(void *, const void *, size_t)
Definition: weed.h:138
void *(* weed_memset_f)(void *, int, size_t)
Definition: weed.h:132
weed_size_t(* weed_leaf_num_elements_f)(weed_plant_t *, const char *key)
Definition: weed.h:145
weed_size_t(* weed_leaf_element_size_f)(weed_plant_t *, const char *key, int32_t idx)
Definition: weed.h:146
__WEED_FN_DEF__ weed_memcpy_f weed_memcpy
Definition: weed.h:195
__WEED_FN_DEF__ weed_plant_list_leaves_f weed_plant_list_leaves
Definition: weed.h:182
uint32_t(* weed_leaf_seed_type_f)(weed_plant_t *, const char *key)
Definition: weed.h:147
weed_error_t(* weed_leaf_get_f)(weed_plant_t *, const char *key, int32_t idx, weed_voidptr_t value)
Definition: weed.h:144
struct _weed_leaf weed_leaf_t
Definition: weed.h:93
__WEED_FN_DEF__ weed_malloc_f weed_malloc
Definition: weed.h:193
__WEED_FN_DEF__ weed_leaf_seed_type_f weed_leaf_seed_type
Definition: weed.h:185
__WEED_FN_DEF__ weed_realloc_f weed_realloc
Definition: weed.h:199
void *(* weed_calloc_f)(size_t, size_t)
Definition: weed.h:137
__WEED_FN_DEF__ weed_plant_free_f weed_plant_free
Definition: weed.h:189
__WEED_FN_DEF__ weed_plant_new_f weed_plant_new
Definition: weed.h:181
void * weed_voidptr_t
Definition: weed.h:71
__WEED_FN_DEF__ weed_leaf_num_elements_f weed_leaf_num_elements
Definition: weed.h:183
__WEED_FN_DEF__ weed_free_f weed_free
Definition: weed.h:194
weed_error_t(* weed_plant_free_f)(weed_plant_t *)
Definition: weed.h:149
void(* weed_free_f)(void *)
Definition: weed.h:131
weed_plant_t *(* weed_plant_new_f)(int32_t plant_type)
Definition: weed.h:140
void(* weed_funcptr_t)()
Definition: weed.h:72
__WEED_FN_DEF__ weed_leaf_delete_f weed_leaf_delete
Definition: weed.h:190
void *(* weed_realloc_f)(void *, size_t)
Definition: weed.h:136
weed_plant_t * weed_plantptr_t
Definition: weed.h:128
void *(* weed_memcpy_f)(void *, const void *, size_t)
Definition: weed.h:133
void *(* weed_malloc_f)(size_t)
Definition: weed.h:130