Merge branch '#22-issue' into #22-descrete-tests
This commit is contained in:
		
						commit
						8186b7dc34
					
				@ -12,6 +12,7 @@
 | 
			
		||||
    vtype_list*:   T ## _ ## f ## _list,    const vtype_list*:   T ## _ ## f ## _list,\
 | 
			
		||||
    vtype_map*:    T ## _ ## f ## _map,     const vtype_map*:    T ## _ ## f ## _map,\
 | 
			
		||||
    vtype_set*:    T ## _ ## f ## _vset,    const vtype_set*:    T ## _ ## f ## _vset,\
 | 
			
		||||
    vtype_dict*:   T ## _ ## f ## _dict,    const vtype_dict*:   T ## _ ## f ## _dict,\
 | 
			
		||||
    vtype_bool:    T ## _ ## f ## _boolean,\
 | 
			
		||||
    vtype_uint8:   T ## _ ## f ## _uint8,\
 | 
			
		||||
    vtype_uint16:  T ## _ ## f ## _uint16,\
 | 
			
		||||
@ -34,6 +35,7 @@
 | 
			
		||||
    vtype_list*:   _LIBCDSB_Generic(T, f ## _list, v),    const vtype_list*:   _LIBCDSB_Generic(T, f ## _list, v),\
 | 
			
		||||
    vtype_map*:    _LIBCDSB_Generic(T, f ## _map, v),     const vtype_map*:    _LIBCDSB_Generic(T, f ## _map, v),\
 | 
			
		||||
    vtype_set*:    _LIBCDSB_Generic(T, f ## _vset, v),    const vtype_set*:    _LIBCDSB_Generic(T, f ## _vset, v),\
 | 
			
		||||
    vtype_dict*:   _LIBCDSB_Generic(T, f ## _dict, v),    const vtype_dict*:   _LIBCDSB_Generic(T, f ## _dict, v),\
 | 
			
		||||
    vtype_bool:    _LIBCDSB_Generic(T, f ## _boolean, v),\
 | 
			
		||||
    vtype_uint8:   _LIBCDSB_Generic(T, f ## _uint8, v),\
 | 
			
		||||
    vtype_uint16:  _LIBCDSB_Generic(T, f ## _uint16, v),\
 | 
			
		||||
@ -66,25 +68,4 @@
 | 
			
		||||
    short:         _LIBCDSB_GenericS(T, f ## _char, d),    unsigned short:      _LIBCDSB_GenericS(T, f ## _char, d)\
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
#define _LIBCDSB_GenericP(T, f, v) _Generic((v),\
 | 
			
		||||
    void**:               T ## _ ## f ## _pointers, const void**:         T ## _ ## f ## _pointers,\
 | 
			
		||||
    STRING_VIEW*:         T ## _ ## f ## _strings,  const STRING_VIEW*:   T ## _ ## f ## _strings,\
 | 
			
		||||
    ARRAY*:               T ## _ ## f ## _arrays,   const ARRAY*:         T ## _ ## f ## _arrays,\
 | 
			
		||||
    LIST*:                T ## _ ## f ## _lists,    const LIST*:          T ## _ ## f ## _lists,\
 | 
			
		||||
    MAP*:                 T ## _ ## f ## _maps,     const MAP*:           T ## _ ## f ## _maps,\
 | 
			
		||||
    VSET*:                T ## _ ## f ## _vsets,    const VSET*:          T ## _ ## f ## _vsets,\
 | 
			
		||||
    vtype_bool*:          T ## _ ## f ## _booleans, const vtype_bool*:    T ## _ ## f ## _booleans,\
 | 
			
		||||
    vtype_uint8*:         T ## _ ## f ## _uint8s,   const vtype_uint8*:   T ## _ ## f ## _uint8s,\
 | 
			
		||||
    vtype_uint16*:        T ## _ ## f ## _uint16s,  const vtype_uint16*:  T ## _ ## f ## _uint16s,\
 | 
			
		||||
    vtype_uint32*:        T ## _ ## f ## _uint32s,  const vtype_uint32*:  T ## _ ## f ## _uint32s,\
 | 
			
		||||
    vtype_uint64*:        T ## _ ## f ## _uint64s,  const vtype_uint64*:  T ## _ ## f ## _uint64s,\
 | 
			
		||||
    vtype_int8*:          T ## _ ## f ## _int8s,    const vtype_int8*:    T ## _ ## f ## _int8s,\
 | 
			
		||||
    vtype_int16*:         T ## _ ## f ## _int16s,   const vtype_int16*:   T ## _ ## f ## _int16s,\
 | 
			
		||||
    vtype_int32*:         T ## _ ## f ## _int32s,   const vtype_int32*:   T ## _ ## f ## _int32s,\
 | 
			
		||||
    vtype_int64*:         T ## _ ## f ## _int64s,   const vtype_int64*:   T ## _ ## f ## _int64s,\
 | 
			
		||||
    vtype_float*:         T ## _ ## f ## _floats,   const vtype_float*:   T ## _ ## f ## _floats,\
 | 
			
		||||
    vtype_double*:        T ## _ ## f ## _doubles,  const vtype_double*:  T ## _ ## f ## _doubles,\
 | 
			
		||||
    vtype_ldouble*:       T ## _ ## f ## _ldoubles, const vtype_ldouble*: T ## _ ## f ## _ldoubles\
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
#endif /* LIBCDSB_CORE_GENERICS_H */
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ typedef int (*array_access_callback)(void* value, ssize_t index, vtype type, voi
 | 
			
		||||
extern void  array_init(vtype_array* x, vtype type) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
 | 
			
		||||
extern void*  array_at(const vtype_array* s, ssize_t index) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern size_t array_slice(vtype_array* x, vtype_array* src, ssize_t index, size_t count, _Bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern size_t array_slice(vtype_array* x, vtype_array* src, ssize_t index, size_t count, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
 | 
			
		||||
extern void array_sort   (vtype_array* x) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern void array_reverse(vtype_array* x) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
@ -37,6 +37,7 @@ extern void libcdsb_array_push_array  (vtype_array* x, const  vtype_array* value
 | 
			
		||||
extern void libcdsb_array_push_list   (vtype_array* x, const   vtype_list* value) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern void libcdsb_array_push_map    (vtype_array* x, const    vtype_map* value) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern void libcdsb_array_push_vset   (vtype_array* x, const    vtype_set* value) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern void libcdsb_array_push_dict   (vtype_array* x, const   vtype_dict* value) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern void libcdsb_array_push_boolean(vtype_array* x,          vtype_bool value) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern void libcdsb_array_push_uint8  (vtype_array* x,         vtype_uint8 value) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern void libcdsb_array_push_uint16 (vtype_array* x,        vtype_uint16 value) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
@ -57,6 +58,7 @@ extern size_t libcdsb_array_count_array  (const vtype_array* s, const  vtype_arr
 | 
			
		||||
extern size_t libcdsb_array_count_list   (const vtype_array* s, const   vtype_list* value);
 | 
			
		||||
extern size_t libcdsb_array_count_map    (const vtype_array* s, const    vtype_map* value);
 | 
			
		||||
extern size_t libcdsb_array_count_vset   (const vtype_array* s, const    vtype_set* value);
 | 
			
		||||
extern size_t libcdsb_array_count_dict   (const vtype_array* s, const   vtype_dict* value);
 | 
			
		||||
extern size_t libcdsb_array_count_boolean(const vtype_array* s,          vtype_bool value);
 | 
			
		||||
extern size_t libcdsb_array_count_int8   (const vtype_array* s,          vtype_int8 value);
 | 
			
		||||
extern size_t libcdsb_array_count_int16  (const vtype_array* s,         vtype_int16 value);
 | 
			
		||||
@ -70,24 +72,25 @@ extern size_t libcdsb_array_count_float  (const vtype_array* s,         vtype_fl
 | 
			
		||||
extern size_t libcdsb_array_count_double (const vtype_array* s,        vtype_double value);
 | 
			
		||||
extern size_t libcdsb_array_count_ldouble(const vtype_array* s,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern int libcdsb_array_find_pointer(vtype_array* x,  const         void* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_string (vtype_array* x,  const         char* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_array  (vtype_array* x,  const vtype_string* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_list   (vtype_array* x,  const  vtype_array* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_map    (vtype_array* x,  const   vtype_list* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_vset   (vtype_array* x,  const    vtype_map* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_cstring(vtype_array* x,  const    vtype_set* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_boolean(vtype_array* x,           vtype_bool value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_uint8  (vtype_array* x,          vtype_uint8 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_uint16 (vtype_array* x,         vtype_uint16 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_uint32 (vtype_array* x,         vtype_uint32 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_uint64 (vtype_array* x,         vtype_uint64 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_int8   (vtype_array* x,           vtype_int8 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_int16  (vtype_array* x,          vtype_int16 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_int32  (vtype_array* x,          vtype_int32 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_int64  (vtype_array* x,          vtype_int64 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_float  (vtype_array* x,          vtype_float value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_double (vtype_array* x,         vtype_double value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_ldouble(vtype_array* x,        vtype_ldouble value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_pointer(vtype_array* x, const         void* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_cstring(vtype_array* x, const         char* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_string (vtype_array* x, const vtype_string* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_array  (vtype_array* x, const  vtype_array* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_list   (vtype_array* x, const   vtype_list* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_map    (vtype_array* x, const    vtype_map* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_vset   (vtype_array* x, const    vtype_set* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn12__;
 | 
			
		||||
extern int libcdsb_array_find_dict   (vtype_array* x, const   vtype_dict* value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_boolean(vtype_array* x,          vtype_bool value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_uint8  (vtype_array* x,         vtype_uint8 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_uint16 (vtype_array* x,        vtype_uint16 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_uint32 (vtype_array* x,        vtype_uint32 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_uint64 (vtype_array* x,        vtype_uint64 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_int8   (vtype_array* x,          vtype_int8 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_int16  (vtype_array* x,         vtype_int16 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_int32  (vtype_array* x,         vtype_int32 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_int64  (vtype_array* x,         vtype_int64 value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_float  (vtype_array* x,         vtype_float value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_double (vtype_array* x,        vtype_double value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_array_find_ldouble(vtype_array* x,       vtype_ldouble value, void* data, array_access_callback, bool reverse, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
 | 
			
		||||
#endif /* LIBCDSB_ARRAY_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										460
									
								
								include/dict.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										460
									
								
								include/dict.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,460 @@
 | 
			
		||||
/* This software is licensed by the MIT License, see LICENSE file */
 | 
			
		||||
/*                                Copyright © 2022 Gregory Lirent */
 | 
			
		||||
 | 
			
		||||
#include "__generics.h"
 | 
			
		||||
#include "vtype.h"
 | 
			
		||||
 | 
			
		||||
#ifndef LIBCDSB_DICT_H
 | 
			
		||||
#define LIBCDSB_DICT_H
 | 
			
		||||
 | 
			
		||||
typedef int (*dict_access_callback)(const void* key, vtype key_type, void* value, vtype value_type, void* data);
 | 
			
		||||
 | 
			
		||||
extern void dict_init(vtype_dict* x);
 | 
			
		||||
 | 
			
		||||
#define dict_pop(x, key, data, callback) _LIBCDSB_Generic (libcdsb_dict, get_by, key)(x, key, data, callback, 1)
 | 
			
		||||
#define dict_get(x, key, data, callback) _LIBCDSB_Generic (libcdsb_dict, get_by, key)(x, key, data, callback, 0)
 | 
			
		||||
#define dict_update(x, key, value)       _LIBCDSB_Generic2(libcdsb_dict, update, key, value)(x, key, value)
 | 
			
		||||
#define dict_remove(x, key)              dict_pop(x, key, 0, 0)
 | 
			
		||||
 | 
			
		||||
extern int libcdsb_dict_get_by_pointer(vtype_dict* x, const         void* key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_cstring(vtype_dict* x, const         char* key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_string (vtype_dict* x, const vtype_string* key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_array  (vtype_dict* x, const  vtype_array* key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_list   (vtype_dict* x, const   vtype_list* key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_map    (vtype_dict* x, const    vtype_map* key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_vset   (vtype_dict* x, const    vtype_set* key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_dict   (vtype_dict* x, const   vtype_dict* key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_boolean(vtype_dict* x,          vtype_bool key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_int8   (vtype_dict* x,          vtype_int8 key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_int16  (vtype_dict* x,         vtype_int16 key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_int32  (vtype_dict* x,         vtype_int32 key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_int64  (vtype_dict* x,         vtype_int64 key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_uint8  (vtype_dict* x,         vtype_uint8 key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_uint16 (vtype_dict* x,        vtype_uint16 key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_uint32 (vtype_dict* x,        vtype_uint32 key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_uint64 (vtype_dict* x,        vtype_uint64 key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_float  (vtype_dict* x,         vtype_float key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_double (vtype_dict* x,        vtype_double key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_dict_get_by_ldouble(vtype_dict* x,       vtype_ldouble key, void* data, dict_access_callback, bool cut);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_pointer(vtype_dict* x, const void* key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_cstring(vtype_dict* x, const void* key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_string (vtype_dict* x, const void* key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_array  (vtype_dict* x, const void* key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_list   (vtype_dict* x, const void* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_map    (vtype_dict* x, const void* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_vset   (vtype_dict* x, const void* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_dict   (vtype_dict* x, const void* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_boolean(vtype_dict* x, const void* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_int8   (vtype_dict* x, const void* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_int16  (vtype_dict* x, const void* key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_int32  (vtype_dict* x, const void* key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_int64  (vtype_dict* x, const void* key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_uint8  (vtype_dict* x, const void* key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_uint16 (vtype_dict* x, const void* key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_uint32 (vtype_dict* x, const void* key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_uint64 (vtype_dict* x, const void* key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_float  (vtype_dict* x, const void* key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_double (vtype_dict* x, const void* key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_pointer_ldouble(vtype_dict* x, const void* key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_string_pointer(vtype_dict* x, const vtype_string* key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_cstring(vtype_dict* x, const vtype_string* key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_string (vtype_dict* x, const vtype_string* key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_array  (vtype_dict* x, const vtype_string* key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_list   (vtype_dict* x, const vtype_string* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_map    (vtype_dict* x, const vtype_string* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_vset   (vtype_dict* x, const vtype_string* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_dict   (vtype_dict* x, const vtype_string* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_boolean(vtype_dict* x, const vtype_string* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_int8   (vtype_dict* x, const vtype_string* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_int16  (vtype_dict* x, const vtype_string* key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_int32  (vtype_dict* x, const vtype_string* key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_int64  (vtype_dict* x, const vtype_string* key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_uint8  (vtype_dict* x, const vtype_string* key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_uint16 (vtype_dict* x, const vtype_string* key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_uint32 (vtype_dict* x, const vtype_string* key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_uint64 (vtype_dict* x, const vtype_string* key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_float  (vtype_dict* x, const vtype_string* key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_double (vtype_dict* x, const vtype_string* key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_string_ldouble(vtype_dict* x, const vtype_string* key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_array_pointer(vtype_dict* x, const vtype_array* key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_cstring(vtype_dict* x, const vtype_array* key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_string (vtype_dict* x, const vtype_array* key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_array  (vtype_dict* x, const vtype_array* key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_list   (vtype_dict* x, const vtype_array* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_map    (vtype_dict* x, const vtype_array* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_vset   (vtype_dict* x, const vtype_array* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_dict   (vtype_dict* x, const vtype_array* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_boolean(vtype_dict* x, const vtype_array* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_int8   (vtype_dict* x, const vtype_array* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_int16  (vtype_dict* x, const vtype_array* key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_int32  (vtype_dict* x, const vtype_array* key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_int64  (vtype_dict* x, const vtype_array* key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_uint8  (vtype_dict* x, const vtype_array* key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_uint16 (vtype_dict* x, const vtype_array* key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_uint32 (vtype_dict* x, const vtype_array* key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_uint64 (vtype_dict* x, const vtype_array* key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_float  (vtype_dict* x, const vtype_array* key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_double (vtype_dict* x, const vtype_array* key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_array_ldouble(vtype_dict* x, const vtype_array* key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_list_pointer(vtype_dict* x, const vtype_list* key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_cstring(vtype_dict* x, const vtype_list* key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_string (vtype_dict* x, const vtype_list* key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_array  (vtype_dict* x, const vtype_list* key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_list   (vtype_dict* x, const vtype_list* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_map    (vtype_dict* x, const vtype_list* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_vset   (vtype_dict* x, const vtype_list* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_dict   (vtype_dict* x, const vtype_list* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_boolean(vtype_dict* x, const vtype_list* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_int8   (vtype_dict* x, const vtype_list* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_int16  (vtype_dict* x, const vtype_list* key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_int32  (vtype_dict* x, const vtype_list* key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_int64  (vtype_dict* x, const vtype_list* key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_uint8  (vtype_dict* x, const vtype_list* key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_uint16 (vtype_dict* x, const vtype_list* key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_uint32 (vtype_dict* x, const vtype_list* key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_uint64 (vtype_dict* x, const vtype_list* key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_float  (vtype_dict* x, const vtype_list* key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_double (vtype_dict* x, const vtype_list* key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_list_ldouble(vtype_dict* x, const vtype_list* key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_map_pointer(vtype_dict* x, const vtype_map* key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_cstring(vtype_dict* x, const vtype_map* key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_string (vtype_dict* x, const vtype_map* key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_array  (vtype_dict* x, const vtype_map* key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_list   (vtype_dict* x, const vtype_map* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_map    (vtype_dict* x, const vtype_map* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_vset   (vtype_dict* x, const vtype_map* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_dict   (vtype_dict* x, const vtype_map* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_boolean(vtype_dict* x, const vtype_map* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_int8   (vtype_dict* x, const vtype_map* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_int16  (vtype_dict* x, const vtype_map* key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_int32  (vtype_dict* x, const vtype_map* key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_int64  (vtype_dict* x, const vtype_map* key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_uint8  (vtype_dict* x, const vtype_map* key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_uint16 (vtype_dict* x, const vtype_map* key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_uint32 (vtype_dict* x, const vtype_map* key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_uint64 (vtype_dict* x, const vtype_map* key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_float  (vtype_dict* x, const vtype_map* key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_double (vtype_dict* x, const vtype_map* key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_map_ldouble(vtype_dict* x, const vtype_map* key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_vset_pointer(vtype_dict* x, const vtype_set* key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_cstring(vtype_dict* x, const vtype_set* key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_string (vtype_dict* x, const vtype_set* key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_array  (vtype_dict* x, const vtype_set* key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_list   (vtype_dict* x, const vtype_set* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_map    (vtype_dict* x, const vtype_set* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_vset   (vtype_dict* x, const vtype_set* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_dict   (vtype_dict* x, const vtype_set* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_boolean(vtype_dict* x, const vtype_set* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_int8   (vtype_dict* x, const vtype_set* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_int16  (vtype_dict* x, const vtype_set* key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_int32  (vtype_dict* x, const vtype_set* key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_int64  (vtype_dict* x, const vtype_set* key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_uint8  (vtype_dict* x, const vtype_set* key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_uint16 (vtype_dict* x, const vtype_set* key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_uint32 (vtype_dict* x, const vtype_set* key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_uint64 (vtype_dict* x, const vtype_set* key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_float  (vtype_dict* x, const vtype_set* key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_double (vtype_dict* x, const vtype_set* key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_vset_ldouble(vtype_dict* x, const vtype_set* key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_dict_pointer(vtype_dict* x, const vtype_dict* key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_cstring(vtype_dict* x, const vtype_dict* key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_string (vtype_dict* x, const vtype_dict* key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_array  (vtype_dict* x, const vtype_dict* key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_list   (vtype_dict* x, const vtype_dict* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_map    (vtype_dict* x, const vtype_dict* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_vset   (vtype_dict* x, const vtype_dict* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_dict   (vtype_dict* x, const vtype_dict* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_boolean(vtype_dict* x, const vtype_dict* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_int8   (vtype_dict* x, const vtype_dict* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_int16  (vtype_dict* x, const vtype_dict* key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_int32  (vtype_dict* x, const vtype_dict* key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_int64  (vtype_dict* x, const vtype_dict* key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_uint8  (vtype_dict* x, const vtype_dict* key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_uint16 (vtype_dict* x, const vtype_dict* key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_uint32 (vtype_dict* x, const vtype_dict* key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_uint64 (vtype_dict* x, const vtype_dict* key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_float  (vtype_dict* x, const vtype_dict* key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_double (vtype_dict* x, const vtype_dict* key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_dict_ldouble(vtype_dict* x, const vtype_dict* key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_pointer(vtype_dict* x, const char* key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_cstring(vtype_dict* x, const char* key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_string (vtype_dict* x, const char* key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_array  (vtype_dict* x, const char* key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_list   (vtype_dict* x, const char* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_map    (vtype_dict* x, const char* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_vset   (vtype_dict* x, const char* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_dict   (vtype_dict* x, const char* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_boolean(vtype_dict* x, const char* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_int8   (vtype_dict* x, const char* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_int16  (vtype_dict* x, const char* key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_int32  (vtype_dict* x, const char* key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_int64  (vtype_dict* x, const char* key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_uint8  (vtype_dict* x, const char* key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_uint16 (vtype_dict* x, const char* key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_uint32 (vtype_dict* x, const char* key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_uint64 (vtype_dict* x, const char* key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_float  (vtype_dict* x, const char* key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_double (vtype_dict* x, const char* key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_cstring_ldouble(vtype_dict* x, const char* key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_pointer(vtype_dict* x, vtype_bool key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_cstring(vtype_dict* x, vtype_bool key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_string (vtype_dict* x, vtype_bool key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_array  (vtype_dict* x, vtype_bool key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_list   (vtype_dict* x, vtype_bool key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_map    (vtype_dict* x, vtype_bool key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_vset   (vtype_dict* x, vtype_bool key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_dict   (vtype_dict* x, vtype_bool key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_boolean(vtype_dict* x, vtype_bool key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_int8   (vtype_dict* x, vtype_bool key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_int16  (vtype_dict* x, vtype_bool key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_int32  (vtype_dict* x, vtype_bool key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_int64  (vtype_dict* x, vtype_bool key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_uint8  (vtype_dict* x, vtype_bool key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_uint16 (vtype_dict* x, vtype_bool key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_uint32 (vtype_dict* x, vtype_bool key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_uint64 (vtype_dict* x, vtype_bool key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_float  (vtype_dict* x, vtype_bool key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_double (vtype_dict* x, vtype_bool key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_boolean_ldouble(vtype_dict* x, vtype_bool key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_pointer(vtype_dict* x, vtype_uint8 key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_cstring(vtype_dict* x, vtype_uint8 key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_string (vtype_dict* x, vtype_uint8 key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_array  (vtype_dict* x, vtype_uint8 key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_list   (vtype_dict* x, vtype_uint8 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_map    (vtype_dict* x, vtype_uint8 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_vset   (vtype_dict* x, vtype_uint8 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_dict   (vtype_dict* x, vtype_uint8 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_boolean(vtype_dict* x, vtype_uint8 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_int8   (vtype_dict* x, vtype_uint8 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_int16  (vtype_dict* x, vtype_uint8 key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_int32  (vtype_dict* x, vtype_uint8 key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_int64  (vtype_dict* x, vtype_uint8 key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_uint8  (vtype_dict* x, vtype_uint8 key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_uint16 (vtype_dict* x, vtype_uint8 key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_uint32 (vtype_dict* x, vtype_uint8 key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_uint64 (vtype_dict* x, vtype_uint8 key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_float  (vtype_dict* x, vtype_uint8 key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_double (vtype_dict* x, vtype_uint8 key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint8_ldouble(vtype_dict* x, vtype_uint8 key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_pointer(vtype_dict* x, vtype_uint16 key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_cstring(vtype_dict* x, vtype_uint16 key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_string (vtype_dict* x, vtype_uint16 key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_array  (vtype_dict* x, vtype_uint16 key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_list   (vtype_dict* x, vtype_uint16 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_map    (vtype_dict* x, vtype_uint16 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_vset   (vtype_dict* x, vtype_uint16 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_dict   (vtype_dict* x, vtype_uint16 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_boolean(vtype_dict* x, vtype_uint16 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_int8   (vtype_dict* x, vtype_uint16 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_int16  (vtype_dict* x, vtype_uint16 key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_int32  (vtype_dict* x, vtype_uint16 key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_int64  (vtype_dict* x, vtype_uint16 key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_uint8  (vtype_dict* x, vtype_uint16 key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_uint16 (vtype_dict* x, vtype_uint16 key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_uint32 (vtype_dict* x, vtype_uint16 key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_uint64 (vtype_dict* x, vtype_uint16 key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_float  (vtype_dict* x, vtype_uint16 key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_double (vtype_dict* x, vtype_uint16 key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint16_ldouble(vtype_dict* x, vtype_uint16 key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_pointer(vtype_dict* x, vtype_uint32 key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_cstring(vtype_dict* x, vtype_uint32 key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_string (vtype_dict* x, vtype_uint32 key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_array  (vtype_dict* x, vtype_uint32 key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_list   (vtype_dict* x, vtype_uint32 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_map    (vtype_dict* x, vtype_uint32 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_vset   (vtype_dict* x, vtype_uint32 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_dict   (vtype_dict* x, vtype_uint32 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_boolean(vtype_dict* x, vtype_uint32 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_int8   (vtype_dict* x, vtype_uint32 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_int16  (vtype_dict* x, vtype_uint32 key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_int32  (vtype_dict* x, vtype_uint32 key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_int64  (vtype_dict* x, vtype_uint32 key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_uint8  (vtype_dict* x, vtype_uint32 key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_uint16 (vtype_dict* x, vtype_uint32 key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_uint32 (vtype_dict* x, vtype_uint32 key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_uint64 (vtype_dict* x, vtype_uint32 key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_float  (vtype_dict* x, vtype_uint32 key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_double (vtype_dict* x, vtype_uint32 key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint32_ldouble(vtype_dict* x, vtype_uint32 key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_pointer(vtype_dict* x, vtype_uint64 key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_cstring(vtype_dict* x, vtype_uint64 key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_string (vtype_dict* x, vtype_uint64 key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_array  (vtype_dict* x, vtype_uint64 key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_list   (vtype_dict* x, vtype_uint64 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_map    (vtype_dict* x, vtype_uint64 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_vset   (vtype_dict* x, vtype_uint64 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_dict   (vtype_dict* x, vtype_uint64 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_boolean(vtype_dict* x, vtype_uint64 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_int8   (vtype_dict* x, vtype_uint64 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_int16  (vtype_dict* x, vtype_uint64 key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_int32  (vtype_dict* x, vtype_uint64 key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_int64  (vtype_dict* x, vtype_uint64 key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_uint8  (vtype_dict* x, vtype_uint64 key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_uint16 (vtype_dict* x, vtype_uint64 key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_uint32 (vtype_dict* x, vtype_uint64 key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_uint64 (vtype_dict* x, vtype_uint64 key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_float  (vtype_dict* x, vtype_uint64 key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_double (vtype_dict* x, vtype_uint64 key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_uint64_ldouble(vtype_dict* x, vtype_uint64 key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_int8_pointer(vtype_dict* x, vtype_int8 key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_cstring(vtype_dict* x, vtype_int8 key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_string (vtype_dict* x, vtype_int8 key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_array  (vtype_dict* x, vtype_int8 key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_list   (vtype_dict* x, vtype_int8 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_map    (vtype_dict* x, vtype_int8 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_vset   (vtype_dict* x, vtype_int8 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_dict   (vtype_dict* x, vtype_int8 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_boolean(vtype_dict* x, vtype_int8 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_int8   (vtype_dict* x, vtype_int8 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_int16  (vtype_dict* x, vtype_int8 key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_int32  (vtype_dict* x, vtype_int8 key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_int64  (vtype_dict* x, vtype_int8 key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_uint8  (vtype_dict* x, vtype_int8 key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_uint16 (vtype_dict* x, vtype_int8 key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_uint32 (vtype_dict* x, vtype_int8 key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_uint64 (vtype_dict* x, vtype_int8 key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_float  (vtype_dict* x, vtype_int8 key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_double (vtype_dict* x, vtype_int8 key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_int8_ldouble(vtype_dict* x, vtype_int8 key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_int16_pointer(vtype_dict* x, vtype_int16 key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_cstring(vtype_dict* x, vtype_int16 key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_string (vtype_dict* x, vtype_int16 key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_array  (vtype_dict* x, vtype_int16 key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_list   (vtype_dict* x, vtype_int16 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_map    (vtype_dict* x, vtype_int16 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_vset   (vtype_dict* x, vtype_int16 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_dict   (vtype_dict* x, vtype_int16 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_boolean(vtype_dict* x, vtype_int16 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_int8   (vtype_dict* x, vtype_int16 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_int16  (vtype_dict* x, vtype_int16 key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_int32  (vtype_dict* x, vtype_int16 key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_int64  (vtype_dict* x, vtype_int16 key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_uint8  (vtype_dict* x, vtype_int16 key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_uint16 (vtype_dict* x, vtype_int16 key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_uint32 (vtype_dict* x, vtype_int16 key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_uint64 (vtype_dict* x, vtype_int16 key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_float  (vtype_dict* x, vtype_int16 key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_double (vtype_dict* x, vtype_int16 key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_int16_ldouble(vtype_dict* x, vtype_int16 key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_int32_pointer(vtype_dict* x, vtype_int32 key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_cstring(vtype_dict* x, vtype_int32 key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_string (vtype_dict* x, vtype_int32 key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_array  (vtype_dict* x, vtype_int32 key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_list   (vtype_dict* x, vtype_int32 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_map    (vtype_dict* x, vtype_int32 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_vset   (vtype_dict* x, vtype_int32 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_dict   (vtype_dict* x, vtype_int32 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_boolean(vtype_dict* x, vtype_int32 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_int8   (vtype_dict* x, vtype_int32 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_int16  (vtype_dict* x, vtype_int32 key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_int32  (vtype_dict* x, vtype_int32 key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_int64  (vtype_dict* x, vtype_int32 key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_uint8  (vtype_dict* x, vtype_int32 key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_uint16 (vtype_dict* x, vtype_int32 key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_uint32 (vtype_dict* x, vtype_int32 key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_uint64 (vtype_dict* x, vtype_int32 key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_float  (vtype_dict* x, vtype_int32 key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_double (vtype_dict* x, vtype_int32 key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_int32_ldouble(vtype_dict* x, vtype_int32 key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_int64_pointer(vtype_dict* x, vtype_int64 key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_cstring(vtype_dict* x, vtype_int64 key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_string (vtype_dict* x, vtype_int64 key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_array  (vtype_dict* x, vtype_int64 key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_list   (vtype_dict* x, vtype_int64 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_map    (vtype_dict* x, vtype_int64 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_vset   (vtype_dict* x, vtype_int64 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_dict   (vtype_dict* x, vtype_int64 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_boolean(vtype_dict* x, vtype_int64 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_int8   (vtype_dict* x, vtype_int64 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_int16  (vtype_dict* x, vtype_int64 key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_int32  (vtype_dict* x, vtype_int64 key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_int64  (vtype_dict* x, vtype_int64 key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_uint8  (vtype_dict* x, vtype_int64 key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_uint16 (vtype_dict* x, vtype_int64 key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_uint32 (vtype_dict* x, vtype_int64 key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_uint64 (vtype_dict* x, vtype_int64 key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_float  (vtype_dict* x, vtype_int64 key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_double (vtype_dict* x, vtype_int64 key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_int64_ldouble(vtype_dict* x, vtype_int64 key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_float_pointer(vtype_dict* x, vtype_float key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_cstring(vtype_dict* x, vtype_float key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_string (vtype_dict* x, vtype_float key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_array  (vtype_dict* x, vtype_float key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_list   (vtype_dict* x, vtype_float key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_map    (vtype_dict* x, vtype_float key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_vset   (vtype_dict* x, vtype_float key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_dict   (vtype_dict* x, vtype_float key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_boolean(vtype_dict* x, vtype_float key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_int8   (vtype_dict* x, vtype_float key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_int16  (vtype_dict* x, vtype_float key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_int32  (vtype_dict* x, vtype_float key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_int64  (vtype_dict* x, vtype_float key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_uint8  (vtype_dict* x, vtype_float key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_uint16 (vtype_dict* x, vtype_float key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_uint32 (vtype_dict* x, vtype_float key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_uint64 (vtype_dict* x, vtype_float key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_float  (vtype_dict* x, vtype_float key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_double (vtype_dict* x, vtype_float key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_float_ldouble(vtype_dict* x, vtype_float key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_double_pointer(vtype_dict* x, vtype_double key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_cstring(vtype_dict* x, vtype_double key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_string (vtype_dict* x, vtype_double key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_array  (vtype_dict* x, vtype_double key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_list   (vtype_dict* x, vtype_double key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_map    (vtype_dict* x, vtype_double key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_vset   (vtype_dict* x, vtype_double key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_dict   (vtype_dict* x, vtype_double key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_boolean(vtype_dict* x, vtype_double key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_int8   (vtype_dict* x, vtype_double key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_int16  (vtype_dict* x, vtype_double key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_int32  (vtype_dict* x, vtype_double key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_int64  (vtype_dict* x, vtype_double key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_uint8  (vtype_dict* x, vtype_double key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_uint16 (vtype_dict* x, vtype_double key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_uint32 (vtype_dict* x, vtype_double key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_uint64 (vtype_dict* x, vtype_double key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_float  (vtype_dict* x, vtype_double key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_double (vtype_dict* x, vtype_double key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_double_ldouble(vtype_dict* x, vtype_double key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_pointer(vtype_dict* x, vtype_ldouble key, const         void* value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_cstring(vtype_dict* x, vtype_ldouble key, const         char* value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_string (vtype_dict* x, vtype_ldouble key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_array  (vtype_dict* x, vtype_ldouble key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_list   (vtype_dict* x, vtype_ldouble key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_map    (vtype_dict* x, vtype_ldouble key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_vset   (vtype_dict* x, vtype_ldouble key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_dict   (vtype_dict* x, vtype_ldouble key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_boolean(vtype_dict* x, vtype_ldouble key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_int8   (vtype_dict* x, vtype_ldouble key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_int16  (vtype_dict* x, vtype_ldouble key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_int32  (vtype_dict* x, vtype_ldouble key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_int64  (vtype_dict* x, vtype_ldouble key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_uint8  (vtype_dict* x, vtype_ldouble key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_uint16 (vtype_dict* x, vtype_ldouble key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_uint32 (vtype_dict* x, vtype_ldouble key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_uint64 (vtype_dict* x, vtype_ldouble key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_float  (vtype_dict* x, vtype_ldouble key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_double (vtype_dict* x, vtype_ldouble key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_dict_update_ldouble_ldouble(vtype_dict* x, vtype_ldouble key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
#endif /* LIBCDSB_DICT_H */
 | 
			
		||||
							
								
								
									
										18
									
								
								include/extra/dict.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								include/extra/dict.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
/* This software is licensed by the MIT License, see LICENSE file */
 | 
			
		||||
/*                                Copyright © 2022 Gregory Lirent */
 | 
			
		||||
 | 
			
		||||
#include "../dict.h"
 | 
			
		||||
 | 
			
		||||
#ifndef LIBCDSB_EXTRA_DICT_H
 | 
			
		||||
#define LIBCDSB_EXTRA_DICT_H
 | 
			
		||||
 | 
			
		||||
#define dict_foreach(x, data, callback) libcdsb_dict_foreach(x, data, callback, 0)
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_update(vtype_dict* x, const void* k, vtype kt, const void* v, vtype vt) LIBCDSB_nt__ LIBCDSB_nn124__;
 | 
			
		||||
 | 
			
		||||
extern int libcdsb_dict_get    (vtype_dict* x, const void* key, vtype key_type, void* data, dict_access_callback, bool cut) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
extern int libcdsb_dict_foreach(vtype_dict* x, void* data, dict_access_callback, bool flush) LIBCDSB_nt__ LIBCDSB_nn13__;
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_dict_shrink_to_fit(vtype_dict* x) LIBCDSB_nt__ LIBCDSB_nn1__;
 | 
			
		||||
 | 
			
		||||
#endif /* LIBCDSB_EXTRA_DICT_H */
 | 
			
		||||
@ -40,6 +40,7 @@ extern int libcdsb_list_find_array  (vtype_list* x, const  vtype_array* value, v
 | 
			
		||||
extern int libcdsb_list_find_list   (vtype_list* x, const   vtype_list* value, void* data, list_access_callback, bool reverse, bool cut);
 | 
			
		||||
extern int libcdsb_list_find_map    (vtype_list* x, const    vtype_map* value, void* data, list_access_callback, bool reverse, bool cut);
 | 
			
		||||
extern int libcdsb_list_find_vset   (vtype_list* x, const    vtype_set* value, void* data, list_access_callback, bool reverse, bool cut);
 | 
			
		||||
extern int libcdsb_list_find_dict   (vtype_list* x, const   vtype_dict* value, void* data, list_access_callback, bool reverse, bool cut);
 | 
			
		||||
extern int libcdsb_list_find_boolean(vtype_list* x,          vtype_bool value, void* data, list_access_callback, bool reverse, bool cut);
 | 
			
		||||
extern int libcdsb_list_find_int8   (vtype_list* x,          vtype_int8 value, void* data, list_access_callback, bool reverse, bool cut);
 | 
			
		||||
extern int libcdsb_list_find_int16  (vtype_list* x,         vtype_int16 value, void* data, list_access_callback, bool reverse, bool cut);
 | 
			
		||||
@ -60,6 +61,7 @@ extern size_t libcdsb_list_count_array  (const vtype_list* s, const  vtype_array
 | 
			
		||||
extern size_t libcdsb_list_count_list   (const vtype_list* s, const   vtype_list* value);
 | 
			
		||||
extern size_t libcdsb_list_count_map    (const vtype_list* s, const    vtype_map* value);
 | 
			
		||||
extern size_t libcdsb_list_count_vset   (const vtype_list* s, const    vtype_set* value);
 | 
			
		||||
extern size_t libcdsb_list_count_dict   (const vtype_list* s, const   vtype_dict* value);
 | 
			
		||||
extern size_t libcdsb_list_count_boolean(const vtype_list* s,          vtype_bool value);
 | 
			
		||||
extern size_t libcdsb_list_count_int8   (const vtype_list* s,          vtype_int8 value);
 | 
			
		||||
extern size_t libcdsb_list_count_int16  (const vtype_list* s,         vtype_int16 value);
 | 
			
		||||
@ -80,6 +82,7 @@ extern bool libcdsb_list_update_array  (vtype_list* x, ssize_t index, const  vty
 | 
			
		||||
extern bool libcdsb_list_update_list   (vtype_list* x, ssize_t index, const   vtype_list* value, int ins_direction);
 | 
			
		||||
extern bool libcdsb_list_update_map    (vtype_list* x, ssize_t index, const    vtype_map* value, int ins_direction);
 | 
			
		||||
extern bool libcdsb_list_update_vset   (vtype_list* x, ssize_t index, const    vtype_set* value, int ins_direction);
 | 
			
		||||
extern bool libcdsb_list_update_dict   (vtype_list* x, ssize_t index, const   vtype_dict* value, int ins_direction);
 | 
			
		||||
extern bool libcdsb_list_update_boolean(vtype_list* x, ssize_t index,          vtype_bool value, int ins_direction);
 | 
			
		||||
extern bool libcdsb_list_update_int8   (vtype_list* x, ssize_t index,          vtype_int8 value, int ins_direction);
 | 
			
		||||
extern bool libcdsb_list_update_int16  (vtype_list* x, ssize_t index,         vtype_int16 value, int ins_direction);
 | 
			
		||||
 | 
			
		||||
@ -11,10 +11,10 @@ typedef int (*map_access_callback)(const void* key, vtype key_type, void* value,
 | 
			
		||||
 | 
			
		||||
extern void map_init(vtype_map* x, vtype key_type);
 | 
			
		||||
 | 
			
		||||
#define map_pop(x, s, key)        _LIBCDSB_Generic (libcdsb_map, find, key)(x, s, key, 1)
 | 
			
		||||
#define map_get(x, s, key)        _LIBCDSB_Generic (libcdsb_map, find, key)(x, s, key, 0)
 | 
			
		||||
#define map_update(x, key, value) _LIBCDSB_Generic2(libcdsb_map, update, key, value)(x, key, value)
 | 
			
		||||
#define map_remove(x, key)        map_pop(0, x, key)
 | 
			
		||||
#define map_pop(x, key, data, callback) _LIBCDSB_Generic (libcdsb_map, find, key)(x, key, data, callback, 1)
 | 
			
		||||
#define map_get(x, key, data, callback) _LIBCDSB_Generic (libcdsb_map, find, key)(x, key, data, callback, 0)
 | 
			
		||||
#define map_update(x, key, value)       _LIBCDSB_Generic2(libcdsb_map, update, key, value)(x, key, value)
 | 
			
		||||
#define map_remove(x, key)              map_pop(x, key, 0, 0)
 | 
			
		||||
 | 
			
		||||
extern int libcdsb_map_find_pointer(vtype_map* x, const         void* key, void* data, map_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_map_find_cstring(vtype_map* x, const         char* key, void* data, map_access_callback, bool cut);
 | 
			
		||||
@ -23,6 +23,7 @@ extern int libcdsb_map_find_array  (vtype_map* x, const  vtype_array* key, void*
 | 
			
		||||
extern int libcdsb_map_find_list   (vtype_map* x, const   vtype_list* key, void* data, map_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_map_find_map    (vtype_map* x, const    vtype_map* key, void* data, map_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_map_find_vset   (vtype_map* x, const    vtype_set* key, void* data, map_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_map_find_dict   (vtype_map* x, const   vtype_dict* key, void* data, map_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_map_find_boolean(vtype_map* x,          vtype_bool key, void* data, map_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_map_find_int8   (vtype_map* x,          vtype_int8 key, void* data, map_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_map_find_int16  (vtype_map* x,         vtype_int16 key, void* data, map_access_callback, bool cut);
 | 
			
		||||
@ -43,6 +44,7 @@ extern bool libcdsb_map_update_pointer_array  (vtype_map* x, const void* key, co
 | 
			
		||||
extern bool libcdsb_map_update_pointer_list   (vtype_map* x, const void* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_pointer_map    (vtype_map* x, const void* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_pointer_vset   (vtype_map* x, const void* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_pointer_dict   (vtype_map* x, const void* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_pointer_boolean(vtype_map* x, const void* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_pointer_int8   (vtype_map* x, const void* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_pointer_int16  (vtype_map* x, const void* key,         vtype_int16 value);
 | 
			
		||||
@ -63,6 +65,7 @@ extern bool libcdsb_map_update_string_array  (vtype_map* x, const vtype_string*
 | 
			
		||||
extern bool libcdsb_map_update_string_list   (vtype_map* x, const vtype_string* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_string_map    (vtype_map* x, const vtype_string* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_string_vset   (vtype_map* x, const vtype_string* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_string_dict   (vtype_map* x, const vtype_string* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_string_boolean(vtype_map* x, const vtype_string* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_string_int8   (vtype_map* x, const vtype_string* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_string_int16  (vtype_map* x, const vtype_string* key,         vtype_int16 value);
 | 
			
		||||
@ -83,6 +86,7 @@ extern bool libcdsb_map_update_array_array  (vtype_map* x, const vtype_array* ke
 | 
			
		||||
extern bool libcdsb_map_update_array_list   (vtype_map* x, const vtype_array* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_array_map    (vtype_map* x, const vtype_array* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_array_vset   (vtype_map* x, const vtype_array* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_array_dict   (vtype_map* x, const vtype_array* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_array_boolean(vtype_map* x, const vtype_array* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_array_int8   (vtype_map* x, const vtype_array* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_array_int16  (vtype_map* x, const vtype_array* key,         vtype_int16 value);
 | 
			
		||||
@ -103,6 +107,7 @@ extern bool libcdsb_map_update_list_array  (vtype_map* x, const vtype_list* key,
 | 
			
		||||
extern bool libcdsb_map_update_list_list   (vtype_map* x, const vtype_list* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_list_map    (vtype_map* x, const vtype_list* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_list_vset   (vtype_map* x, const vtype_list* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_list_dict   (vtype_map* x, const vtype_list* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_list_boolean(vtype_map* x, const vtype_list* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_list_int8   (vtype_map* x, const vtype_list* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_list_int16  (vtype_map* x, const vtype_list* key,         vtype_int16 value);
 | 
			
		||||
@ -123,6 +128,7 @@ extern bool libcdsb_map_update_map_array  (vtype_map* x, const vtype_map* key, c
 | 
			
		||||
extern bool libcdsb_map_update_map_list   (vtype_map* x, const vtype_map* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_map_map    (vtype_map* x, const vtype_map* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_map_vset   (vtype_map* x, const vtype_map* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_map_dict   (vtype_map* x, const vtype_map* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_map_boolean(vtype_map* x, const vtype_map* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_map_int8   (vtype_map* x, const vtype_map* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_map_int16  (vtype_map* x, const vtype_map* key,         vtype_int16 value);
 | 
			
		||||
@ -143,6 +149,7 @@ extern bool libcdsb_map_update_vset_array  (vtype_map* x, const vtype_set* key,
 | 
			
		||||
extern bool libcdsb_map_update_vset_list   (vtype_map* x, const vtype_set* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_vset_map    (vtype_map* x, const vtype_set* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_vset_vset   (vtype_map* x, const vtype_set* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_vset_dict   (vtype_map* x, const vtype_set* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_vset_boolean(vtype_map* x, const vtype_set* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_vset_int8   (vtype_map* x, const vtype_set* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_vset_int16  (vtype_map* x, const vtype_set* key,         vtype_int16 value);
 | 
			
		||||
@ -156,6 +163,27 @@ extern bool libcdsb_map_update_vset_float  (vtype_map* x, const vtype_set* key,
 | 
			
		||||
extern bool libcdsb_map_update_vset_double (vtype_map* x, const vtype_set* key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_map_update_vset_ldouble(vtype_map* x, const vtype_set* key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_map_update_dict_pointer(vtype_map* x, const vtype_dict* key, const         void* value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_cstring(vtype_map* x, const vtype_dict* key, const         char* value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_string (vtype_map* x, const vtype_dict* key, const vtype_string* value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_array  (vtype_map* x, const vtype_dict* key, const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_list   (vtype_map* x, const vtype_dict* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_map    (vtype_map* x, const vtype_dict* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_vset   (vtype_map* x, const vtype_dict* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_dict   (vtype_map* x, const vtype_dict* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_boolean(vtype_map* x, const vtype_dict* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_int8   (vtype_map* x, const vtype_dict* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_int16  (vtype_map* x, const vtype_dict* key,         vtype_int16 value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_int32  (vtype_map* x, const vtype_dict* key,         vtype_int32 value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_int64  (vtype_map* x, const vtype_dict* key,         vtype_int64 value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_uint8  (vtype_map* x, const vtype_dict* key,         vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_uint16 (vtype_map* x, const vtype_dict* key,        vtype_uint16 value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_uint32 (vtype_map* x, const vtype_dict* key,        vtype_uint32 value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_uint64 (vtype_map* x, const vtype_dict* key,        vtype_uint64 value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_float  (vtype_map* x, const vtype_dict* key,         vtype_float value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_double (vtype_map* x, const vtype_dict* key,        vtype_double value);
 | 
			
		||||
extern bool libcdsb_map_update_dict_ldouble(vtype_map* x, const vtype_dict* key,       vtype_ldouble value);
 | 
			
		||||
 | 
			
		||||
extern bool libcdsb_map_update_cstring_pointer(vtype_map* x, const char* key, const         void* value);
 | 
			
		||||
extern bool libcdsb_map_update_cstring_cstring(vtype_map* x, const char* key, const         char* value);
 | 
			
		||||
extern bool libcdsb_map_update_cstring_string (vtype_map* x, const char* key, const vtype_string* value);
 | 
			
		||||
@ -163,6 +191,7 @@ extern bool libcdsb_map_update_cstring_array  (vtype_map* x, const char* key, co
 | 
			
		||||
extern bool libcdsb_map_update_cstring_list   (vtype_map* x, const char* key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_cstring_map    (vtype_map* x, const char* key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_cstring_vset   (vtype_map* x, const char* key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_cstring_dict   (vtype_map* x, const char* key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_cstring_boolean(vtype_map* x, const char* key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_cstring_int8   (vtype_map* x, const char* key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_cstring_int16  (vtype_map* x, const char* key,         vtype_int16 value);
 | 
			
		||||
@ -183,6 +212,7 @@ extern bool libcdsb_map_update_boolean_array  (vtype_map* x, vtype_bool key, con
 | 
			
		||||
extern bool libcdsb_map_update_boolean_list   (vtype_map* x, vtype_bool key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_boolean_map    (vtype_map* x, vtype_bool key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_boolean_vset   (vtype_map* x, vtype_bool key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_boolean_dict   (vtype_map* x, vtype_bool key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_boolean_boolean(vtype_map* x, vtype_bool key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_boolean_int8   (vtype_map* x, vtype_bool key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_boolean_int16  (vtype_map* x, vtype_bool key,         vtype_int16 value);
 | 
			
		||||
@ -203,6 +233,7 @@ extern bool libcdsb_map_update_uint8_array  (vtype_map* x, vtype_uint8 key, cons
 | 
			
		||||
extern bool libcdsb_map_update_uint8_list   (vtype_map* x, vtype_uint8 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint8_map    (vtype_map* x, vtype_uint8 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint8_vset   (vtype_map* x, vtype_uint8 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint8_dict   (vtype_map* x, vtype_uint8 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint8_boolean(vtype_map* x, vtype_uint8 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_uint8_int8   (vtype_map* x, vtype_uint8 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_uint8_int16  (vtype_map* x, vtype_uint8 key,         vtype_int16 value);
 | 
			
		||||
@ -223,6 +254,7 @@ extern bool libcdsb_map_update_uint16_array  (vtype_map* x, vtype_uint16 key, co
 | 
			
		||||
extern bool libcdsb_map_update_uint16_list   (vtype_map* x, vtype_uint16 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint16_map    (vtype_map* x, vtype_uint16 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint16_vset   (vtype_map* x, vtype_uint16 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint16_dict   (vtype_map* x, vtype_uint16 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint16_boolean(vtype_map* x, vtype_uint16 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_uint16_int8   (vtype_map* x, vtype_uint16 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_uint16_int16  (vtype_map* x, vtype_uint16 key,         vtype_int16 value);
 | 
			
		||||
@ -243,6 +275,7 @@ extern bool libcdsb_map_update_uint32_array  (vtype_map* x, vtype_uint32 key, co
 | 
			
		||||
extern bool libcdsb_map_update_uint32_list   (vtype_map* x, vtype_uint32 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint32_map    (vtype_map* x, vtype_uint32 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint32_vset   (vtype_map* x, vtype_uint32 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint32_dict   (vtype_map* x, vtype_uint32 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint32_boolean(vtype_map* x, vtype_uint32 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_uint32_int8   (vtype_map* x, vtype_uint32 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_uint32_int16  (vtype_map* x, vtype_uint32 key,         vtype_int16 value);
 | 
			
		||||
@ -263,6 +296,7 @@ extern bool libcdsb_map_update_uint64_array  (vtype_map* x, vtype_uint64 key, co
 | 
			
		||||
extern bool libcdsb_map_update_uint64_list   (vtype_map* x, vtype_uint64 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint64_map    (vtype_map* x, vtype_uint64 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint64_vset   (vtype_map* x, vtype_uint64 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint64_dict   (vtype_map* x, vtype_uint64 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_uint64_boolean(vtype_map* x, vtype_uint64 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_uint64_int8   (vtype_map* x, vtype_uint64 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_uint64_int16  (vtype_map* x, vtype_uint64 key,         vtype_int16 value);
 | 
			
		||||
@ -283,6 +317,7 @@ extern bool libcdsb_map_update_int8_array  (vtype_map* x, vtype_int8 key, const
 | 
			
		||||
extern bool libcdsb_map_update_int8_list   (vtype_map* x, vtype_int8 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_int8_map    (vtype_map* x, vtype_int8 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_int8_vset   (vtype_map* x, vtype_int8 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_int8_dict   (vtype_map* x, vtype_int8 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_int8_boolean(vtype_map* x, vtype_int8 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_int8_int8   (vtype_map* x, vtype_int8 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_int8_int16  (vtype_map* x, vtype_int8 key,         vtype_int16 value);
 | 
			
		||||
@ -303,6 +338,7 @@ extern bool libcdsb_map_update_int16_array  (vtype_map* x, vtype_int16 key, cons
 | 
			
		||||
extern bool libcdsb_map_update_int16_list   (vtype_map* x, vtype_int16 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_int16_map    (vtype_map* x, vtype_int16 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_int16_vset   (vtype_map* x, vtype_int16 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_int16_dict   (vtype_map* x, vtype_int16 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_int16_boolean(vtype_map* x, vtype_int16 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_int16_int8   (vtype_map* x, vtype_int16 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_int16_int16  (vtype_map* x, vtype_int16 key,         vtype_int16 value);
 | 
			
		||||
@ -323,6 +359,7 @@ extern bool libcdsb_map_update_int32_array  (vtype_map* x, vtype_int32 key, cons
 | 
			
		||||
extern bool libcdsb_map_update_int32_list   (vtype_map* x, vtype_int32 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_int32_map    (vtype_map* x, vtype_int32 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_int32_vset   (vtype_map* x, vtype_int32 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_int32_dict   (vtype_map* x, vtype_int32 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_int32_boolean(vtype_map* x, vtype_int32 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_int32_int8   (vtype_map* x, vtype_int32 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_int32_int16  (vtype_map* x, vtype_int32 key,         vtype_int16 value);
 | 
			
		||||
@ -343,6 +380,7 @@ extern bool libcdsb_map_update_int64_array  (vtype_map* x, vtype_int64 key, cons
 | 
			
		||||
extern bool libcdsb_map_update_int64_list   (vtype_map* x, vtype_int64 key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_int64_map    (vtype_map* x, vtype_int64 key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_int64_vset   (vtype_map* x, vtype_int64 key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_int64_dict   (vtype_map* x, vtype_int64 key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_int64_boolean(vtype_map* x, vtype_int64 key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_int64_int8   (vtype_map* x, vtype_int64 key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_int64_int16  (vtype_map* x, vtype_int64 key,         vtype_int16 value);
 | 
			
		||||
@ -363,6 +401,7 @@ extern bool libcdsb_map_update_float_array  (vtype_map* x, vtype_float key, cons
 | 
			
		||||
extern bool libcdsb_map_update_float_list   (vtype_map* x, vtype_float key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_float_map    (vtype_map* x, vtype_float key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_float_vset   (vtype_map* x, vtype_float key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_float_dict   (vtype_map* x, vtype_float key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_float_boolean(vtype_map* x, vtype_float key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_float_int8   (vtype_map* x, vtype_float key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_float_int16  (vtype_map* x, vtype_float key,         vtype_int16 value);
 | 
			
		||||
@ -383,6 +422,7 @@ extern bool libcdsb_map_update_double_array  (vtype_map* x, vtype_double key, co
 | 
			
		||||
extern bool libcdsb_map_update_double_list   (vtype_map* x, vtype_double key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_double_map    (vtype_map* x, vtype_double key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_double_vset   (vtype_map* x, vtype_double key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_double_dict   (vtype_map* x, vtype_double key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_double_boolean(vtype_map* x, vtype_double key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_double_int8   (vtype_map* x, vtype_double key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_double_int16  (vtype_map* x, vtype_double key,         vtype_int16 value);
 | 
			
		||||
@ -403,6 +443,7 @@ extern bool libcdsb_map_update_ldouble_array  (vtype_map* x, vtype_ldouble key,
 | 
			
		||||
extern bool libcdsb_map_update_ldouble_list   (vtype_map* x, vtype_ldouble key, const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_map_update_ldouble_map    (vtype_map* x, vtype_ldouble key, const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_map_update_ldouble_vset   (vtype_map* x, vtype_ldouble key, const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_map_update_ldouble_dict   (vtype_map* x, vtype_ldouble key, const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_map_update_ldouble_boolean(vtype_map* x, vtype_ldouble key,          vtype_bool value);
 | 
			
		||||
extern bool libcdsb_map_update_ldouble_int8   (vtype_map* x, vtype_ldouble key,          vtype_int8 value);
 | 
			
		||||
extern bool libcdsb_map_update_ldouble_int16  (vtype_map* x, vtype_ldouble key,         vtype_int16 value);
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@ extern bool libcdsb_vset_push_array  (vtype_set* x,  const  vtype_array* value);
 | 
			
		||||
extern bool libcdsb_vset_push_list   (vtype_set* x,  const   vtype_list* value);
 | 
			
		||||
extern bool libcdsb_vset_push_map    (vtype_set* x,  const    vtype_map* value);
 | 
			
		||||
extern bool libcdsb_vset_push_vset   (vtype_set* x,  const    vtype_set* value);
 | 
			
		||||
extern bool libcdsb_vset_push_dict   (vtype_set* x,  const   vtype_dict* value);
 | 
			
		||||
extern bool libcdsb_vset_push_boolean(vtype_set* x,           vtype_bool value);
 | 
			
		||||
extern bool libcdsb_vset_push_uint8  (vtype_set* x,          vtype_uint8 value);
 | 
			
		||||
extern bool libcdsb_vset_push_uint16 (vtype_set* x,         vtype_uint16 value);
 | 
			
		||||
@ -43,6 +44,7 @@ extern int libcdsb_vset_find_array  (vtype_set* x, const  vtype_array* value, vo
 | 
			
		||||
extern int libcdsb_vset_find_list   (vtype_set* x, const   vtype_list* value, void* data, vset_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_vset_find_map    (vtype_set* x, const    vtype_map* value, void* data, vset_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_vset_find_vset   (vtype_set* x, const    vtype_set* value, void* data, vset_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_vset_find_dict   (vtype_set* x, const   vtype_dict* value, void* data, vset_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_vset_find_boolean(vtype_set* x,          vtype_bool value, void* data, vset_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_vset_find_uint8  (vtype_set* x,         vtype_uint8 value, void* data, vset_access_callback, bool cut);
 | 
			
		||||
extern int libcdsb_vset_find_uint16 (vtype_set* x,        vtype_uint16 value, void* data, vset_access_callback, bool cut);
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,7 @@ typedef enum libcdsb_value_types {
 | 
			
		||||
    VTYPE_ARRAY   = 15,
 | 
			
		||||
    VTYPE_LIST    = 16,
 | 
			
		||||
    VTYPE_SET     = 17,
 | 
			
		||||
    VTYPE_DICT    = 18,
 | 
			
		||||
 | 
			
		||||
    LIBCDSB_VTYPE_TERMINATION, /* It must be at the end of the enum. Never be used */
 | 
			
		||||
} vtype;
 | 
			
		||||
@ -42,6 +43,7 @@ struct libcdsb_map  { struct    libcdsb_map_node* root; vtype type; };
 | 
			
		||||
struct libcdsb_set  { struct libcdsb_rbtree_node* root; vtype type; };
 | 
			
		||||
 | 
			
		||||
struct libcdsb_list { struct libcdsb_list_node* last; struct libcdsb_list_node* first; };
 | 
			
		||||
struct libcdsb_dict { struct libcdsb_dict_node** nodes; size_t capacity; size_t size; };
 | 
			
		||||
 | 
			
		||||
typedef void*         vtype_pointer;
 | 
			
		||||
typedef bool             vtype_bool;
 | 
			
		||||
@ -60,10 +62,13 @@ typedef float           vtype_float;
 | 
			
		||||
typedef double         vtype_double;
 | 
			
		||||
typedef long double   vtype_ldouble;
 | 
			
		||||
 | 
			
		||||
typedef uint_least64_t vtype_hash;
 | 
			
		||||
 | 
			
		||||
typedef struct libcdsb_array   vtype_array;
 | 
			
		||||
typedef struct libcdsb_map       vtype_map;
 | 
			
		||||
typedef struct libcdsb_set       vtype_set;
 | 
			
		||||
typedef struct libcdsb_list     vtype_list;
 | 
			
		||||
typedef struct libcdsb_dict     vtype_dict;
 | 
			
		||||
typedef struct libcdsb_string vtype_string;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -81,6 +86,10 @@ extern size_t list_size(const vtype_list* x)      LIBCDSB_pure__ LIBCDSB_nn1__;
 | 
			
		||||
extern size_t map_size(const vtype_map* x)        LIBCDSB_pure__ LIBCDSB_nn1__;
 | 
			
		||||
/* Get count of the set elements */
 | 
			
		||||
extern size_t vset_size(const vtype_set* x)       LIBCDSB_pure__ LIBCDSB_nn1__;
 | 
			
		||||
/* Get count of the dict elements */
 | 
			
		||||
extern size_t dict_size(const vtype_dict* x)      LIBCDSB_pure__ LIBCDSB_nn1__;
 | 
			
		||||
/* Get count of the available nodes */
 | 
			
		||||
extern size_t dict_capacity(const vtype_dict* x)  LIBCDSB_pure__ LIBCDSB_nn1__;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Cpmpare 2 strings */
 | 
			
		||||
@ -93,6 +102,8 @@ extern int list_compare(const vtype_list* s0, const vtype_list* s1)       LIBCDS
 | 
			
		||||
extern int map_compare(const vtype_map* s0, const vtype_map* s1)          LIBCDSB_cmpattr__;
 | 
			
		||||
/* Compare 2 sets */
 | 
			
		||||
extern int vset_compare(const vtype_set* s0, const vtype_set* s1)         LIBCDSB_cmpattr__;
 | 
			
		||||
/* Compare 2 dicts */
 | 
			
		||||
extern int dict_compare(const vtype_dict* s0, const vtype_dict* s1)       LIBCDSB_cmpattr__;
 | 
			
		||||
 | 
			
		||||
/* Copy string to another */
 | 
			
		||||
extern vtype_string string_copy(const vtype_string* s) LIBCDSB_cpyattr__;
 | 
			
		||||
@ -104,6 +115,8 @@ extern vtype_list list_copy(const vtype_list* s)       LIBCDSB_cpyattr__;
 | 
			
		||||
extern vtype_map map_copy(const vtype_map* s)          LIBCDSB_cpyattr__;
 | 
			
		||||
/* Copy set to another */
 | 
			
		||||
extern vtype_set vset_copy(const vtype_set* s)         LIBCDSB_cpyattr__;
 | 
			
		||||
/* Copy set to another */
 | 
			
		||||
extern vtype_dict dict_copy(const vtype_dict* s)       LIBCDSB_cpyattr__;
 | 
			
		||||
 | 
			
		||||
/* Duplicate string memory block */
 | 
			
		||||
extern vtype_string* string_duplicate(const vtype_string* s) LIBCDSB_dupattr__;
 | 
			
		||||
@ -115,6 +128,8 @@ extern vtype_list* list_duplicate(const vtype_list* s)       LIBCDSB_dupattr__;
 | 
			
		||||
extern vtype_map* map_duplicate(const vtype_map* s)          LIBCDSB_dupattr__;
 | 
			
		||||
/* Duplicate set memory block */
 | 
			
		||||
extern vtype_set* vset_duplicate(const vtype_set* s)         LIBCDSB_dupattr__;
 | 
			
		||||
/* Duplicate dict memory block */
 | 
			
		||||
extern vtype_dict* dict_duplicate(const vtype_dict* s)       LIBCDSB_dupattr__;
 | 
			
		||||
 | 
			
		||||
/* Copy string and store result to the memory block */
 | 
			
		||||
extern void string_copy_init(vtype_string* x, const vtype_string* s) LIBCDSB_nn12__;
 | 
			
		||||
@ -126,6 +141,8 @@ extern void list_copy_init(vtype_list* x, const vtype_list* s)       LIBCDSB_nn1
 | 
			
		||||
extern void map_copy_init(vtype_map* x, const vtype_map* s)          LIBCDSB_nn12__;
 | 
			
		||||
/* Copy set and store result to the memory block */
 | 
			
		||||
extern void vset_copy_init(vtype_set* x, const vtype_set* s)         LIBCDSB_nn12__;
 | 
			
		||||
/* Copy dict and store result to the memory block */
 | 
			
		||||
extern void dict_copy_init(vtype_dict* x, const vtype_dict* s)       LIBCDSB_nn12__;
 | 
			
		||||
 | 
			
		||||
/* Free string resources */
 | 
			
		||||
extern void string_free(vtype_string* x);
 | 
			
		||||
@ -137,5 +154,21 @@ extern void list_free(vtype_list* x);
 | 
			
		||||
extern void map_free(vtype_map* x);
 | 
			
		||||
/* Free set resources */
 | 
			
		||||
extern void vset_free(vtype_set* x);
 | 
			
		||||
/* Free dict resources */
 | 
			
		||||
extern void dict_free(vtype_dict* x);
 | 
			
		||||
 | 
			
		||||
/* Get hash of the string */
 | 
			
		||||
extern vtype_hash string_hash(const vtype_string* s) LIBCDSB_nn1__;
 | 
			
		||||
/* Get hash of the array */
 | 
			
		||||
extern vtype_hash array_hash(const vtype_array* s)   LIBCDSB_nn1__;
 | 
			
		||||
/* Get hash of the list */
 | 
			
		||||
extern vtype_hash list_hash(const vtype_list* s)     LIBCDSB_nn1__;
 | 
			
		||||
/* Get hash of the map */
 | 
			
		||||
extern vtype_hash map_hash(const vtype_map* s)       LIBCDSB_nn1__;
 | 
			
		||||
/* Get hash of the set */
 | 
			
		||||
extern vtype_hash vset_hash(const vtype_set* s)      LIBCDSB_nn1__;
 | 
			
		||||
/* Get hash of the dict */
 | 
			
		||||
extern vtype_hash dict_hash(const vtype_dict* s)     LIBCDSB_nn1__;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* LIBCDSB_VTYPE_H */
 | 
			
		||||
 | 
			
		||||
@ -57,17 +57,24 @@ typedef vtype_array   arr_t;
 | 
			
		||||
typedef vtype_list   list_t;
 | 
			
		||||
typedef vtype_map     map_t;
 | 
			
		||||
typedef vtype_set     set_t;
 | 
			
		||||
typedef vtype_dict   dict_t;
 | 
			
		||||
 | 
			
		||||
typedef vtype_hash   hash_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int libcdsb_vtype_compare_values(const void* s0, vtype t0, const void* s1, vtype t1);
 | 
			
		||||
extern int libcdsb_vtype_compare_values_eq(const void* s0, const void* s1, vtype t);
 | 
			
		||||
 | 
			
		||||
extern hash_t libcdsb_vtype_hash(void* value, vtype type);
 | 
			
		||||
 | 
			
		||||
#define vtype_stringify libcdsb_vtype_stringify
 | 
			
		||||
#define vtype_name      libcdsb_vtype_name
 | 
			
		||||
 | 
			
		||||
#define vtype_compare    libcdsb_vtype_compare_values
 | 
			
		||||
#define vtype_compare_eq libcdsb_vtype_compare_values_eq
 | 
			
		||||
 | 
			
		||||
#define vtype_hash       libcdsb_vtype_hash
 | 
			
		||||
 | 
			
		||||
#define vtype_size(type) (LIBCDSB_VTYPE_SIZES[type])
 | 
			
		||||
 | 
			
		||||
#define vtypeof(x) (vtype)(_Generic((x),\
 | 
			
		||||
@ -78,6 +85,7 @@ extern int libcdsb_vtype_compare_values_eq(const void* s0, const void* s1, vtype
 | 
			
		||||
    const list_t*: VTYPE_LIST,    list_t*: VTYPE_LIST,   list_t: VTYPE_LIST,\
 | 
			
		||||
    const map_t*:  VTYPE_MAP,     map_t*:  VTYPE_MAP,    map_t:  VTYPE_MAP,\
 | 
			
		||||
    const set_t*:  VTYPE_SET,     set_t*:  VTYPE_SET,    set_t:  VTYPE_SET,\
 | 
			
		||||
    const dict_t*: VTYPE_DICT,    dict_t*: VTYPE_DICT,   dict_t: VTYPE_DICT,\
 | 
			
		||||
    const vtype_bool*:    VTYPE_BOOLEAN, vtype_bool*:    VTYPE_BOOLEAN, vtype_bool:    VTYPE_BOOLEAN,\
 | 
			
		||||
    const vtype_uint8*:   VTYPE_UINT8,   vtype_uint8*:   VTYPE_UINT8,   vtype_uint8:   VTYPE_UINT8,\
 | 
			
		||||
    const vtype_uint16*:  VTYPE_UINT16,  vtype_uint16*:  VTYPE_UINT16,  vtype_uint16:  VTYPE_UINT16,\
 | 
			
		||||
 | 
			
		||||
@ -29,4 +29,19 @@ extern rbnode_t* libcdsb_rbtree_node_delete(rbnode_t** root, rbnode_t* node);
 | 
			
		||||
#define rbnode_is_empty(n) ((n) == rbnode_empty)
 | 
			
		||||
#define rbnode_is_root(n)  rbnode_is_empty((n)->parent)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void* libcdsb_rbtree_duplicate(const rbnode_t* s, void* (*node_duplicate)(void* src, void* parent, void* info), void* info);
 | 
			
		||||
extern int   libcdsb_rbtree_compare(const rbnode_t* s0, const rbnode_t* s1, int (*node_compare)(const rbnode_t* s0, const rbnode_t* s1, void* info), void* info);
 | 
			
		||||
 | 
			
		||||
extern hash_t libcdsb_rbtree_hash(const void* s, hash_t (*node_hash)(const void* s, void* info), void* info);
 | 
			
		||||
extern size_t libcdsb_rbtree_size(const void* s);
 | 
			
		||||
extern void   libcdsb_rbtree_free(void* x, void (*node_free)(void* x, void* info), void* info);
 | 
			
		||||
 | 
			
		||||
#define rbtree_duplicate libcdsb_rbtree_duplicate
 | 
			
		||||
#define rbtree_compare   libcdsb_rbtree_compare
 | 
			
		||||
#define rbtree_hash      libcdsb_rbtree_hash
 | 
			
		||||
#define rbtree_size      libcdsb_rbtree_size
 | 
			
		||||
#define rbtree_free      libcdsb_rbtree_free
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* LIBCDSB_SRC_INTERNAL_RBTREE_H */
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,9 @@ extern void* libcdsb_vnode_peek(const vnode_t* x, vtype type);
 | 
			
		||||
#define vnode_peek    libcdsb_vnode_peek
 | 
			
		||||
#define vnode_free    libcdsb_vnode_free
 | 
			
		||||
 | 
			
		||||
#define vnode_hash(vnode, type)                    vtype_hash(vnode_peek(vnode, type), type)
 | 
			
		||||
#define vnode_compare(s0, t0, s1, t1)              vtype_compare(vnode_peek(s0, t0), t0, vnode_peek(s1, t1), t1)
 | 
			
		||||
#define vnode_compare_eq(s0, s1, t)                vtype_compare_eq(vnode_peek(s0, t), vnode_peek(s1, t), t)
 | 
			
		||||
#define vnode_duplicate(vnode, type)               libcdsb_vnode_create(vnode_peek(vnode, type), type)
 | 
			
		||||
#define vnode_tduplicate(target_type, vnode, type) libcdsb_vnode_create_target(target_type, vnode_peek(vnode, type), type)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,17 +4,20 @@
 | 
			
		||||
#include "include.h"
 | 
			
		||||
#include "../__internal/assert.h"
 | 
			
		||||
 | 
			
		||||
size_t array_size (const arr_t* x) {
 | 
			
		||||
    return x->size;
 | 
			
		||||
}
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
size_t array_nmemb(const arr_t* x) {
 | 
			
		||||
    return x->size*vtype_size(x->type);
 | 
			
		||||
}
 | 
			
		||||
hash_t array_hash(const arr_t* s) {
 | 
			
		||||
    hash_t hash = 0;
 | 
			
		||||
 | 
			
		||||
void* array_at(const arr_t* x, ssize_t i) {
 | 
			
		||||
    if (i < 0 && (i += x->size) < 0) i = 0;
 | 
			
		||||
    return x->mem + i*vtype_size(x->type);
 | 
			
		||||
    if (s->size > 0)
 | 
			
		||||
        hash = vtype_hash(s->mem, s->type);
 | 
			
		||||
 | 
			
		||||
    if (s->size > 1)
 | 
			
		||||
        hash += vtype_hash(array_internal_at(s, s->size - 1), s->type);
 | 
			
		||||
 | 
			
		||||
    hash ^= s->size;
 | 
			
		||||
 | 
			
		||||
    return hash + VTYPE_ARRAY;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void array_init(arr_t* x, vtype t) {
 | 
			
		||||
@ -52,6 +55,23 @@ void array_free(arr_t* x) {
 | 
			
		||||
    memset(x, 0, sizeof(*x));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
size_t array_size (const arr_t* x) {
 | 
			
		||||
    return x->size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
size_t array_nmemb(const arr_t* x) {
 | 
			
		||||
    return x->size*vtype_size(x->type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* array_at(const arr_t* x, ssize_t i) {
 | 
			
		||||
    if (i < 0 && (i += x->size) < 0) i = 0;
 | 
			
		||||
    return x->mem + i*vtype_size(x->type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
int array_compare(const arr_t* s0, const arr_t* s1) {
 | 
			
		||||
 | 
			
		||||
    void  *e;
 | 
			
		||||
 | 
			
		||||
@ -4,12 +4,13 @@
 | 
			
		||||
#include "include.h"
 | 
			
		||||
 | 
			
		||||
int libcdsb_array_find_pointer(arr_t* x, const   void* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x, &v, vtypeof(&v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_string (arr_t* x, const   char* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x, &v, vtypeof(&v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_array  (arr_t* x, const  str_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_list   (arr_t* x, const  arr_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_map    (arr_t* x, const list_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_vset   (arr_t* x, const  map_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_cstring(arr_t* x, const  set_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_cstring(arr_t* x, const   char* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x, &v, vtypeof(&v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_string (arr_t* x, const  str_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_array  (arr_t* x, const  arr_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_list   (arr_t* x, const list_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_map    (arr_t* x, const  map_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_vset   (arr_t* x, const  set_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_dict   (arr_t* x, const dict_t* v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_boolean(arr_t* x,          bool v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x, &v, vtypeof(&v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_int8   (arr_t* x,          s8_t v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x, &v, vtypeof(&v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_array_find_int16  (arr_t* x,         s16_t v, void* _, array_access_callback cb, bool r, bool cut) { return libcdsb_array_find(x, &v, vtypeof(&v), _, cb, r, cut); }
 | 
			
		||||
@ -30,6 +31,7 @@ size_t libcdsb_array_count_array  (const arr_t* x, const  arr_t* v) { return lib
 | 
			
		||||
size_t libcdsb_array_count_list   (const arr_t* x, const list_t* v) { return libcdsb_array_count(x,  v, vtypeof( v)); }
 | 
			
		||||
size_t libcdsb_array_count_map    (const arr_t* x, const  map_t* v) { return libcdsb_array_count(x,  v, vtypeof( v)); }
 | 
			
		||||
size_t libcdsb_array_count_vset   (const arr_t* x, const  set_t* v) { return libcdsb_array_count(x,  v, vtypeof( v)); }
 | 
			
		||||
size_t libcdsb_array_count_dict   (const arr_t* x, const dict_t* v) { return libcdsb_array_count(x,  v, vtypeof( v)); }
 | 
			
		||||
size_t libcdsb_array_count_boolean(const arr_t* x,          bool v) { return libcdsb_array_count(x, &v, vtypeof(&v)); }
 | 
			
		||||
size_t libcdsb_array_count_int8   (const arr_t* x,          s8_t v) { return libcdsb_array_count(x, &v, vtypeof(&v)); }
 | 
			
		||||
size_t libcdsb_array_count_int16  (const arr_t* x,         s16_t v) { return libcdsb_array_count(x, &v, vtypeof(&v)); }
 | 
			
		||||
@ -50,6 +52,7 @@ void libcdsb_array_push_array  (arr_t* x, const  arr_t* v) { libcdsb_array_push(
 | 
			
		||||
void libcdsb_array_push_list   (arr_t* x, const list_t* v) { libcdsb_array_push(x,  v, vtypeof( v)); }
 | 
			
		||||
void libcdsb_array_push_map    (arr_t* x, const  map_t* v) { libcdsb_array_push(x,  v, vtypeof( v)); }
 | 
			
		||||
void libcdsb_array_push_vset   (arr_t* x, const  set_t* v) { libcdsb_array_push(x,  v, vtypeof( v)); }
 | 
			
		||||
void libcdsb_array_push_dict   (arr_t* x, const dict_t* v) { libcdsb_array_push(x,  v, vtypeof( v)); }
 | 
			
		||||
void libcdsb_array_push_boolean(arr_t* x,          bool v) { libcdsb_array_push(x, &v, vtypeof(&v)); }
 | 
			
		||||
void libcdsb_array_push_int8   (arr_t* x,          s8_t v) { libcdsb_array_push(x, &v, vtypeof(&v)); }
 | 
			
		||||
void libcdsb_array_push_int16  (arr_t* x,         s16_t v) { libcdsb_array_push(x, &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										210
									
								
								src/dict/base.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										210
									
								
								src/dict/base.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,210 @@
 | 
			
		||||
/* This software is licensed by the MIT License, see LICENSE file */
 | 
			
		||||
/*                                Copyright © 2022 Gregory Lirent */
 | 
			
		||||
 | 
			
		||||
#include "include.h"
 | 
			
		||||
 | 
			
		||||
#define dtree_duplicate(s)    rbtree_duplicate((rbnode_t*)s, (void*)dnode_duplicate, nullptr)
 | 
			
		||||
#define dtree_compare(s0, s1) rbtree_compare((void*)s0, (void*)s1, (void*)dnode_compare, nullptr)
 | 
			
		||||
 | 
			
		||||
static dnode_t* dnode_duplicate(const dnode_t* s, dnode_t* p, void* not_used) {
 | 
			
		||||
    dnode_t* x;
 | 
			
		||||
 | 
			
		||||
    x           = dnode_create(vnode_duplicate(&s->key, s->key_type), p, s->colored);
 | 
			
		||||
    x->key_type = s->key_type;
 | 
			
		||||
    x->val_type = s->val_type;
 | 
			
		||||
    x->value    = vnode_duplicate(&s->value, s->val_type);
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int dnode_compare(const dnode_t *s0, const dnode_t *s1, void* not_used) {
 | 
			
		||||
    int c = vnode_compare(&s0->key, s1->key_type, &s1->key, s1->key_type);
 | 
			
		||||
 | 
			
		||||
    return (!c) ? vnode_compare(&s0->value, s1->val_type, &s1->value, s1->val_type) : c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static hash_t dnode_hash(const dnode_t* s, void* not_used) {
 | 
			
		||||
    return vnode_hash(s->key, s->key_type) + vnode_hash(s->value, s->val_type) + s->key_type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
static int dict_compare_equal_capacity(const dict_t* s0, const dict_t* s1) {
 | 
			
		||||
    int c;
 | 
			
		||||
 | 
			
		||||
    for (size_t i = 0; i < s0->capacity; ++i) {
 | 
			
		||||
        if ((c = dtree_compare(s0->nodes[i], s1->nodes[i]))) {
 | 
			
		||||
            return c;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int dict_compare_unequal_capacity(const dict_t* s0, const dict_t* s1) {
 | 
			
		||||
    const dict_t *x, *y;
 | 
			
		||||
    dnode_t *c0, *c1;
 | 
			
		||||
    int cmp;
 | 
			
		||||
 | 
			
		||||
    stack_t z;
 | 
			
		||||
 | 
			
		||||
    if (s0->capacity <= s1->capacity) {
 | 
			
		||||
        x = s0;
 | 
			
		||||
        y = s1;
 | 
			
		||||
    } else {
 | 
			
		||||
        x = s1;
 | 
			
		||||
        y = s0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    z.prev  = 0;
 | 
			
		||||
    z.value = 0;
 | 
			
		||||
 | 
			
		||||
    for (size_t i = 0; i < x->capacity; ++i) {
 | 
			
		||||
        if (!dnode_is_empty(x->nodes[i]))
 | 
			
		||||
            stack_push(&z, x->nodes[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    while ((c0 = stack_pop(&z))) {
 | 
			
		||||
 | 
			
		||||
        c1  = y->nodes[vnode_hash(c0->key, c0->key_type) / y->capacity];
 | 
			
		||||
        cmp = 1;
 | 
			
		||||
 | 
			
		||||
        while (!dnode_is_empty(c1)) {
 | 
			
		||||
 | 
			
		||||
            cmp = vnode_compare(c0->key, c0->key_type, c1->key, c1->key_type);
 | 
			
		||||
 | 
			
		||||
            if (cmp == 0) break;
 | 
			
		||||
 | 
			
		||||
            c1 = (cmp < 0) ? c1->left : c1->right;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (cmp) return x == s0 ? cmp : ~cmp + 1;
 | 
			
		||||
 | 
			
		||||
        if (!dnode_is_empty(c0->right)) stack_push(&z, c0->right);
 | 
			
		||||
        if (!dnode_is_empty(c0->left))  stack_push(&z, c0->left);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
hash_t dict_hash(const dict_t* s) {
 | 
			
		||||
    dnode_t *l, *r;
 | 
			
		||||
    hash_t hash;
 | 
			
		||||
 | 
			
		||||
    if (!s->size) return 0;
 | 
			
		||||
 | 
			
		||||
    l = dnode_empty;
 | 
			
		||||
    r = dnode_empty;
 | 
			
		||||
 | 
			
		||||
    for (size_t i = 0; i < s->capacity; ++i) {
 | 
			
		||||
        if (!dnode_is_empty(s->nodes[i])) {
 | 
			
		||||
            if (dnode_is_empty(l) || vnode_compare(s->nodes[i]->key, s->nodes[i]->key_type, l->key, l->key_type) < 0) {
 | 
			
		||||
                l = s->nodes[i];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (dnode_is_empty(r) || vnode_compare(s->nodes[i]->key, s->nodes[i]->key_type, r->key, r->key_type) > 0) {
 | 
			
		||||
                r = s->nodes[i];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    while (!dnode_is_empty(l->left))
 | 
			
		||||
        l = l->left;
 | 
			
		||||
 | 
			
		||||
    while (!dnode_is_empty(r->right))
 | 
			
		||||
        r = r->right;
 | 
			
		||||
 | 
			
		||||
    hash = vnode_hash(l->key, l->key_type) + vnode_hash(l->value, l->val_type);
 | 
			
		||||
 | 
			
		||||
    if (l != r) hash += vnode_hash(r->key, r->key_type) + vnode_hash(r->value, r->val_type);
 | 
			
		||||
 | 
			
		||||
    return (hash ^ s->size) + VTYPE_DICT;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void dict_init(dict_t* x) {
 | 
			
		||||
    memset(x, 0, sizeof(*x));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void dict_free(dict_t* x) {
 | 
			
		||||
    for (size_t i = 0; i < x->capacity; ++i)
 | 
			
		||||
        rbtree_free(x->nodes[i], (void*)dnode_free, nullptr);
 | 
			
		||||
 | 
			
		||||
    free(x->nodes);
 | 
			
		||||
    memset(x, 0, sizeof(*x));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void libcdcb_dnode_free(dnode_t* x, void* not_used) {
 | 
			
		||||
    vnode_free(&x->key, x->key_type);
 | 
			
		||||
    vnode_free(&x->value, x->val_type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
size_t dict_size(const dict_t* x) {
 | 
			
		||||
    return x->size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
size_t dict_capacity(const dict_t* x) {
 | 
			
		||||
    return x->capacity;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
int dict_compare(const dict_t* s0, const dict_t* s1) {
 | 
			
		||||
 | 
			
		||||
    if (s0 == s1)
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
    if (s0->size != s1->size)
 | 
			
		||||
        return s0->size < s1->size ? -1 : 1;
 | 
			
		||||
 | 
			
		||||
    if (s0->capacity == s1->capacity)
 | 
			
		||||
        return dict_compare_equal_capacity(s0, s1);
 | 
			
		||||
 | 
			
		||||
    return dict_compare_unequal_capacity(s0, s1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
dict_t dict_copy(const dict_t* s) {
 | 
			
		||||
    dict_t x;
 | 
			
		||||
 | 
			
		||||
    x.capacity = s->capacity;
 | 
			
		||||
    x.size     = s->size;
 | 
			
		||||
    x.nodes    = malloc(x.size * sizeof(*x.nodes));
 | 
			
		||||
 | 
			
		||||
    for (size_t i = 0; i < x.capacity; ++i) {
 | 
			
		||||
        x.nodes[i] = dtree_duplicate(s->nodes[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dict_t* dict_duplicate(const dict_t* s) {
 | 
			
		||||
    dict_t *x = malloc(sizeof(*x));
 | 
			
		||||
 | 
			
		||||
    x->capacity = s->capacity;
 | 
			
		||||
    x->size     = s->size;
 | 
			
		||||
    x->nodes    = malloc(x->size * sizeof(*x->nodes));
 | 
			
		||||
 | 
			
		||||
    for (size_t i = 0; i < x->capacity; ++i) {
 | 
			
		||||
        x->nodes[i] = dtree_duplicate(s->nodes[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void dict_copy_init(dict_t* x, const dict_t* s) {
 | 
			
		||||
    x->capacity = s->capacity;
 | 
			
		||||
    x->size     = s->size;
 | 
			
		||||
    x->nodes    = malloc(x->size * sizeof(*x->nodes));
 | 
			
		||||
 | 
			
		||||
    for (size_t i = 0; i < x->capacity; ++i) {
 | 
			
		||||
        x->nodes[i] = dtree_duplicate(s->nodes[i]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										209
									
								
								src/dict/extra.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								src/dict/extra.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,209 @@
 | 
			
		||||
/* This software is licensed by the MIT License, see LICENSE file */
 | 
			
		||||
/*                                Copyright © 2022 Gregory Lirent */
 | 
			
		||||
 | 
			
		||||
#include "include.h"
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
static void dict_rehash(dict_t* s, size_t capacity) {
 | 
			
		||||
    stack_t z;
 | 
			
		||||
    int cmp;
 | 
			
		||||
    dnode_t *c, *p, *n, **r;
 | 
			
		||||
 | 
			
		||||
    dnode_t **nodes = malloc(capacity * sizeof(*nodes));
 | 
			
		||||
 | 
			
		||||
    while (s->capacity--) {
 | 
			
		||||
        if (!dnode_is_empty(s->nodes[s->capacity]))
 | 
			
		||||
            stack_push(&z, s->nodes[s->capacity]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    while ((c = stack_pop(&z))) {
 | 
			
		||||
 | 
			
		||||
        if (!dnode_is_empty(c->right)) {
 | 
			
		||||
            stack_push(&z, c->right);
 | 
			
		||||
            c->right = dnode_empty;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!dnode_is_empty(c->left)) {
 | 
			
		||||
            stack_push(&z, c->left);
 | 
			
		||||
            c->left = dnode_empty;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        n = *(r = &nodes[vnode_hash(c->key, c->key_type) / capacity]);
 | 
			
		||||
 | 
			
		||||
        if (!dnode_is_empty(*r)) {
 | 
			
		||||
            do {
 | 
			
		||||
                p   = n;
 | 
			
		||||
                cmp = vnode_compare(&c->key, c->key_type, &n->key, n->key_type);
 | 
			
		||||
                n   = (cmp <= 0) ? n->left : n->right;
 | 
			
		||||
            } while (!dnode_is_empty(n));
 | 
			
		||||
 | 
			
		||||
            if (cmp < 0) p->left  = c;
 | 
			
		||||
            else         p->right = c;
 | 
			
		||||
 | 
			
		||||
            c->parent  = p;
 | 
			
		||||
            c->colored = 1;
 | 
			
		||||
 | 
			
		||||
            if (!dnode_is_root(p))
 | 
			
		||||
                dnode_fixup(r, n);
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
            *r         = c;
 | 
			
		||||
            c->colored = 0;
 | 
			
		||||
            c->parent  = dnode_empty;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    free(s->nodes);
 | 
			
		||||
 | 
			
		||||
    s->capacity = capacity;
 | 
			
		||||
    s->nodes    = nodes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_shrink_to_fit(dict_t* s) {
 | 
			
		||||
 | 
			
		||||
    size_t capacity;
 | 
			
		||||
 | 
			
		||||
    capacity  = (s->size / CAPACITY_BLOCK) + 1;
 | 
			
		||||
    capacity *= CAPACITY_BLOCK;
 | 
			
		||||
 | 
			
		||||
    while (((double)s->size / capacity) > 0.65)
 | 
			
		||||
        capacity += CAPACITY_BLOCK;
 | 
			
		||||
 | 
			
		||||
    if (capacity >= s->capacity)
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    dict_rehash(s, capacity);
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update(dict_t* x, const void* k, vtype kt, const void* v, vtype vt) {
 | 
			
		||||
 | 
			
		||||
    dnode_t **r, *n, *p;
 | 
			
		||||
    vnode_t kn, vn;
 | 
			
		||||
    int cmp;
 | 
			
		||||
 | 
			
		||||
    if (!x->capacity || (double)x->size / x->capacity > REBUILD_POINT_MAX) {
 | 
			
		||||
        dict_rehash(x, x->capacity + CAPACITY_BLOCK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    n  = *(r = &x->nodes[vnode_hash(k, kt) / x->capacity]);
 | 
			
		||||
    kn = vnode_create(k, kt);
 | 
			
		||||
    vn = vnode_create(v, vt);
 | 
			
		||||
 | 
			
		||||
    if (!dnode_is_empty(n)) {
 | 
			
		||||
        do {
 | 
			
		||||
            p   = n;
 | 
			
		||||
            cmp = vtype_compare(k, kt, vnode_peek(&n->key, n->key_type), n->key_type);
 | 
			
		||||
 | 
			
		||||
            if (cmp == 0) {
 | 
			
		||||
                dnode_free(n, nullptr);
 | 
			
		||||
 | 
			
		||||
                n->key      = kn;
 | 
			
		||||
                n->value    = vn;
 | 
			
		||||
                n->key_type = kt;
 | 
			
		||||
                n->val_type = vt;
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            n = (cmp < 0) ? n->left : n->right;
 | 
			
		||||
        } while (!dnode_is_empty(n));
 | 
			
		||||
 | 
			
		||||
        n = dnode_create(kn, p, 1);
 | 
			
		||||
 | 
			
		||||
        if (cmp < 0) p->left  = n;
 | 
			
		||||
        else         p->right = n;
 | 
			
		||||
 | 
			
		||||
        if (!dnode_is_root(p))
 | 
			
		||||
            dnode_fixup(r, n);
 | 
			
		||||
 | 
			
		||||
    } else n = *r = dnode_create(kn, dnode_empty, 0);
 | 
			
		||||
 | 
			
		||||
    n->value    = vn;
 | 
			
		||||
    n->key_type = kt;
 | 
			
		||||
    n->val_type = vt;
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int libcdsb_dict_get(dict_t* x, const void* k, vtype t, void* _, dict_access_callback callback, bool cut) {
 | 
			
		||||
 | 
			
		||||
    dnode_t *c, **r;
 | 
			
		||||
    void* key;
 | 
			
		||||
    int cmp;
 | 
			
		||||
 | 
			
		||||
    if (x->capacity) {
 | 
			
		||||
        c = *(r = &x->nodes[vnode_hash(k, t) / x->capacity]);
 | 
			
		||||
 | 
			
		||||
        while (!dnode_is_empty(c)) {
 | 
			
		||||
            key = vnode_peek(&c->key, c->key_type);
 | 
			
		||||
            cmp = vtype_compare(k, t, key, c->key_type);
 | 
			
		||||
 | 
			
		||||
            if (cmp == 0) {
 | 
			
		||||
                cmp = (callback) ? callback(key, t, vnode_peek(&c->value, c->val_type), c->val_type, _) : 0;
 | 
			
		||||
 | 
			
		||||
                if (cut) {
 | 
			
		||||
                    c = dnode_delete(r, c);
 | 
			
		||||
                    dnode_free(c, nullptr);
 | 
			
		||||
                    free(c);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return cmp;
 | 
			
		||||
            } else c = (cmp < 0) ? c->left : c->right;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int libcdsb_dict_foreach(dict_t* x, void* dt, dict_access_callback callback, bool flush) {
 | 
			
		||||
    stack_t z;
 | 
			
		||||
    int r;
 | 
			
		||||
    dnode_t* c;
 | 
			
		||||
 | 
			
		||||
    r       = 0;
 | 
			
		||||
    z.prev  = 0;
 | 
			
		||||
    z.value = 0;
 | 
			
		||||
 | 
			
		||||
    for (size_t i = 0; i < x->capacity; ++i) {
 | 
			
		||||
        if (!dnode_is_empty(x->nodes[i]))
 | 
			
		||||
            stack_push(&z, x->nodes[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    while ((c = stack_pop(&z))) {
 | 
			
		||||
        if ((r = callback(vnode_peek(&c->key, c->key_type), c->key_type, vnode_peek(&c->value, c->val_type), c->val_type, dt)))
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        if (!dnode_is_empty(c->right)) stack_push(&z, c->right);
 | 
			
		||||
        if (!dnode_is_empty(c->left))  stack_push(&z, c->left);
 | 
			
		||||
 | 
			
		||||
        if (flush) {
 | 
			
		||||
            dnode_free(c, nullptr);
 | 
			
		||||
            free(c);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (flush) {
 | 
			
		||||
        while (c) {
 | 
			
		||||
            if (!dnode_is_empty(c->right)) stack_push(&z, c->right);
 | 
			
		||||
            if (!dnode_is_empty(c->left))  stack_push(&z, c->left);
 | 
			
		||||
 | 
			
		||||
            dnode_free(c, nullptr);
 | 
			
		||||
            free(c);
 | 
			
		||||
 | 
			
		||||
            c = stack_pop(&z);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        free(x->nodes);
 | 
			
		||||
        memset(x, 0, sizeof(*x));
 | 
			
		||||
    } else stack_flush(&z);
 | 
			
		||||
 | 
			
		||||
    return r;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										445
									
								
								src/dict/generics.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										445
									
								
								src/dict/generics.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,445 @@
 | 
			
		||||
/* This software is licensed by the MIT License, see LICENSE file */
 | 
			
		||||
/*                                Copyright © 2022 Gregory Lirent */
 | 
			
		||||
 | 
			
		||||
#include "include.h"
 | 
			
		||||
 | 
			
		||||
int libcdsb_dict_get_by_pointer(dict_t* x, const   void* k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_cstring(dict_t* x, const   char* k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_string (dict_t* x, const  str_t* k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x,  k, vtypeof( k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_array  (dict_t* x, const  arr_t* k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x,  k, vtypeof( k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_list   (dict_t* x, const list_t* k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x,  k, vtypeof( k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_map    (dict_t* x, const  map_t* k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x,  k, vtypeof( k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_vset   (dict_t* x, const  set_t* k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x,  k, vtypeof( k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_dict   (dict_t* x, const dict_t* k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x,  k, vtypeof( k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_boolean(dict_t* x,          bool k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_int8   (dict_t* x,          s8_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_int16  (dict_t* x,         s16_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_int32  (dict_t* x,         s32_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_int64  (dict_t* x,         s64_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_uint8  (dict_t* x,          u8_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_uint16 (dict_t* x,         u16_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_uint32 (dict_t* x,         u32_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_uint64 (dict_t* x,         u64_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_float  (dict_t* x,          fl_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_double (dict_t* x,         dbl_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_dict_get_by_ldouble(dict_t* x,        ldbl_t k, void* _, dict_access_callback cb, bool cut) { return libcdsb_dict_get(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_pointer_pointer(dict_t* x, const void* k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_cstring(dict_t* x, const void* k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_string (dict_t* x, const void* k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_array  (dict_t* x, const void* k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_list   (dict_t* x, const void* k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_map    (dict_t* x, const void* k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_vset   (dict_t* x, const void* k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_dict   (dict_t* x, const void* k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_boolean(dict_t* x, const void* k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_int8   (dict_t* x, const void* k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_int16  (dict_t* x, const void* k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_int32  (dict_t* x, const void* k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_int64  (dict_t* x, const void* k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_uint8  (dict_t* x, const void* k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_uint16 (dict_t* x, const void* k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_uint32 (dict_t* x, const void* k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_uint64 (dict_t* x, const void* k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_float  (dict_t* x, const void* k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_double (dict_t* x, const void* k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_pointer_ldouble(dict_t* x, const void* k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_cstring_pointer(dict_t* x, const char* k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_cstring(dict_t* x, const char* k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_string (dict_t* x, const char* k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_array  (dict_t* x, const char* k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_list   (dict_t* x, const char* k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_map    (dict_t* x, const char* k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_vset   (dict_t* x, const char* k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_dict   (dict_t* x, const char* k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_boolean(dict_t* x, const char* k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_int8   (dict_t* x, const char* k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_int16  (dict_t* x, const char* k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_int32  (dict_t* x, const char* k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_int64  (dict_t* x, const char* k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_uint8  (dict_t* x, const char* k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_uint16 (dict_t* x, const char* k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_uint32 (dict_t* x, const char* k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_uint64 (dict_t* x, const char* k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_float  (dict_t* x, const char* k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_double (dict_t* x, const char* k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_cstring_ldouble(dict_t* x, const char* k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_string_pointer(dict_t* x, const str_t* k, const   void* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_cstring(dict_t* x, const str_t* k, const   char* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_string (dict_t* x, const str_t* k, const  str_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_array  (dict_t* x, const str_t* k, const  arr_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_list   (dict_t* x, const str_t* k, const list_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_map    (dict_t* x, const str_t* k, const  map_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_vset   (dict_t* x, const str_t* k, const  set_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_dict   (dict_t* x, const str_t* k, const dict_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_boolean(dict_t* x, const str_t* k,          bool v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_int8   (dict_t* x, const str_t* k,          s8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_int16  (dict_t* x, const str_t* k,         s16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_int32  (dict_t* x, const str_t* k,         s32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_int64  (dict_t* x, const str_t* k,         s64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_uint8  (dict_t* x, const str_t* k,          u8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_uint16 (dict_t* x, const str_t* k,         u16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_uint32 (dict_t* x, const str_t* k,         u32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_uint64 (dict_t* x, const str_t* k,         u64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_float  (dict_t* x, const str_t* k,          fl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_double (dict_t* x, const str_t* k,         dbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_string_ldouble(dict_t* x, const str_t* k,        ldbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_array_pointer(dict_t* x, const arr_t* k, const   void* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_cstring(dict_t* x, const arr_t* k, const   char* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_string (dict_t* x, const arr_t* k, const  str_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_array  (dict_t* x, const arr_t* k, const  arr_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_list   (dict_t* x, const arr_t* k, const list_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_map    (dict_t* x, const arr_t* k, const  map_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_vset   (dict_t* x, const arr_t* k, const  set_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_dict   (dict_t* x, const arr_t* k, const dict_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_boolean(dict_t* x, const arr_t* k,          bool v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_int8   (dict_t* x, const arr_t* k,          s8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_int16  (dict_t* x, const arr_t* k,         s16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_int32  (dict_t* x, const arr_t* k,         s32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_int64  (dict_t* x, const arr_t* k,         s64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_uint8  (dict_t* x, const arr_t* k,          u8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_uint16 (dict_t* x, const arr_t* k,         u16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_uint32 (dict_t* x, const arr_t* k,         u32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_uint64 (dict_t* x, const arr_t* k,         u64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_float  (dict_t* x, const arr_t* k,          fl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_double (dict_t* x, const arr_t* k,         dbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_array_ldouble(dict_t* x, const arr_t* k,        ldbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_list_pointer(dict_t* x, const list_t* k, const   void* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_cstring(dict_t* x, const list_t* k, const   char* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_string (dict_t* x, const list_t* k, const  str_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_array  (dict_t* x, const list_t* k, const  arr_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_list   (dict_t* x, const list_t* k, const list_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_map    (dict_t* x, const list_t* k, const  map_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_vset   (dict_t* x, const list_t* k, const  set_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_dict   (dict_t* x, const list_t* k, const dict_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_boolean(dict_t* x, const list_t* k,          bool v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_int8   (dict_t* x, const list_t* k,          s8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_int16  (dict_t* x, const list_t* k,         s16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_int32  (dict_t* x, const list_t* k,         s32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_int64  (dict_t* x, const list_t* k,         s64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_uint8  (dict_t* x, const list_t* k,          u8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_uint16 (dict_t* x, const list_t* k,         u16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_uint32 (dict_t* x, const list_t* k,         u32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_uint64 (dict_t* x, const list_t* k,         u64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_float  (dict_t* x, const list_t* k,          fl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_double (dict_t* x, const list_t* k,         dbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_list_ldouble(dict_t* x, const list_t* k,        ldbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_map_pointer(dict_t* x, const map_t* k, const   void* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_cstring(dict_t* x, const map_t* k, const   char* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_string (dict_t* x, const map_t* k, const  str_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_array  (dict_t* x, const map_t* k, const  arr_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_list   (dict_t* x, const map_t* k, const list_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_map    (dict_t* x, const map_t* k, const  map_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_vset   (dict_t* x, const map_t* k, const  set_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_dict   (dict_t* x, const map_t* k, const dict_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_boolean(dict_t* x, const map_t* k,          bool v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_int8   (dict_t* x, const map_t* k,          s8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_int16  (dict_t* x, const map_t* k,         s16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_int32  (dict_t* x, const map_t* k,         s32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_int64  (dict_t* x, const map_t* k,         s64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_uint8  (dict_t* x, const map_t* k,          u8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_uint16 (dict_t* x, const map_t* k,         u16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_uint32 (dict_t* x, const map_t* k,         u32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_uint64 (dict_t* x, const map_t* k,         u64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_float  (dict_t* x, const map_t* k,          fl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_double (dict_t* x, const map_t* k,         dbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_map_ldouble(dict_t* x, const map_t* k,        ldbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_vset_pointer(dict_t* x, const set_t* k, const   void* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_cstring(dict_t* x, const set_t* k, const   char* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_string (dict_t* x, const set_t* k, const  str_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_array  (dict_t* x, const set_t* k, const  arr_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_list   (dict_t* x, const set_t* k, const list_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_map    (dict_t* x, const set_t* k, const  map_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_vset   (dict_t* x, const set_t* k, const  set_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_dict   (dict_t* x, const set_t* k, const dict_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_boolean(dict_t* x, const set_t* k,          bool v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_int8   (dict_t* x, const set_t* k,          s8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_int16  (dict_t* x, const set_t* k,         s16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_int32  (dict_t* x, const set_t* k,         s32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_int64  (dict_t* x, const set_t* k,         s64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_uint8  (dict_t* x, const set_t* k,          u8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_uint16 (dict_t* x, const set_t* k,         u16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_uint32 (dict_t* x, const set_t* k,         u32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_uint64 (dict_t* x, const set_t* k,         u64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_float  (dict_t* x, const set_t* k,          fl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_double (dict_t* x, const set_t* k,         dbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_vset_ldouble(dict_t* x, const set_t* k,        ldbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_dict_pointer(dict_t* x, const dict_t* k, const   void* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_cstring(dict_t* x, const dict_t* k, const   char* v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_string (dict_t* x, const dict_t* k, const  str_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_array  (dict_t* x, const dict_t* k, const  arr_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_list   (dict_t* x, const dict_t* k, const list_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_map    (dict_t* x, const dict_t* k, const  map_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_vset   (dict_t* x, const dict_t* k, const  set_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_dict   (dict_t* x, const dict_t* k, const dict_t* v) { return libcdsb_dict_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_boolean(dict_t* x, const dict_t* k,          bool v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_int8   (dict_t* x, const dict_t* k,          s8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_int16  (dict_t* x, const dict_t* k,         s16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_int32  (dict_t* x, const dict_t* k,         s32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_int64  (dict_t* x, const dict_t* k,         s64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_uint8  (dict_t* x, const dict_t* k,          u8_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_uint16 (dict_t* x, const dict_t* k,         u16_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_uint32 (dict_t* x, const dict_t* k,         u32_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_uint64 (dict_t* x, const dict_t* k,         u64_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_float  (dict_t* x, const dict_t* k,          fl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_double (dict_t* x, const dict_t* k,         dbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_dict_ldouble(dict_t* x, const dict_t* k,        ldbl_t v) { return libcdsb_dict_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_boolean_pointer(dict_t* x, bool k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_cstring(dict_t* x, bool k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_string (dict_t* x, bool k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_array  (dict_t* x, bool k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_list   (dict_t* x, bool k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_map    (dict_t* x, bool k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_vset   (dict_t* x, bool k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_dict   (dict_t* x, bool k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_boolean(dict_t* x, bool k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_int8   (dict_t* x, bool k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_int16  (dict_t* x, bool k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_int32  (dict_t* x, bool k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_int64  (dict_t* x, bool k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_uint8  (dict_t* x, bool k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_uint16 (dict_t* x, bool k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_uint32 (dict_t* x, bool k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_uint64 (dict_t* x, bool k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_float  (dict_t* x, bool k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_double (dict_t* x, bool k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_boolean_ldouble(dict_t* x, bool k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_uint8_pointer(dict_t* x, u8_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_cstring(dict_t* x, u8_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_string (dict_t* x, u8_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_array  (dict_t* x, u8_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_list   (dict_t* x, u8_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_map    (dict_t* x, u8_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_vset   (dict_t* x, u8_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_dict   (dict_t* x, u8_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_boolean(dict_t* x, u8_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_int8   (dict_t* x, u8_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_int16  (dict_t* x, u8_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_int32  (dict_t* x, u8_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_int64  (dict_t* x, u8_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_uint8  (dict_t* x, u8_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_uint16 (dict_t* x, u8_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_uint32 (dict_t* x, u8_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_uint64 (dict_t* x, u8_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_float  (dict_t* x, u8_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_double (dict_t* x, u8_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint8_ldouble(dict_t* x, u8_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_uint16_pointer(dict_t* x, u16_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_cstring(dict_t* x, u16_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_string (dict_t* x, u16_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_array  (dict_t* x, u16_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_list   (dict_t* x, u16_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_map    (dict_t* x, u16_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_vset   (dict_t* x, u16_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_dict   (dict_t* x, u16_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_boolean(dict_t* x, u16_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_int8   (dict_t* x, u16_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_int16  (dict_t* x, u16_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_int32  (dict_t* x, u16_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_int64  (dict_t* x, u16_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_uint8  (dict_t* x, u16_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_uint16 (dict_t* x, u16_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_uint32 (dict_t* x, u16_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_uint64 (dict_t* x, u16_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_float  (dict_t* x, u16_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_double (dict_t* x, u16_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint16_ldouble(dict_t* x, u16_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_uint32_pointer(dict_t* x, u32_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_cstring(dict_t* x, u32_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_string (dict_t* x, u32_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_array  (dict_t* x, u32_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_list   (dict_t* x, u32_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_map    (dict_t* x, u32_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_vset   (dict_t* x, u32_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_dict   (dict_t* x, u32_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_boolean(dict_t* x, u32_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_int8   (dict_t* x, u32_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_int16  (dict_t* x, u32_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_int32  (dict_t* x, u32_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_int64  (dict_t* x, u32_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_uint8  (dict_t* x, u32_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_uint16 (dict_t* x, u32_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_uint32 (dict_t* x, u32_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_uint64 (dict_t* x, u32_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_float  (dict_t* x, u32_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_double (dict_t* x, u32_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint32_ldouble(dict_t* x, u32_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_uint64_pointer(dict_t* x, u64_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_cstring(dict_t* x, u64_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_string (dict_t* x, u64_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_array  (dict_t* x, u64_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_list   (dict_t* x, u64_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_map    (dict_t* x, u64_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_vset   (dict_t* x, u64_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_dict   (dict_t* x, u64_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_boolean(dict_t* x, u64_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_int8   (dict_t* x, u64_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_int16  (dict_t* x, u64_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_int32  (dict_t* x, u64_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_int64  (dict_t* x, u64_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_uint8  (dict_t* x, u64_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_uint16 (dict_t* x, u64_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_uint32 (dict_t* x, u64_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_uint64 (dict_t* x, u64_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_float  (dict_t* x, u64_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_double (dict_t* x, u64_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_uint64_ldouble(dict_t* x, u64_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_int8_pointer(dict_t* x, s8_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_cstring(dict_t* x, s8_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_string (dict_t* x, s8_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_array  (dict_t* x, s8_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_list   (dict_t* x, s8_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_map    (dict_t* x, s8_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_vset   (dict_t* x, s8_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_dict   (dict_t* x, s8_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_boolean(dict_t* x, s8_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_int8   (dict_t* x, s8_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_int16  (dict_t* x, s8_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_int32  (dict_t* x, s8_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_int64  (dict_t* x, s8_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_uint8  (dict_t* x, s8_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_uint16 (dict_t* x, s8_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_uint32 (dict_t* x, s8_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_uint64 (dict_t* x, s8_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_float  (dict_t* x, s8_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_double (dict_t* x, s8_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int8_ldouble(dict_t* x, s8_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_int16_pointer(dict_t* x, s16_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_cstring(dict_t* x, s16_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_string (dict_t* x, s16_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_array  (dict_t* x, s16_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_list   (dict_t* x, s16_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_map    (dict_t* x, s16_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_vset   (dict_t* x, s16_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_dict   (dict_t* x, s16_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_boolean(dict_t* x, s16_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_int8   (dict_t* x, s16_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_int16  (dict_t* x, s16_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_int32  (dict_t* x, s16_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_int64  (dict_t* x, s16_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_uint8  (dict_t* x, s16_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_uint16 (dict_t* x, s16_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_uint32 (dict_t* x, s16_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_uint64 (dict_t* x, s16_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_float  (dict_t* x, s16_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_double (dict_t* x, s16_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int16_ldouble(dict_t* x, s16_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_int32_pointer(dict_t* x, s32_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_cstring(dict_t* x, s32_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_string (dict_t* x, s32_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_array  (dict_t* x, s32_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_list   (dict_t* x, s32_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_map    (dict_t* x, s32_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_vset   (dict_t* x, s32_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_dict   (dict_t* x, s32_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_boolean(dict_t* x, s32_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_int8   (dict_t* x, s32_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_int16  (dict_t* x, s32_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_int32  (dict_t* x, s32_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_int64  (dict_t* x, s32_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_uint8  (dict_t* x, s32_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_uint16 (dict_t* x, s32_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_uint32 (dict_t* x, s32_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_uint64 (dict_t* x, s32_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_float  (dict_t* x, s32_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_double (dict_t* x, s32_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int32_ldouble(dict_t* x, s32_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_int64_pointer(dict_t* x, s64_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_cstring(dict_t* x, s64_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_string (dict_t* x, s64_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_array  (dict_t* x, s64_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_list   (dict_t* x, s64_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_map    (dict_t* x, s64_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_vset   (dict_t* x, s64_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_dict   (dict_t* x, s64_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_boolean(dict_t* x, s64_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_int8   (dict_t* x, s64_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_int16  (dict_t* x, s64_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_int32  (dict_t* x, s64_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_int64  (dict_t* x, s64_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_uint8  (dict_t* x, s64_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_uint16 (dict_t* x, s64_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_uint32 (dict_t* x, s64_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_uint64 (dict_t* x, s64_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_float  (dict_t* x, s64_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_double (dict_t* x, s64_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_int64_ldouble(dict_t* x, s64_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_float_pointer(dict_t* x, fl_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_cstring(dict_t* x, fl_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_string (dict_t* x, fl_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_array  (dict_t* x, fl_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_list   (dict_t* x, fl_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_map    (dict_t* x, fl_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_vset   (dict_t* x, fl_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_dict   (dict_t* x, fl_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_boolean(dict_t* x, fl_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_int8   (dict_t* x, fl_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_int16  (dict_t* x, fl_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_int32  (dict_t* x, fl_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_int64  (dict_t* x, fl_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_uint8  (dict_t* x, fl_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_uint16 (dict_t* x, fl_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_uint32 (dict_t* x, fl_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_uint64 (dict_t* x, fl_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_float  (dict_t* x, fl_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_double (dict_t* x, fl_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_float_ldouble(dict_t* x, fl_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_double_pointer(dict_t* x, dbl_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_cstring(dict_t* x, dbl_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_string (dict_t* x, dbl_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_array  (dict_t* x, dbl_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_list   (dict_t* x, dbl_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_map    (dict_t* x, dbl_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_vset   (dict_t* x, dbl_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_dict   (dict_t* x, dbl_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_boolean(dict_t* x, dbl_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_int8   (dict_t* x, dbl_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_int16  (dict_t* x, dbl_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_int32  (dict_t* x, dbl_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_int64  (dict_t* x, dbl_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_uint8  (dict_t* x, dbl_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_uint16 (dict_t* x, dbl_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_uint32 (dict_t* x, dbl_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_uint64 (dict_t* x, dbl_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_float  (dict_t* x, dbl_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_double (dict_t* x, dbl_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_double_ldouble(dict_t* x, dbl_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_dict_update_ldouble_pointer(dict_t* x, ldbl_t k, const   void* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_cstring(dict_t* x, ldbl_t k, const   char* v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_string (dict_t* x, ldbl_t k, const  str_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_array  (dict_t* x, ldbl_t k, const  arr_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_list   (dict_t* x, ldbl_t k, const list_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_map    (dict_t* x, ldbl_t k, const  map_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_vset   (dict_t* x, ldbl_t k, const  set_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_dict   (dict_t* x, ldbl_t k, const dict_t* v) { return libcdsb_dict_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_boolean(dict_t* x, ldbl_t k,          bool v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_int8   (dict_t* x, ldbl_t k,          s8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_int16  (dict_t* x, ldbl_t k,         s16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_int32  (dict_t* x, ldbl_t k,         s32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_int64  (dict_t* x, ldbl_t k,         s64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_uint8  (dict_t* x, ldbl_t k,          u8_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_uint16 (dict_t* x, ldbl_t k,         u16_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_uint32 (dict_t* x, ldbl_t k,         u32_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_uint64 (dict_t* x, ldbl_t k,         u64_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_float  (dict_t* x, ldbl_t k,          fl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_double (dict_t* x, ldbl_t k,         dbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_dict_update_ldouble_ldouble(dict_t* x, ldbl_t k,        ldbl_t v) { return libcdsb_dict_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
							
								
								
									
										45
									
								
								src/dict/include.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/dict/include.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,45 @@
 | 
			
		||||
/* This software is licensed by the MIT License, see LICENSE file */
 | 
			
		||||
/*                                Copyright © 2022 Gregory Lirent */
 | 
			
		||||
 | 
			
		||||
#include "../../include/extra/dict.h"
 | 
			
		||||
#include "../__internal/assert.h"
 | 
			
		||||
#include "../__internal/rbtree.h"
 | 
			
		||||
 | 
			
		||||
#ifndef LIBCDSB_SRC_DICT_INCLUDE_H
 | 
			
		||||
#define LIBCDSB_SRC_DICT_INCLUDE_H
 | 
			
		||||
 | 
			
		||||
#define CAPACITY_BLOCK   100
 | 
			
		||||
#define REBUILD_POINT_MAX 0.65
 | 
			
		||||
#define REBUILD_POINT_MIN  1
 | 
			
		||||
 | 
			
		||||
typedef struct libcdsb_dict_node {
 | 
			
		||||
    struct libcdsb_dict_node* left;
 | 
			
		||||
    struct libcdsb_dict_node* right;
 | 
			
		||||
    struct libcdsb_dict_node* parent;
 | 
			
		||||
 | 
			
		||||
    vnode_t key;
 | 
			
		||||
    short   colored;
 | 
			
		||||
    u8_t    key_type;
 | 
			
		||||
    u8_t    val_type;
 | 
			
		||||
    vnode_t value;
 | 
			
		||||
} dnode_t;
 | 
			
		||||
 | 
			
		||||
static_assert(offsetof(struct libcdsb_rbtree_node, left) == offsetof(struct libcdsb_dict_node, left), "Implementation assert");
 | 
			
		||||
static_assert(offsetof(struct libcdsb_rbtree_node, right) == offsetof(struct libcdsb_dict_node, right), "Implementation assert");
 | 
			
		||||
static_assert(offsetof(struct libcdsb_rbtree_node, parent) == offsetof(struct libcdsb_dict_node, parent), "Implementation assert");
 | 
			
		||||
static_assert(offsetof(struct libcdsb_rbtree_node, colored) == offsetof(struct libcdsb_dict_node, colored), "Implementation assert");
 | 
			
		||||
static_assert(offsetof(struct libcdsb_rbtree_node, value) == offsetof(struct libcdsb_dict_node, key), "Implementation assert");
 | 
			
		||||
 | 
			
		||||
#define dnode_empty           ((dnode_t*)LIBCDSB_RBTREE_NODE_EMPTY)
 | 
			
		||||
#define dnode_create(k, p, c) ((dnode_t*)libcdsb_rbtree_node_create(k, (rbnode_t*)p, c, sizeof(dnode_t)))
 | 
			
		||||
#define dnode_fixup(r, n)     libcdsb_rbtree_node_fixup((rbnode_t**)(r), (rbnode_t*)(n))
 | 
			
		||||
#define dnode_delete(r, n)    (dnode_t*)libcdsb_rbtree_node_delete((rbnode_t**)(r), (rbnode_t*)(n))
 | 
			
		||||
 | 
			
		||||
#define dnode_is_empty(n) ((n) == dnode_empty)
 | 
			
		||||
#define dnode_is_root(n)  dnode_is_empty((n)->parent)
 | 
			
		||||
 | 
			
		||||
extern void libcdcb_dnode_free(dnode_t* x, void* not_used);
 | 
			
		||||
 | 
			
		||||
#define dnode_free libcdcb_dnode_free
 | 
			
		||||
 | 
			
		||||
#endif /* LIBCDSB_SRC_MAP_INCLUDE_H */
 | 
			
		||||
@ -5,6 +5,22 @@
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
hash_t list_hash(const list_t* s) {
 | 
			
		||||
 | 
			
		||||
    hash_t hash = 0;
 | 
			
		||||
 | 
			
		||||
    if (!is_null(s->first)) {
 | 
			
		||||
        hash = vnode_hash(&s->first->node, s->first->type);
 | 
			
		||||
 | 
			
		||||
        if (s->first != s->last) {
 | 
			
		||||
            hash += vnode_hash(&s->first->node, s->first->type);
 | 
			
		||||
            hash ^= list_size(s);
 | 
			
		||||
        } else hash ^= 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return hash + VTYPE_LIST;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void list_init(list_t* x) {
 | 
			
		||||
    memset(x, 0, sizeof(*x));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@ int libcdsb_list_find_array  (list_t* x, const  arr_t* v, void* _, list_access_c
 | 
			
		||||
int libcdsb_list_find_list   (list_t* x, const list_t* v, void* _, list_access_callback cb, bool r, bool cut) { return libcdsb_list_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_list_find_map    (list_t* x, const  map_t* v, void* _, list_access_callback cb, bool r, bool cut) { return libcdsb_list_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_list_find_vset   (list_t* x, const  set_t* v, void* _, list_access_callback cb, bool r, bool cut) { return libcdsb_list_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_list_find_dict   (list_t* x, const dict_t* v, void* _, list_access_callback cb, bool r, bool cut) { return libcdsb_list_find(x,  v, vtypeof( v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_list_find_boolean(list_t* x,          bool v, void* _, list_access_callback cb, bool r, bool cut) { return libcdsb_list_find(x, &v, vtypeof(&v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_list_find_int8   (list_t* x,          s8_t v, void* _, list_access_callback cb, bool r, bool cut) { return libcdsb_list_find(x, &v, vtypeof(&v), _, cb, r, cut); }
 | 
			
		||||
int libcdsb_list_find_int16  (list_t* x,         s16_t v, void* _, list_access_callback cb, bool r, bool cut) { return libcdsb_list_find(x, &v, vtypeof(&v), _, cb, r, cut); }
 | 
			
		||||
@ -30,6 +31,7 @@ size_t libcdsb_list_count_array  (const list_t* s, const  arr_t* v) { return lib
 | 
			
		||||
size_t libcdsb_list_count_list   (const list_t* s, const list_t* v) { return libcdsb_list_count((void*)s,  v, vtypeof( v)); }
 | 
			
		||||
size_t libcdsb_list_count_map    (const list_t* s, const  map_t* v) { return libcdsb_list_count((void*)s,  v, vtypeof( v)); }
 | 
			
		||||
size_t libcdsb_list_count_vset   (const list_t* s, const  set_t* v) { return libcdsb_list_count((void*)s,  v, vtypeof( v)); }
 | 
			
		||||
size_t libcdsb_list_count_dict   (const list_t* s, const dict_t* v) { return libcdsb_list_count((void*)s,  v, vtypeof( v)); }
 | 
			
		||||
size_t libcdsb_list_count_boolean(const list_t* s,          bool v) { return libcdsb_list_count((void*)s, &v, vtypeof(&v)); }
 | 
			
		||||
size_t libcdsb_list_count_int8   (const list_t* s,          s8_t v) { return libcdsb_list_count((void*)s, &v, vtypeof(&v)); }
 | 
			
		||||
size_t libcdsb_list_count_int16  (const list_t* s,         s16_t v) { return libcdsb_list_count((void*)s, &v, vtypeof(&v)); }
 | 
			
		||||
@ -50,6 +52,7 @@ bool libcdsb_list_update_array  (list_t* x, ssize_t i, const  arr_t* v, int ins)
 | 
			
		||||
bool libcdsb_list_update_list   (list_t* x, ssize_t i, const list_t* v, int ins) { return libcdsb_list_update(x, i,  v, vtypeof( v), ins);  }
 | 
			
		||||
bool libcdsb_list_update_map    (list_t* x, ssize_t i, const  map_t* v, int ins) { return libcdsb_list_update(x, i,  v, vtypeof( v), ins);  }
 | 
			
		||||
bool libcdsb_list_update_vset   (list_t* x, ssize_t i, const  set_t* v, int ins) { return libcdsb_list_update(x, i,  v, vtypeof( v), ins);  }
 | 
			
		||||
bool libcdsb_list_update_dict   (list_t* x, ssize_t i, const dict_t* v, int ins) { return libcdsb_list_update(x, i,  v, vtypeof( v), ins);  }
 | 
			
		||||
bool libcdsb_list_update_boolean(list_t* x, ssize_t i,          bool v, int ins) { return libcdsb_list_update(x, i, &v, vtypeof(&v), ins);  }
 | 
			
		||||
bool libcdsb_list_update_int8   (list_t* x, ssize_t i,          s8_t v, int ins) { return libcdsb_list_update(x, i, &v, vtypeof(&v), ins);  }
 | 
			
		||||
bool libcdsb_list_update_int16  (list_t* x, ssize_t i,         s16_t v, int ins) { return libcdsb_list_update(x, i, &v, vtypeof(&v), ins);  }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										151
									
								
								src/map/base.c
									
									
									
									
									
								
							
							
						
						
									
										151
									
								
								src/map/base.c
									
									
									
									
									
								
							@ -3,106 +3,89 @@
 | 
			
		||||
 | 
			
		||||
#include "include.h"
 | 
			
		||||
 | 
			
		||||
#define mtree_duplicate(s, t)    rbtree_duplicate((rbnode_t*)s, (void*)mnode_duplicate, t)
 | 
			
		||||
#define mtree_compare(s0, s1, t) rbtree_compare((void*)s0, (void*)s1, (void*)mnode_compare, (void*)t)
 | 
			
		||||
 | 
			
		||||
static mnode_t* mnode_duplicate(const mnode_t* s, mnode_t* p, const vtype* t) {
 | 
			
		||||
    mnode_t* x;
 | 
			
		||||
 | 
			
		||||
    x        = mnode_create(vnode_duplicate(&s->key, *t), p, s->colored);
 | 
			
		||||
    x->type  = s->type;
 | 
			
		||||
    x->value = vnode_duplicate(&s->value, s->type);
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int mnode_compare(const mnode_t* s0, const mnode_t* s1, vtype* t) {
 | 
			
		||||
    int c = vnode_compare_eq(&s0->key, &s1->key, *t);
 | 
			
		||||
 | 
			
		||||
    return !c ? vnode_compare(&s0->value, s0->type, &s1->value, s1->type) : c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static hash_t mnode_hash(const mnode_t* s, vtype* tp) {
 | 
			
		||||
    vtype t = (!is_null(tp)) ? *tp : VTYPE_POINTER;
 | 
			
		||||
    return vnode_hash(s->key, t) + vnode_hash(s->value, s->type) + t;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void libcdsb_mnode_free(mnode_t* x, vtype* t) {
 | 
			
		||||
    vnode_free(&x->key, *t);
 | 
			
		||||
    vnode_free(&x->value, x->type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
hash_t map_hash(const map_t* s) {
 | 
			
		||||
    return rbtree_hash(s->root, (void*)mnode_hash, (void*)&s->type) + VTYPE_MAP;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void map_init(map_t* x, vtype t) {
 | 
			
		||||
    x->root = mnode_empty;
 | 
			
		||||
    x->type = t;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void map_free(map_t* x) {
 | 
			
		||||
    mnode_t* t;
 | 
			
		||||
    mnode_t* c;
 | 
			
		||||
 | 
			
		||||
    c = x->root;
 | 
			
		||||
 | 
			
		||||
    while (!mnode_is_empty(x->root)) {
 | 
			
		||||
        if (!mnode_is_empty(c->left)) {
 | 
			
		||||
            c = c->left;
 | 
			
		||||
        } else if (!mnode_is_empty(c->right)) {
 | 
			
		||||
            c = c->right;
 | 
			
		||||
        } else if (!mnode_is_root(c)) {
 | 
			
		||||
            vnode_free(&c->key,   x->type);
 | 
			
		||||
            vnode_free(&c->value, c->type);
 | 
			
		||||
 | 
			
		||||
            t = c;
 | 
			
		||||
            c = c->parent;
 | 
			
		||||
 | 
			
		||||
            if (t == c->left) c->left  = mnode_empty;
 | 
			
		||||
            else              c->right = mnode_empty;
 | 
			
		||||
 | 
			
		||||
            free(t);
 | 
			
		||||
        } else {
 | 
			
		||||
            vnode_free(&c->key,   x->type);
 | 
			
		||||
            vnode_free(&c->value, c->type);
 | 
			
		||||
            x->root = mnode_empty;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    rbtree_free(x->root, (void*)mnode_free, &x->type);
 | 
			
		||||
 | 
			
		||||
    x->root = mnode_empty;
 | 
			
		||||
    x->type = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
size_t map_size(const map_t* x) {
 | 
			
		||||
    stack_t   z = { .prev = 0, .value = x->root };
 | 
			
		||||
    size_t    n = 0;
 | 
			
		||||
    rbnode_t* c;
 | 
			
		||||
 | 
			
		||||
    if (!mnode_is_empty(x->root)) {
 | 
			
		||||
        while ((c = stack_pop(&z))) {
 | 
			
		||||
            ++n;
 | 
			
		||||
            if (!rbnode_is_empty(c->left))
 | 
			
		||||
                stack_push(&z, c->left);
 | 
			
		||||
            if (!rbnode_is_empty(c->right))
 | 
			
		||||
                stack_push(&z, c->right);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return n;
 | 
			
		||||
    return rbtree_size(x->root);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
int map_compare(const map_t* s0, const map_t* s1) {
 | 
			
		||||
 | 
			
		||||
    stack_t z = { .prev = 0, .value = 0 };
 | 
			
		||||
    vtype   t = s0->type;
 | 
			
		||||
    int     c = 0;
 | 
			
		||||
 | 
			
		||||
    if (s0 == s1 || s0->root == s1->root) return 0;
 | 
			
		||||
    if (s0 == s1) return 0;
 | 
			
		||||
    if (s0->type != s1->type) return s0->type - s1->type;
 | 
			
		||||
 | 
			
		||||
    stack_push(&z, s1->root);
 | 
			
		||||
    stack_push(&z, s0->root);
 | 
			
		||||
 | 
			
		||||
    for (mnode_t *c0, *c1;!is_null(z.value);) {
 | 
			
		||||
        c0 = stack_pop(&z);
 | 
			
		||||
        c1 = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
        if (mnode_is_empty(c0) || mnode_is_empty(c1)) {
 | 
			
		||||
            if (c0 != c1) {
 | 
			
		||||
                stack_flush(&z);
 | 
			
		||||
                return mnode_is_empty(c0) ? -1 : 1;
 | 
			
		||||
            }
 | 
			
		||||
        } else if ((c = vnode_compare(c0->key, t, c1->key, t)) || (c = vnode_compare(c0->value, c0->type, c1->value, c1->type))) {
 | 
			
		||||
            if (c0->left == c1->right) {
 | 
			
		||||
                        c = vnode_compare(c1->key,         t,        c0->right->key,   t       );
 | 
			
		||||
                if (!c) c = vnode_compare(c1->value,       c1->type, c0->right->value, c0->type);
 | 
			
		||||
                if (!c) c = vnode_compare(c1->left->key,   t,        c0->key,          t       );
 | 
			
		||||
                if (!c) c = vnode_compare(c1->left->value, c1->type, c0->value,        c0->type);
 | 
			
		||||
            } else if (c0->right == c1->left) {
 | 
			
		||||
                        c = vnode_compare(c0->key,         t,        c1->right->key,   t       );
 | 
			
		||||
                if (!c) c = vnode_compare(c0->value,       c0->type, c1->right->value, c1->type);
 | 
			
		||||
                if (!c) c = vnode_compare(c0->left->key,   t,        c1->key,          t       );
 | 
			
		||||
                if (!c) c = vnode_compare(c0->left->value, c0->type, c1->value,        c1->type);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (c) { stack_flush(&z); return c; }
 | 
			
		||||
        } else {
 | 
			
		||||
            stack_push(&z, c1->right);
 | 
			
		||||
            stack_push(&z, c0->right);
 | 
			
		||||
            stack_push(&z, c1->left);
 | 
			
		||||
            stack_push(&z, c0->left);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
    return mtree_compare(s0->root, s1->root, &s0->type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
map_t map_copy(const map_t* s) {
 | 
			
		||||
    map_t x;
 | 
			
		||||
 | 
			
		||||
    x.type = s->type;
 | 
			
		||||
    x.root = mtree_duplicate(s->root, &x.type);
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
map_t* map_duplicate(const map_t* s) {
 | 
			
		||||
    map_t *x = malloc(sizeof(*x));
 | 
			
		||||
 | 
			
		||||
    x->type = s->type;
 | 
			
		||||
    x->root = mtree_duplicate(s->root, &x->type);
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void map_copy_init(map_t* x, const map_t* s) {
 | 
			
		||||
    x->type = s->type;
 | 
			
		||||
    x->root = mtree_duplicate(s->root, &x->type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										120
									
								
								src/map/copy.c
									
									
									
									
									
								
							
							
						
						
									
										120
									
								
								src/map/copy.c
									
									
									
									
									
								
							@ -1,120 +0,0 @@
 | 
			
		||||
/* This software is licensed by the MIT License, see LICENSE file */
 | 
			
		||||
/*                                Copyright © 2022 Gregory Lirent */
 | 
			
		||||
 | 
			
		||||
#include "include.h"
 | 
			
		||||
 | 
			
		||||
map_t map_copy(const map_t* s) {
 | 
			
		||||
 | 
			
		||||
    map_t   x = { .type = s->type };
 | 
			
		||||
    stack_t z = { .prev = 0, .value = s->root };
 | 
			
		||||
    vtype   t = s->type;
 | 
			
		||||
 | 
			
		||||
    if (!mnode_is_empty(s->root)) {
 | 
			
		||||
        x.root = mnode_create(vnode_duplicate(&s->root->value, t), rbnode_empty, 0);
 | 
			
		||||
        stack_push(&z, x.root);
 | 
			
		||||
 | 
			
		||||
        do {
 | 
			
		||||
            mnode_t *p0 = stack_pop(&z);
 | 
			
		||||
            mnode_t *p1 = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
            if (!mnode_is_empty(p1->left)) {
 | 
			
		||||
                p0->left        = mnode_create(vnode_duplicate(&p1->left->key, t), p0, p1->left->colored);
 | 
			
		||||
                p0->left->type  = p1->left->type;
 | 
			
		||||
                p0->left->value = vnode_duplicate(&p1->left->value, p1->left->type);
 | 
			
		||||
 | 
			
		||||
                stack_push(&z, p1->left);
 | 
			
		||||
                stack_push(&z, p0->left);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!mnode_is_empty(p1->right)) {
 | 
			
		||||
                p0->right        = mnode_create(vnode_duplicate(&p1->right->key, t), p0, p1->right->colored);
 | 
			
		||||
                p0->right->type  = p1->right->type;
 | 
			
		||||
                p0->right->value = vnode_duplicate(&p1->right->value, p1->right->type);
 | 
			
		||||
 | 
			
		||||
                stack_push(&z, p1->right);
 | 
			
		||||
                stack_push(&z, p0->right);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } while (!is_null(z.value));
 | 
			
		||||
 | 
			
		||||
    } else x.root = mnode_empty;
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
map_t* map_duplicate(const map_t* s) {
 | 
			
		||||
 | 
			
		||||
    map_t*  x = malloc(sizeof(*x));
 | 
			
		||||
    stack_t z = { .prev = 0, .value = s->root };
 | 
			
		||||
    vtype   t = x->type = s->type;
 | 
			
		||||
 | 
			
		||||
    if (!mnode_is_empty(s->root)) {
 | 
			
		||||
        x->root = mnode_create(vnode_duplicate(&s->root->value, t), rbnode_empty, 0);
 | 
			
		||||
        stack_push(&z, x->root);
 | 
			
		||||
 | 
			
		||||
        do {
 | 
			
		||||
            mnode_t *p0 = stack_pop(&z);
 | 
			
		||||
            mnode_t *p1 = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
            if (!mnode_is_empty(p1->left)) {
 | 
			
		||||
                p0->left        = mnode_create(vnode_duplicate(&p1->left->key, t), p0, p1->left->colored);
 | 
			
		||||
                p0->left->type  = p1->left->type;
 | 
			
		||||
                p0->left->value = vnode_duplicate(&p1->left->value, p1->left->type);
 | 
			
		||||
 | 
			
		||||
                stack_push(&z, p1->left);
 | 
			
		||||
                stack_push(&z, p0->left);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!mnode_is_empty(p1->right)) {
 | 
			
		||||
                p0->right        = mnode_create(vnode_duplicate(&p1->right->key, t), p0, p1->right->colored);
 | 
			
		||||
                p0->right->type  = p1->right->type;
 | 
			
		||||
                p0->right->value = vnode_duplicate(&p1->right->value, p1->right->type);
 | 
			
		||||
 | 
			
		||||
                stack_push(&z, p1->right);
 | 
			
		||||
                stack_push(&z, p0->right);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } while (!is_null(z.value));
 | 
			
		||||
 | 
			
		||||
    } else x->root = mnode_empty;
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void map_copy_init(map_t* x, const map_t* s) {
 | 
			
		||||
 | 
			
		||||
    stack_t z = { .prev = 0, .value = s->root };
 | 
			
		||||
    vtype   t = x->type = s->type;
 | 
			
		||||
 | 
			
		||||
    if (!mnode_is_empty(s->root)) {
 | 
			
		||||
        x->root = mnode_create(vnode_duplicate(&s->root->value, t), rbnode_empty, 0);
 | 
			
		||||
        stack_push(&z, x->root);
 | 
			
		||||
 | 
			
		||||
        do {
 | 
			
		||||
            mnode_t *p0 = stack_pop(&z);
 | 
			
		||||
            mnode_t *p1 = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
            if (!mnode_is_empty(p1->left)) {
 | 
			
		||||
                p0->left        = mnode_create(vnode_duplicate(&p1->left->key, t), p0, p1->left->colored);
 | 
			
		||||
                p0->left->type  = p1->left->type;
 | 
			
		||||
                p0->left->value = vnode_duplicate(&p1->left->value, p1->left->type);
 | 
			
		||||
 | 
			
		||||
                stack_push(&z, p1->left);
 | 
			
		||||
                stack_push(&z, p0->left);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!mnode_is_empty(p1->right)) {
 | 
			
		||||
                p0->right        = mnode_create(vnode_duplicate(&p1->right->key, t), p0, p1->right->colored);
 | 
			
		||||
                p0->right->type  = p1->right->type;
 | 
			
		||||
                p0->right->value = vnode_duplicate(&p1->right->value, p1->right->type);
 | 
			
		||||
 | 
			
		||||
                stack_push(&z, p1->right);
 | 
			
		||||
                stack_push(&z, p0->right);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } while (!is_null(z.value));
 | 
			
		||||
 | 
			
		||||
    } else x->root = mnode_empty;
 | 
			
		||||
}
 | 
			
		||||
@ -20,8 +20,7 @@ bool libcdsb_map_update(map_t* x, const void* k, vtype kt, const void* v, vtype
 | 
			
		||||
            cmp = vtype_compare(k, kt, vnode_peek(&n->key, kt), kt);
 | 
			
		||||
 | 
			
		||||
            if (cmp == 0) {
 | 
			
		||||
                vnode_free(&n->key,   kt);
 | 
			
		||||
                vnode_free(&n->value, n->type);
 | 
			
		||||
                mnode_free(n, &kt);
 | 
			
		||||
 | 
			
		||||
                n->key   = kn;
 | 
			
		||||
                n->value = vnode_create(v, vt);
 | 
			
		||||
@ -66,8 +65,7 @@ int libcdsb_map_find(map_t* x, const void* k, vtype t, void* _, map_access_callb
 | 
			
		||||
 | 
			
		||||
            if (cut) {
 | 
			
		||||
                c = mnode_delete(&x->root, c);
 | 
			
		||||
                vnode_free(&c->key,   x->type);
 | 
			
		||||
                vnode_free(&c->value, c->type);
 | 
			
		||||
                mnode_free(c, &x->type);
 | 
			
		||||
                free(c);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -76,7 +74,6 @@ int libcdsb_map_find(map_t* x, const void* k, vtype t, void* _, map_access_callb
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -91,13 +88,11 @@ int libcdsb_map_foreach(map_t* x, void* dt, map_access_callback callback, bool f
 | 
			
		||||
        if ((r = callback(vnode_peek(&c->key, x->type), x->type, vnode_peek(&c->value, c->type), c->type, dt)))
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if (!mnode_is_empty(c->right)) stack_push(&z, c->right);
 | 
			
		||||
        if (!mnode_is_empty(c->left))  stack_push(&z, c->left);
 | 
			
		||||
 | 
			
		||||
        if (flush) {
 | 
			
		||||
            vnode_free(&c->key,   x->type);
 | 
			
		||||
            vnode_free(&c->value, c->type);
 | 
			
		||||
            mnode_free(c, &x->type);
 | 
			
		||||
            free(c);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -107,8 +102,7 @@ int libcdsb_map_foreach(map_t* x, void* dt, map_access_callback callback, bool f
 | 
			
		||||
            if (!mnode_is_empty(c->right)) stack_push(&z, c->right);
 | 
			
		||||
            if (!mnode_is_empty(c->left))  stack_push(&z, c->left);
 | 
			
		||||
 | 
			
		||||
            vnode_free(&c->key,   x->type);
 | 
			
		||||
            vnode_free(&c->value, c->type);
 | 
			
		||||
            mnode_free(c, &x->type);
 | 
			
		||||
            free(c);
 | 
			
		||||
 | 
			
		||||
            c = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@ int libcdsb_map_find_array  (map_t* x, const  arr_t* k, void* _, map_access_call
 | 
			
		||||
int libcdsb_map_find_list   (map_t* x, const list_t* k, void* _, map_access_callback cb, bool cut) { return libcdsb_map_find(x,  k, vtypeof( k), _, cb, cut); }
 | 
			
		||||
int libcdsb_map_find_map    (map_t* x, const  map_t* k, void* _, map_access_callback cb, bool cut) { return libcdsb_map_find(x,  k, vtypeof( k), _, cb, cut); }
 | 
			
		||||
int libcdsb_map_find_vset   (map_t* x, const  set_t* k, void* _, map_access_callback cb, bool cut) { return libcdsb_map_find(x,  k, vtypeof( k), _, cb, cut); }
 | 
			
		||||
int libcdsb_map_find_dict   (map_t* x, const dict_t* k, void* _, map_access_callback cb, bool cut) { return libcdsb_map_find(x,  k, vtypeof( k), _, cb, cut); }
 | 
			
		||||
int libcdsb_map_find_boolean(map_t* x,          bool k, void* _, map_access_callback cb, bool cut) { return libcdsb_map_find(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_map_find_int8   (map_t* x,          s8_t k, void* _, map_access_callback cb, bool cut) { return libcdsb_map_find(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_map_find_int16  (map_t* x,         s16_t k, void* _, map_access_callback cb, bool cut) { return libcdsb_map_find(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
@ -23,13 +24,14 @@ int libcdsb_map_find_float  (map_t* x,          fl_t k, void* _, map_access_call
 | 
			
		||||
int libcdsb_map_find_double (map_t* x,         dbl_t k, void* _, map_access_callback cb, bool cut) { return libcdsb_map_find(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
int libcdsb_map_find_ldouble(map_t* x,        ldbl_t k, void* _, map_access_callback cb, bool cut) { return libcdsb_map_find(x, &k, vtypeof(&k), _, cb, cut); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_pointer_pointer(map_t* x, const void* k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_cstring(map_t* x, const void* k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_string (map_t* x, const void* k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_array  (map_t* x, const void* k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_pointer(map_t* x, const void* k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_cstring(map_t* x, const void* k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_string (map_t* x, const void* k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_array  (map_t* x, const void* k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_list   (map_t* x, const void* k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_map    (map_t* x, const void* k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_vset   (map_t* x, const void* k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_map    (map_t* x, const void* k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_vset   (map_t* x, const void* k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_dict   (map_t* x, const void* k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_boolean(map_t* x, const void* k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_int8   (map_t* x, const void* k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_int16  (map_t* x, const void* k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -43,13 +45,14 @@ bool libcdsb_map_update_pointer_float  (map_t* x, const void* k,          fl_t v
 | 
			
		||||
bool libcdsb_map_update_pointer_double (map_t* x, const void* k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_pointer_ldouble(map_t* x, const void* k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_cstring_pointer(map_t* x, const char* k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_cstring(map_t* x, const char* k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_string (map_t* x, const char* k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_array  (map_t* x, const char* k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_pointer(map_t* x, const char* k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_cstring(map_t* x, const char* k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_string (map_t* x, const char* k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_array  (map_t* x, const char* k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_list   (map_t* x, const char* k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_map    (map_t* x, const char* k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_vset   (map_t* x, const char* k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_map    (map_t* x, const char* k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_vset   (map_t* x, const char* k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_dict   (map_t* x, const char* k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_boolean(map_t* x, const char* k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_int8   (map_t* x, const char* k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_int16  (map_t* x, const char* k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -63,13 +66,14 @@ bool libcdsb_map_update_cstring_float  (map_t* x, const char* k,          fl_t v
 | 
			
		||||
bool libcdsb_map_update_cstring_double (map_t* x, const char* k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_cstring_ldouble(map_t* x, const char* k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_string_pointer(map_t* x, const str_t* k,   const void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_string_cstring(map_t* x, const str_t* k,   const char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_string_string (map_t* x, const str_t* k,  const str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_string_array  (map_t* x, const str_t* k,  const arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_string_pointer(map_t* x, const str_t* k, const   void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_string_cstring(map_t* x, const str_t* k, const   char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_string_string (map_t* x, const str_t* k, const  str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_string_array  (map_t* x, const str_t* k, const  arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_string_list   (map_t* x, const str_t* k, const list_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_string_map    (map_t* x, const str_t* k,  const map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_string_vset   (map_t* x, const str_t* k,  const set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_string_map    (map_t* x, const str_t* k, const  map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_string_vset   (map_t* x, const str_t* k, const  set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_string_dict   (map_t* x, const str_t* k, const dict_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_string_boolean(map_t* x, const str_t* k,          bool v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_string_int8   (map_t* x, const str_t* k,          s8_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_string_int16  (map_t* x, const str_t* k,         s16_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -83,13 +87,14 @@ bool libcdsb_map_update_string_float  (map_t* x, const str_t* k,          fl_t v
 | 
			
		||||
bool libcdsb_map_update_string_double (map_t* x, const str_t* k,         dbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_string_ldouble(map_t* x, const str_t* k,        ldbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_array_pointer(map_t* x, const arr_t* k,   const void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_array_cstring(map_t* x, const arr_t* k,   const char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_array_string (map_t* x, const arr_t* k,  const str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_array_array  (map_t* x, const arr_t* k,  const arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_array_pointer(map_t* x, const arr_t* k, const   void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_array_cstring(map_t* x, const arr_t* k, const   char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_array_string (map_t* x, const arr_t* k, const  str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_array_array  (map_t* x, const arr_t* k, const  arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_array_list   (map_t* x, const arr_t* k, const list_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_array_map    (map_t* x, const arr_t* k,  const map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_array_vset   (map_t* x, const arr_t* k,  const set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_array_map    (map_t* x, const arr_t* k, const  map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_array_vset   (map_t* x, const arr_t* k, const  set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_array_dict   (map_t* x, const arr_t* k, const dict_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_array_boolean(map_t* x, const arr_t* k,          bool v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_array_int8   (map_t* x, const arr_t* k,          s8_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_array_int16  (map_t* x, const arr_t* k,         s16_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -103,13 +108,14 @@ bool libcdsb_map_update_array_float  (map_t* x, const arr_t* k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_array_double (map_t* x, const arr_t* k,         dbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_array_ldouble(map_t* x, const arr_t* k,        ldbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_list_pointer(map_t* x, const list_t* k,   const void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_list_cstring(map_t* x, const list_t* k,   const char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_list_string (map_t* x, const list_t* k,  const str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_list_array  (map_t* x, const list_t* k,  const arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_list_pointer(map_t* x, const list_t* k, const   void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_list_cstring(map_t* x, const list_t* k, const   char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_list_string (map_t* x, const list_t* k, const  str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_list_array  (map_t* x, const list_t* k, const  arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_list_list   (map_t* x, const list_t* k, const list_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_list_map    (map_t* x, const list_t* k,  const map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_list_vset   (map_t* x, const list_t* k,  const set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_list_map    (map_t* x, const list_t* k, const  map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_list_vset   (map_t* x, const list_t* k, const  set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_list_dict   (map_t* x, const list_t* k, const dict_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_list_boolean(map_t* x, const list_t* k,          bool v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_list_int8   (map_t* x, const list_t* k,          s8_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_list_int16  (map_t* x, const list_t* k,         s16_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -123,13 +129,14 @@ bool libcdsb_map_update_list_float  (map_t* x, const list_t* k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_list_double (map_t* x, const list_t* k,         dbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_list_ldouble(map_t* x, const list_t* k,        ldbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_map_pointer(map_t* x, const map_t* k,   const void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_map_cstring(map_t* x, const map_t* k,   const char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_map_string (map_t* x, const map_t* k,  const str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_map_array  (map_t* x, const map_t* k,  const arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_map_pointer(map_t* x, const map_t* k, const   void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_map_cstring(map_t* x, const map_t* k, const   char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_map_string (map_t* x, const map_t* k, const  str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_map_array  (map_t* x, const map_t* k, const  arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_map_list   (map_t* x, const map_t* k, const list_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_map_map    (map_t* x, const map_t* k,  const map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_map_vset   (map_t* x, const map_t* k,  const set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_map_map    (map_t* x, const map_t* k, const  map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_map_vset   (map_t* x, const map_t* k, const  set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_map_dict   (map_t* x, const map_t* k, const dict_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_map_boolean(map_t* x, const map_t* k,          bool v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_map_int8   (map_t* x, const map_t* k,          s8_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_map_int16  (map_t* x, const map_t* k,         s16_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -143,13 +150,14 @@ bool libcdsb_map_update_map_float  (map_t* x, const map_t* k,          fl_t v) {
 | 
			
		||||
bool libcdsb_map_update_map_double (map_t* x, const map_t* k,         dbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_map_ldouble(map_t* x, const map_t* k,        ldbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_vset_pointer(map_t* x, const set_t* k,   const void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_cstring(map_t* x, const set_t* k,   const char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_string (map_t* x, const set_t* k,  const str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_array  (map_t* x, const set_t* k,  const arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_pointer(map_t* x, const set_t* k, const   void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_cstring(map_t* x, const set_t* k, const   char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_string (map_t* x, const set_t* k, const  str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_array  (map_t* x, const set_t* k, const  arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_list   (map_t* x, const set_t* k, const list_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_map    (map_t* x, const set_t* k,  const map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_vset   (map_t* x, const set_t* k,  const set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_map    (map_t* x, const set_t* k, const  map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_vset   (map_t* x, const set_t* k, const  set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_dict   (map_t* x, const set_t* k, const dict_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_boolean(map_t* x, const set_t* k,          bool v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_int8   (map_t* x, const set_t* k,          s8_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_int16  (map_t* x, const set_t* k,         s16_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -163,13 +171,35 @@ bool libcdsb_map_update_vset_float  (map_t* x, const set_t* k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_vset_double (map_t* x, const set_t* k,         dbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_vset_ldouble(map_t* x, const set_t* k,        ldbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_boolean_pointer(map_t* x, const bool k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_cstring(map_t* x, const bool k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_string (map_t* x, const bool k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_array  (map_t* x, const bool k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_pointer(map_t* x, const dict_t* k, const   void* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_cstring(map_t* x, const dict_t* k, const   char* v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_string (map_t* x, const dict_t* k, const  str_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_array  (map_t* x, const dict_t* k, const  arr_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_list   (map_t* x, const dict_t* k, const list_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_map    (map_t* x, const dict_t* k, const  map_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_vset   (map_t* x, const dict_t* k, const  set_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_dict   (map_t* x, const dict_t* k, const dict_t* v) { return libcdsb_map_update(x, k, vtypeof(k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_boolean(map_t* x, const dict_t* k,          bool v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_int8   (map_t* x, const dict_t* k,          s8_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_int16  (map_t* x, const dict_t* k,         s16_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_int32  (map_t* x, const dict_t* k,         s32_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_int64  (map_t* x, const dict_t* k,         s64_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_uint8  (map_t* x, const dict_t* k,          u8_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_uint16 (map_t* x, const dict_t* k,         u16_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_uint32 (map_t* x, const dict_t* k,         u32_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_uint64 (map_t* x, const dict_t* k,         u64_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_float  (map_t* x, const dict_t* k,          fl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_double (map_t* x, const dict_t* k,         dbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_dict_ldouble(map_t* x, const dict_t* k,        ldbl_t v) { return libcdsb_map_update(x, k, vtypeof(k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_boolean_pointer(map_t* x, const bool k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_cstring(map_t* x, const bool k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_string (map_t* x, const bool k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_array  (map_t* x, const bool k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_list   (map_t* x, const bool k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_map    (map_t* x, const bool k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_vset   (map_t* x, const bool k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_map    (map_t* x, const bool k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_vset   (map_t* x, const bool k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_dict   (map_t* x, const bool k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_boolean(map_t* x, const bool k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_int8   (map_t* x, const bool k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_int16  (map_t* x, const bool k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -183,13 +213,14 @@ bool libcdsb_map_update_boolean_float  (map_t* x, const bool k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_boolean_double (map_t* x, const bool k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_boolean_ldouble(map_t* x, const bool k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_int8_pointer(map_t* x, const s8_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_cstring(map_t* x, const s8_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_string (map_t* x, const s8_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_array  (map_t* x, const s8_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_pointer(map_t* x, const s8_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_cstring(map_t* x, const s8_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_string (map_t* x, const s8_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_array  (map_t* x, const s8_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_list   (map_t* x, const s8_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_map    (map_t* x, const s8_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_vset   (map_t* x, const s8_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_map    (map_t* x, const s8_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_vset   (map_t* x, const s8_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_dict   (map_t* x, const s8_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_boolean(map_t* x, const s8_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_int8   (map_t* x, const s8_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_int16  (map_t* x, const s8_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -203,13 +234,14 @@ bool libcdsb_map_update_int8_float  (map_t* x, const s8_t k,          fl_t v) {
 | 
			
		||||
bool libcdsb_map_update_int8_double (map_t* x, const s8_t k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int8_ldouble(map_t* x, const s8_t k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_int16_pointer(map_t* x, const s16_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_cstring(map_t* x, const s16_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_string (map_t* x, const s16_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_array  (map_t* x, const s16_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_pointer(map_t* x, const s16_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_cstring(map_t* x, const s16_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_string (map_t* x, const s16_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_array  (map_t* x, const s16_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_list   (map_t* x, const s16_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_map    (map_t* x, const s16_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_vset   (map_t* x, const s16_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_map    (map_t* x, const s16_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_vset   (map_t* x, const s16_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_dict   (map_t* x, const s16_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_boolean(map_t* x, const s16_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_int8   (map_t* x, const s16_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_int16  (map_t* x, const s16_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -223,13 +255,14 @@ bool libcdsb_map_update_int16_float  (map_t* x, const s16_t k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_int16_double (map_t* x, const s16_t k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int16_ldouble(map_t* x, const s16_t k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_int32_pointer(map_t* x, const s32_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_cstring(map_t* x, const s32_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_string (map_t* x, const s32_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_array  (map_t* x, const s32_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_pointer(map_t* x, const s32_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_cstring(map_t* x, const s32_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_string (map_t* x, const s32_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_array  (map_t* x, const s32_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_list   (map_t* x, const s32_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_map    (map_t* x, const s32_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_vset   (map_t* x, const s32_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_map    (map_t* x, const s32_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_vset   (map_t* x, const s32_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_dict   (map_t* x, const s32_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_boolean(map_t* x, const s32_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_int8   (map_t* x, const s32_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_int16  (map_t* x, const s32_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -243,13 +276,14 @@ bool libcdsb_map_update_int32_float  (map_t* x, const s32_t k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_int32_double (map_t* x, const s32_t k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int32_ldouble(map_t* x, const s32_t k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_int64_pointer(map_t* x, const s64_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_cstring(map_t* x, const s64_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_string (map_t* x, const s64_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_array  (map_t* x, const s64_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_pointer(map_t* x, const s64_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_cstring(map_t* x, const s64_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_string (map_t* x, const s64_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_array  (map_t* x, const s64_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_list   (map_t* x, const s64_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_map    (map_t* x, const s64_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_vset   (map_t* x, const s64_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_map    (map_t* x, const s64_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_vset   (map_t* x, const s64_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_dict   (map_t* x, const s64_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_boolean(map_t* x, const s64_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_int8   (map_t* x, const s64_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_int16  (map_t* x, const s64_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -263,13 +297,14 @@ bool libcdsb_map_update_int64_float  (map_t* x, const s64_t k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_int64_double (map_t* x, const s64_t k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_int64_ldouble(map_t* x, const s64_t k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_uint8_pointer(map_t* x, const u8_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_cstring(map_t* x, const u8_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_string (map_t* x, const u8_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_array  (map_t* x, const u8_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_pointer(map_t* x, const u8_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_cstring(map_t* x, const u8_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_string (map_t* x, const u8_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_array  (map_t* x, const u8_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_list   (map_t* x, const u8_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_map    (map_t* x, const u8_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_vset   (map_t* x, const u8_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_map    (map_t* x, const u8_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_vset   (map_t* x, const u8_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_dict   (map_t* x, const u8_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_boolean(map_t* x, const u8_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_int8   (map_t* x, const u8_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_int16  (map_t* x, const u8_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -283,13 +318,14 @@ bool libcdsb_map_update_uint8_float  (map_t* x, const u8_t k,          fl_t v) {
 | 
			
		||||
bool libcdsb_map_update_uint8_double (map_t* x, const u8_t k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint8_ldouble(map_t* x, const u8_t k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_uint16_pointer(map_t* x, const u16_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_cstring(map_t* x, const u16_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_string (map_t* x, const u16_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_array  (map_t* x, const u16_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_pointer(map_t* x, const u16_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_cstring(map_t* x, const u16_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_string (map_t* x, const u16_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_array  (map_t* x, const u16_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_list   (map_t* x, const u16_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_map    (map_t* x, const u16_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_vset   (map_t* x, const u16_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_map    (map_t* x, const u16_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_vset   (map_t* x, const u16_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_dict   (map_t* x, const u16_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_boolean(map_t* x, const u16_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_int8   (map_t* x, const u16_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_int16  (map_t* x, const u16_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -303,13 +339,14 @@ bool libcdsb_map_update_uint16_float  (map_t* x, const u16_t k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_uint16_double (map_t* x, const u16_t k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint16_ldouble(map_t* x, const u16_t k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_uint32_pointer(map_t* x, const u32_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_cstring(map_t* x, const u32_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_string (map_t* x, const u32_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_array  (map_t* x, const u32_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_pointer(map_t* x, const u32_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_cstring(map_t* x, const u32_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_string (map_t* x, const u32_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_array  (map_t* x, const u32_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_list   (map_t* x, const u32_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_map    (map_t* x, const u32_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_vset   (map_t* x, const u32_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_map    (map_t* x, const u32_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_vset   (map_t* x, const u32_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_dict   (map_t* x, const u32_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_boolean(map_t* x, const u32_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_int8   (map_t* x, const u32_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_int16  (map_t* x, const u32_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -323,13 +360,14 @@ bool libcdsb_map_update_uint32_float  (map_t* x, const u32_t k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_uint32_double (map_t* x, const u32_t k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint32_ldouble(map_t* x, const u32_t k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_uint64_pointer(map_t* x, const u64_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_cstring(map_t* x, const u64_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_string (map_t* x, const u64_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_array  (map_t* x, const u64_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_pointer(map_t* x, const u64_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_cstring(map_t* x, const u64_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_string (map_t* x, const u64_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_array  (map_t* x, const u64_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_list   (map_t* x, const u64_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_map    (map_t* x, const u64_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_vset   (map_t* x, const u64_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_map    (map_t* x, const u64_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_vset   (map_t* x, const u64_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_dict   (map_t* x, const u64_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_boolean(map_t* x, const u64_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_int8   (map_t* x, const u64_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_int16  (map_t* x, const u64_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -343,13 +381,14 @@ bool libcdsb_map_update_uint64_float  (map_t* x, const u64_t k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_uint64_double (map_t* x, const u64_t k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_uint64_ldouble(map_t* x, const u64_t k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_float_pointer(map_t* x, const fl_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_float_cstring(map_t* x, const fl_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_float_string (map_t* x, const fl_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_float_array  (map_t* x, const fl_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_float_pointer(map_t* x, const fl_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_float_cstring(map_t* x, const fl_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_float_string (map_t* x, const fl_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_float_array  (map_t* x, const fl_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_float_list   (map_t* x, const fl_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_float_map    (map_t* x, const fl_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_float_vset   (map_t* x, const fl_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_float_map    (map_t* x, const fl_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_float_vset   (map_t* x, const fl_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_float_dict   (map_t* x, const fl_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_float_boolean(map_t* x, const fl_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_float_int8   (map_t* x, const fl_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_float_int16  (map_t* x, const fl_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -363,13 +402,14 @@ bool libcdsb_map_update_float_float  (map_t* x, const fl_t k,          fl_t v) {
 | 
			
		||||
bool libcdsb_map_update_float_double (map_t* x, const fl_t k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_float_ldouble(map_t* x, const fl_t k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_double_pointer(map_t* x, const dbl_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_double_cstring(map_t* x, const dbl_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_double_string (map_t* x, const dbl_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_double_array  (map_t* x, const dbl_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_double_pointer(map_t* x, const dbl_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_double_cstring(map_t* x, const dbl_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_double_string (map_t* x, const dbl_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_double_array  (map_t* x, const dbl_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_double_list   (map_t* x, const dbl_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_double_map    (map_t* x, const dbl_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_double_vset   (map_t* x, const dbl_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_double_map    (map_t* x, const dbl_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_double_vset   (map_t* x, const dbl_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_double_dict   (map_t* x, const dbl_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_double_boolean(map_t* x, const dbl_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_double_int8   (map_t* x, const dbl_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_double_int16  (map_t* x, const dbl_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
@ -383,13 +423,14 @@ bool libcdsb_map_update_double_float  (map_t* x, const dbl_t k,          fl_t v)
 | 
			
		||||
bool libcdsb_map_update_double_double (map_t* x, const dbl_t k,         dbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_double_ldouble(map_t* x, const dbl_t k,        ldbl_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_map_update_ldouble_pointer(map_t* x, const ldbl_t k,   const void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_cstring(map_t* x, const ldbl_t k,   const char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_string (map_t* x, const ldbl_t k,  const str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_array  (map_t* x, const ldbl_t k,  const arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_pointer(map_t* x, const ldbl_t k, const   void* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_cstring(map_t* x, const ldbl_t k, const   char* v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_string (map_t* x, const ldbl_t k, const  str_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_array  (map_t* x, const ldbl_t k, const  arr_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_list   (map_t* x, const ldbl_t k, const list_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_map    (map_t* x, const ldbl_t k,  const map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_vset   (map_t* x, const ldbl_t k,  const set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_map    (map_t* x, const ldbl_t k, const  map_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_vset   (map_t* x, const ldbl_t k, const  set_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_dict   (map_t* x, const ldbl_t k, const dict_t* v) { return libcdsb_map_update(x, &k, vtypeof(&k),  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_boolean(map_t* x, const ldbl_t k,          bool v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_int8   (map_t* x, const ldbl_t k,          s8_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_map_update_ldouble_int16  (map_t* x, const ldbl_t k,         s16_t v) { return libcdsb_map_update(x, &k, vtypeof(&k), &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,7 @@ static_assert(offsetof(struct libcdsb_rbtree_node, value) == offsetof(struct lib
 | 
			
		||||
static_assert(offsetof(struct libcdsb_set, root) == offsetof(struct libcdsb_map, root), "Implementation assert");
 | 
			
		||||
static_assert(offsetof(struct libcdsb_set, type) == offsetof(struct libcdsb_map, type), "Implementation assert");
 | 
			
		||||
 | 
			
		||||
extern void libcdsb_mnode_free(mnode_t* x, vtype* t);
 | 
			
		||||
 | 
			
		||||
#define mnode_empty           ((mnode_t*)LIBCDSB_RBTREE_NODE_EMPTY)
 | 
			
		||||
#define mnode_create(k, p, c) ((mnode_t*)libcdsb_rbtree_node_create(k, (rbnode_t*)p, c, sizeof(mnode_t)))
 | 
			
		||||
@ -37,4 +38,6 @@ static_assert(offsetof(struct libcdsb_set, type) == offsetof(struct libcdsb_map,
 | 
			
		||||
#define mnode_is_empty(n) ((n) == mnode_empty)
 | 
			
		||||
#define mnode_is_root(n)  mnode_is_empty((n)->parent)
 | 
			
		||||
 | 
			
		||||
#define mnode_free libcdsb_mnode_free
 | 
			
		||||
 | 
			
		||||
#endif /* LIBCDSB_SRC_MAP_INCLUDE_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										206
									
								
								src/rbtree-extra.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										206
									
								
								src/rbtree-extra.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,206 @@
 | 
			
		||||
/* This software is licensed by the MIT License, see LICENSE file */
 | 
			
		||||
/*                                Copyright © 2022 Gregory Lirent */
 | 
			
		||||
 | 
			
		||||
#include "__internal/rbtree.h"
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
static rbnode_t* rbnode_duplicate(const rbnode_t* s, rbnode_t* p, const vtype* info) {
 | 
			
		||||
    return rbnode_create(vnode_duplicate(&s->value, (info) ? *info : VTYPE_POINTER), p, s->colored);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int rbnode_compare(const rbnode_t* s0, const rbnode_t* s1, vtype* tp) {
 | 
			
		||||
    vtype t = !is_null(tp) ? *tp : VTYPE_POINTER;
 | 
			
		||||
    return vnode_compare(s0->value, t, s1->value, t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static hash_t rbnode_hash(const rbnode_t* s, vtype* tp) {
 | 
			
		||||
    vtype t = (!is_null(tp)) ? *tp : VTYPE_POINTER;
 | 
			
		||||
    return vnode_hash(s->value, t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void rbnode_free(rbnode_t* x, vtype *t) {
 | 
			
		||||
    if (!is_null(t)) vnode_free(&x->value, *t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
hash_t libcdsb_rbtree_hash(const void* s, hash_t (*node_hash)(const void* s, void* info), void* info) {
 | 
			
		||||
 | 
			
		||||
    rbnode_t *c0, *c1;
 | 
			
		||||
    hash_t hash, v;
 | 
			
		||||
    stack_t z;
 | 
			
		||||
 | 
			
		||||
    if (rbnode_is_empty(s)) return 0;
 | 
			
		||||
    if (is_null(node_hash)) node_hash = (void*)rbnode_hash;
 | 
			
		||||
 | 
			
		||||
    z.prev = 0;
 | 
			
		||||
    hash   = 1;
 | 
			
		||||
    c1     = (void*)s;
 | 
			
		||||
 | 
			
		||||
    if (!rbnode_is_empty(z.value = c1->left)) do {
 | 
			
		||||
        c0 = stack_pop(&z);
 | 
			
		||||
        ++hash;
 | 
			
		||||
        if (!rbnode_is_empty(c0->left))
 | 
			
		||||
            stack_push(&z, c1 = c0->left);
 | 
			
		||||
        if (!rbnode_is_empty(c0->right))
 | 
			
		||||
            stack_push(&z, c0->right);
 | 
			
		||||
    } while (!is_null(z.value));
 | 
			
		||||
 | 
			
		||||
    v  = node_hash(c1, info);
 | 
			
		||||
    c1 = (void*)s;
 | 
			
		||||
 | 
			
		||||
    if (!rbnode_is_empty(z.value = c1->right)) do {
 | 
			
		||||
        c0 = stack_pop(&z);
 | 
			
		||||
        ++hash;
 | 
			
		||||
        if (!rbnode_is_empty(c0->left))
 | 
			
		||||
            stack_push(&z, c1 = c0->left);
 | 
			
		||||
        if (!rbnode_is_empty(c0->right))
 | 
			
		||||
            stack_push(&z, c0->right);
 | 
			
		||||
    } while (!is_null(z.value));
 | 
			
		||||
 | 
			
		||||
    v += node_hash(c1, info);
 | 
			
		||||
 | 
			
		||||
    return hash ^ v;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
void* libcdsb_rbtree_duplicate(const rbnode_t* s, void* (*node_duplicate)(void* src, void* parent, void* info), void* info) {
 | 
			
		||||
    rbnode_t *p0, *p1, *x;
 | 
			
		||||
    stack_t   z;
 | 
			
		||||
 | 
			
		||||
    z.prev = 0;
 | 
			
		||||
    z.value = (void*)s;
 | 
			
		||||
 | 
			
		||||
    if (is_null(node_duplicate)) {
 | 
			
		||||
        node_duplicate = (void*)rbnode_duplicate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!rbnode_is_empty(s)) {
 | 
			
		||||
        x = node_duplicate(z.value, rbnode_empty, info);
 | 
			
		||||
        stack_push(&z, x);
 | 
			
		||||
 | 
			
		||||
        do {
 | 
			
		||||
            p0 = stack_pop(&z);
 | 
			
		||||
            p1 = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
            if (!rbnode_is_empty(p1->left)) {
 | 
			
		||||
                p0->left = node_duplicate(p1->left, p0, info);
 | 
			
		||||
 | 
			
		||||
                stack_push(&z, p1->left);
 | 
			
		||||
                stack_push(&z, p0->left);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!rbnode_is_empty(p1->right)) {
 | 
			
		||||
                p0->right = node_duplicate(p1->right, p0, info);
 | 
			
		||||
 | 
			
		||||
                stack_push(&z, p1->right);
 | 
			
		||||
                stack_push(&z, p0->right);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } while (!is_null(z.value));
 | 
			
		||||
 | 
			
		||||
    } else x = rbnode_empty;
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
int libcdsb_rbtree_compare(const rbnode_t* s0, const rbnode_t* s1, int (*node_compare)(const rbnode_t* s0, const rbnode_t* s1, void* info), void* info) {
 | 
			
		||||
 | 
			
		||||
    rbnode_t *c0, *c1;
 | 
			
		||||
    stack_t z;
 | 
			
		||||
    int c = 0;
 | 
			
		||||
 | 
			
		||||
    if (s0 == s1) return 0;
 | 
			
		||||
    if (is_null(node_compare)) node_compare = (void*)rbnode_compare;
 | 
			
		||||
 | 
			
		||||
    z.prev  = 0;
 | 
			
		||||
    z.value = 0;
 | 
			
		||||
 | 
			
		||||
    stack_push(&z, (void*)s1);
 | 
			
		||||
    stack_push(&z, (void*)s0);
 | 
			
		||||
 | 
			
		||||
    do {
 | 
			
		||||
        c0 = stack_pop(&z);
 | 
			
		||||
        c1 = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
        if (rbnode_is_empty(c0) || rbnode_is_empty(c1)) {
 | 
			
		||||
            if (c0 != c1) {
 | 
			
		||||
                stack_flush(&z);
 | 
			
		||||
                return rbnode_is_empty(c0) ? -1 : 1;
 | 
			
		||||
            }
 | 
			
		||||
        } else if ((c = node_compare(c0, c1, info))) {
 | 
			
		||||
            if (c0->left == c1->right) {  // <-- rbnode_empty
 | 
			
		||||
                c = node_compare(c0->right, c1, info);
 | 
			
		||||
                if (!c) c = node_compare(c0, c1->left, info);
 | 
			
		||||
            } else if (c0->right == c1->left) { // <-- rbnode_empty
 | 
			
		||||
                c = node_compare(c0, c1->right, info);
 | 
			
		||||
                if (!c) c = node_compare(c0->left, c1, info);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (c) {
 | 
			
		||||
                stack_flush(&z);
 | 
			
		||||
                return c;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            stack_push(&z, c1->right);
 | 
			
		||||
            stack_push(&z, c0->right);
 | 
			
		||||
            stack_push(&z, c1->left);
 | 
			
		||||
            stack_push(&z, c0->left);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    } while (!is_null(z.value));
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
size_t libcdsb_rbtree_size(const void* s) {
 | 
			
		||||
    stack_t   z = { .prev = 0, .value = (void*)s };
 | 
			
		||||
    size_t    n = 0;
 | 
			
		||||
    rbnode_t* c;
 | 
			
		||||
 | 
			
		||||
    if (!rbnode_is_empty(s)) {
 | 
			
		||||
        while ((c = stack_pop(&z))) {
 | 
			
		||||
            ++n;
 | 
			
		||||
            if (!rbnode_is_empty(c->left))
 | 
			
		||||
                stack_push(&z, c->left);
 | 
			
		||||
            if (!rbnode_is_empty(c->right))
 | 
			
		||||
                stack_push(&z, c->right);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void libcdsb_rbtree_free(void* x, void (*node_free)(void* x, void* info), void* info) {
 | 
			
		||||
    rbnode_t *t, *c;
 | 
			
		||||
 | 
			
		||||
    c = x;
 | 
			
		||||
    if (is_null(node_free)) node_free = (void*)rbnode_free;
 | 
			
		||||
 | 
			
		||||
    while (!rbnode_is_empty(x)) {
 | 
			
		||||
        if (!rbnode_is_empty(c->left)) {
 | 
			
		||||
            c = c->left;
 | 
			
		||||
        } else if (!rbnode_is_empty(c->right)) {
 | 
			
		||||
            c = c->right;
 | 
			
		||||
        } else if (!rbnode_is_root(c)) {
 | 
			
		||||
            node_free(c, info);
 | 
			
		||||
 | 
			
		||||
            t = c;
 | 
			
		||||
            c = c->parent;
 | 
			
		||||
 | 
			
		||||
            if (t == c->left) c->left  = rbnode_empty;
 | 
			
		||||
            else              c->right = rbnode_empty;
 | 
			
		||||
 | 
			
		||||
            free(t);
 | 
			
		||||
        } else {
 | 
			
		||||
            node_free(c, info);
 | 
			
		||||
            x = rbnode_empty;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										113
									
								
								src/set/base.c
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								src/set/base.c
									
									
									
									
									
								
							@ -4,6 +4,11 @@
 | 
			
		||||
#include "../../include/set.h"
 | 
			
		||||
#include "../__internal/rbtree.h"
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
hash_t vset_hash(const set_t* s) {
 | 
			
		||||
    return rbtree_hash(s->root, nullptr, (void*)&s->type) + VTYPE_SET;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void vset_init(set_t* x, vtype t) {
 | 
			
		||||
    x->root = rbnode_empty;
 | 
			
		||||
@ -12,92 +17,48 @@ void vset_init(set_t* x, vtype t) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void vset_free(set_t* x) {
 | 
			
		||||
    rbnode_t* t;
 | 
			
		||||
    rbnode_t* c;
 | 
			
		||||
 | 
			
		||||
    c = x->root;
 | 
			
		||||
 | 
			
		||||
    while (!rbnode_is_empty(x->root)) {
 | 
			
		||||
        if (!rbnode_is_empty(c->left)) {
 | 
			
		||||
            c = c->left;
 | 
			
		||||
        } else if (!rbnode_is_empty(c->right)) {
 | 
			
		||||
            c = c->right;
 | 
			
		||||
        } else if (!rbnode_is_root(c)) {
 | 
			
		||||
            vnode_free(&c->value, x->type);
 | 
			
		||||
 | 
			
		||||
            t = c;
 | 
			
		||||
            c = c->parent;
 | 
			
		||||
 | 
			
		||||
            if (t == c->left) c->left  = rbnode_empty;
 | 
			
		||||
            else              c->right = rbnode_empty;
 | 
			
		||||
 | 
			
		||||
            free(t);
 | 
			
		||||
        } else {
 | 
			
		||||
            vnode_free(&c->value, x->type);
 | 
			
		||||
            x->root = rbnode_empty;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    rbtree_free(x->root, nullptr, &x->type);
 | 
			
		||||
 | 
			
		||||
    x->root = rbnode_empty;
 | 
			
		||||
    x->type = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
size_t vset_size(const set_t* x) {
 | 
			
		||||
    stack_t   z = { .prev = 0, .value = x->root };
 | 
			
		||||
    size_t    n = 0;
 | 
			
		||||
    rbnode_t* c;
 | 
			
		||||
 | 
			
		||||
    if (!rbnode_is_empty(x->root)) {
 | 
			
		||||
        while ((c = stack_pop(&z))) {
 | 
			
		||||
            ++n;
 | 
			
		||||
            if (!rbnode_is_empty(c->left))
 | 
			
		||||
                stack_push(&z, c->left);
 | 
			
		||||
            if (!rbnode_is_empty(c->right))
 | 
			
		||||
                stack_push(&z, c->right);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return n;
 | 
			
		||||
    return rbtree_size(x->root);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
int vset_compare(const set_t* s0, const set_t* s1) {
 | 
			
		||||
    stack_t z = { .prev = 0, .value = 0 };
 | 
			
		||||
    vtype   t = s0->type;
 | 
			
		||||
    int     c = 0;
 | 
			
		||||
 | 
			
		||||
    if (s0 == s1 || s0->root == s1->root) return 0;
 | 
			
		||||
    if (s0 == s1) return 0;
 | 
			
		||||
    if (s0->type != s1->type) return s0->type - s1->type;
 | 
			
		||||
 | 
			
		||||
    stack_push(&z, s1->root);
 | 
			
		||||
    stack_push(&z, s0->root);
 | 
			
		||||
 | 
			
		||||
    for (rbnode_t *c0, *c1;!is_null(z.value);) {
 | 
			
		||||
        c0 = stack_pop(&z);
 | 
			
		||||
        c1 = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
        if (rbnode_is_empty(c0) || rbnode_is_empty(c1)) {
 | 
			
		||||
            if (c0 != c1) {
 | 
			
		||||
                stack_flush(&z);
 | 
			
		||||
                return rbnode_is_empty(c0) ? -1 : 1;
 | 
			
		||||
            }
 | 
			
		||||
        } else if ((c = vnode_compare(c0->value, t, c1->value, t))) {
 | 
			
		||||
            if (c0->left == c1->right) {
 | 
			
		||||
                c = vnode_compare(c1->value, t, c0->right->value, t);
 | 
			
		||||
                if (!c) c = vnode_compare(c1->left->value, t, c0->value, t);
 | 
			
		||||
            } else if (c0->right == c1->left) {
 | 
			
		||||
                c = vnode_compare(c0->value, t, c1->right->value, t);
 | 
			
		||||
                if (!c) c = vnode_compare(c0->left->value, t, c1->value, t);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (c) { stack_flush(&z); return c; }
 | 
			
		||||
        } else {
 | 
			
		||||
            stack_push(&z, c1->right);
 | 
			
		||||
            stack_push(&z, c0->right);
 | 
			
		||||
            stack_push(&z, c1->left);
 | 
			
		||||
            stack_push(&z, c0->left);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
    return rbtree_compare(s0->root, s1->root, nullptr, (void*)&s0->type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
set_t vset_copy(const set_t* s) {
 | 
			
		||||
    set_t x;
 | 
			
		||||
 | 
			
		||||
    x.type = s->type;
 | 
			
		||||
    x.root = rbtree_duplicate(s->root, nullptr, &x.type);
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
set_t* vset_duplicate(const set_t* s) {
 | 
			
		||||
    set_t *x = malloc(sizeof(*x));
 | 
			
		||||
 | 
			
		||||
    x->type = s->type;
 | 
			
		||||
    x->root = rbtree_duplicate(s->root, nullptr, &x->type);
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void vset_copy_init(set_t* x, const set_t* s) {
 | 
			
		||||
    x->type = s->type;
 | 
			
		||||
    x->root = rbtree_duplicate(s->root, nullptr, &x->type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										103
									
								
								src/set/copy.c
									
									
									
									
									
								
							
							
						
						
									
										103
									
								
								src/set/copy.c
									
									
									
									
									
								
							@ -1,103 +0,0 @@
 | 
			
		||||
/* This software is licensed by the MIT License, see LICENSE file */
 | 
			
		||||
/*                                Copyright © 2022 Gregory Lirent */
 | 
			
		||||
 | 
			
		||||
#include "../../include/set.h"
 | 
			
		||||
#include "../__internal/rbtree.h"
 | 
			
		||||
 | 
			
		||||
set_t vset_copy(const set_t* s) {
 | 
			
		||||
 | 
			
		||||
    set_t   x = { .type = s->type };
 | 
			
		||||
    stack_t z = { .prev = 0, .value = s->root };
 | 
			
		||||
    vtype   t = s->type;
 | 
			
		||||
 | 
			
		||||
    if (!rbnode_is_empty(s->root)) {
 | 
			
		||||
        x.root = rbnode_create(vnode_duplicate(&s->root->value, t), rbnode_empty, 0);
 | 
			
		||||
        stack_push(&z, x.root);
 | 
			
		||||
 | 
			
		||||
        do {
 | 
			
		||||
            rbnode_t *p0 = stack_pop(&z);
 | 
			
		||||
            rbnode_t *p1 = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
            if (!rbnode_is_empty(p1->left)) {
 | 
			
		||||
                p0->left = rbnode_create(vnode_duplicate(&p1->left->value, t), p0, p1->left->colored);
 | 
			
		||||
                stack_push(&z, p1->left);
 | 
			
		||||
                stack_push(&z, p0->left);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!rbnode_is_empty(p1->right)) {
 | 
			
		||||
                p0->right = rbnode_create(vnode_duplicate(&p1->right->value, t), p0, p1->right->colored);
 | 
			
		||||
                stack_push(&z, p1->right);
 | 
			
		||||
                stack_push(&z, p0->right);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } while (!is_null(z.value));
 | 
			
		||||
 | 
			
		||||
    } else x.root = rbnode_empty;
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
set_t* vset_duplicate(const set_t* s) {
 | 
			
		||||
 | 
			
		||||
    set_t*  x = malloc(sizeof(*x));
 | 
			
		||||
    stack_t z = { .prev = 0, .value = s->root };
 | 
			
		||||
    vtype   t = x->type = s->type;
 | 
			
		||||
 | 
			
		||||
    if (!rbnode_is_empty(s->root)) {
 | 
			
		||||
        x->root = rbnode_create(vnode_duplicate(&s->root->value, t), rbnode_empty, 0);
 | 
			
		||||
        stack_push(&z, x->root);
 | 
			
		||||
 | 
			
		||||
        do {
 | 
			
		||||
            rbnode_t *p0 = stack_pop(&z);
 | 
			
		||||
            rbnode_t *p1 = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
            if (!rbnode_is_empty(p1->left)) {
 | 
			
		||||
                p0->left = rbnode_create(vnode_duplicate(&p1->left->value, t), p0, p1->left->colored);
 | 
			
		||||
                stack_push(&z, p1->left);
 | 
			
		||||
                stack_push(&z, p0->left);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!rbnode_is_empty(p1->right)) {
 | 
			
		||||
                p0->right = rbnode_create(vnode_duplicate(&p1->right->value, t), p0, p1->right->colored);
 | 
			
		||||
                stack_push(&z, p1->right);
 | 
			
		||||
                stack_push(&z, p0->right);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } while (!is_null(z.value));
 | 
			
		||||
 | 
			
		||||
    } else x->root = rbnode_empty;
 | 
			
		||||
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void vset_copy_init(set_t* x, const set_t* s) {
 | 
			
		||||
 | 
			
		||||
    stack_t z = { .prev = 0, .value = s->root };
 | 
			
		||||
    vtype   t = x->type = s->type;
 | 
			
		||||
 | 
			
		||||
    if (!rbnode_is_empty(s->root)) {
 | 
			
		||||
        x->root = rbnode_create(vnode_duplicate(&s->root->value, t), rbnode_empty, 0);
 | 
			
		||||
        stack_push(&z, x->root);
 | 
			
		||||
 | 
			
		||||
        do {
 | 
			
		||||
            rbnode_t *p0 = stack_pop(&z);
 | 
			
		||||
            rbnode_t *p1 = stack_pop(&z);
 | 
			
		||||
 | 
			
		||||
            if (!rbnode_is_empty(p1->left)) {
 | 
			
		||||
                p0->left = rbnode_create(vnode_duplicate(&p1->left->value, t), p0, p1->left->colored);
 | 
			
		||||
                stack_push(&z, p1->left);
 | 
			
		||||
                stack_push(&z, p0->left);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!rbnode_is_empty(p1->right)) {
 | 
			
		||||
                p0->right = rbnode_create(vnode_duplicate(&p1->right->value, t), p0, p1->right->colored);
 | 
			
		||||
                stack_push(&z, p1->right);
 | 
			
		||||
                stack_push(&z, p0->right);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } while (!is_null(z.value));
 | 
			
		||||
 | 
			
		||||
    } else x->root = rbnode_empty;
 | 
			
		||||
}
 | 
			
		||||
@ -4,13 +4,14 @@
 | 
			
		||||
#include "../../include/extra/set.h"
 | 
			
		||||
#include "../__internal/include.h"
 | 
			
		||||
 | 
			
		||||
int libcdsb_vset_find_pointer(set_t* x,   const void* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x, &v, vtypeof(&v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_cstring(set_t* x,   const char* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x, &v, vtypeof(&v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_string (set_t* x,  const str_t* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x,  v, vtypeof( v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_array  (set_t* x,  const arr_t* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x,  v, vtypeof( v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_pointer(set_t* x, const   void* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x, &v, vtypeof(&v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_cstring(set_t* x, const   char* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x, &v, vtypeof(&v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_string (set_t* x, const  str_t* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x,  v, vtypeof( v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_array  (set_t* x, const  arr_t* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x,  v, vtypeof( v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_list   (set_t* x, const list_t* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x,  v, vtypeof( v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_map    (set_t* x,  const map_t* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x,  v, vtypeof( v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_vset   (set_t* x,  const set_t* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x,  v, vtypeof( v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_map    (set_t* x, const  map_t* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x,  v, vtypeof( v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_vset   (set_t* x, const  set_t* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x,  v, vtypeof( v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_dict   (set_t* x, const dict_t* v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x,  v, vtypeof( v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_boolean(set_t* x,          bool v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x, &v, vtypeof(&v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_int8   (set_t* x,          s8_t v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x, &v, vtypeof(&v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_int16  (set_t* x,         s16_t v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x, &v, vtypeof(&v), _, cb, cut); }
 | 
			
		||||
@ -24,13 +25,14 @@ int libcdsb_vset_find_float  (set_t* x,          fl_t v, void* _, vset_access_ca
 | 
			
		||||
int libcdsb_vset_find_double (set_t* x,         dbl_t v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x, &v, vtypeof(&v), _, cb, cut); }
 | 
			
		||||
int libcdsb_vset_find_ldouble(set_t* x,        ldbl_t v, void* _, vset_access_callback cb, bool cut) { return libcdsb_vset_find(x, &v, vtypeof(&v), _, cb, cut); }
 | 
			
		||||
 | 
			
		||||
bool libcdsb_vset_push_pointer(set_t* x,   const void* v) { return libcdsb_vset_insert(x, &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_vset_push_cstring(set_t* x,   const char* v) { return libcdsb_vset_insert(x, &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_vset_push_string (set_t* x,  const str_t* v) { return libcdsb_vset_insert(x,  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_vset_push_array  (set_t* x,  const arr_t* v) { return libcdsb_vset_insert(x,  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_vset_push_pointer(set_t* x, const   void* v) { return libcdsb_vset_insert(x, &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_vset_push_cstring(set_t* x, const   char* v) { return libcdsb_vset_insert(x, &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_vset_push_string (set_t* x, const  str_t* v) { return libcdsb_vset_insert(x,  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_vset_push_array  (set_t* x, const  arr_t* v) { return libcdsb_vset_insert(x,  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_vset_push_list   (set_t* x, const list_t* v) { return libcdsb_vset_insert(x,  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_vset_push_map    (set_t* x,  const map_t* v) { return libcdsb_vset_insert(x,  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_vset_push_vset   (set_t* x,  const set_t* v) { return libcdsb_vset_insert(x,  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_vset_push_map    (set_t* x, const  map_t* v) { return libcdsb_vset_insert(x,  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_vset_push_vset   (set_t* x, const  set_t* v) { return libcdsb_vset_insert(x,  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_vset_push_dict   (set_t* x, const dict_t* v) { return libcdsb_vset_insert(x,  v, vtypeof( v)); }
 | 
			
		||||
bool libcdsb_vset_push_boolean(set_t* x,          bool v) { return libcdsb_vset_insert(x, &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_vset_push_int8   (set_t* x,          s8_t v) { return libcdsb_vset_insert(x, &v, vtypeof(&v)); }
 | 
			
		||||
bool libcdsb_vset_push_int16  (set_t* x,         s16_t v) { return libcdsb_vset_insert(x, &v, vtypeof(&v)); }
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,22 @@
 | 
			
		||||
 | 
			
		||||
#include "include.h"
 | 
			
		||||
 | 
			
		||||
hash_t string_hash(const str_t* s) {
 | 
			
		||||
    hash_t hash  = 0;
 | 
			
		||||
    size_t nmemb = string_nmemb(s);
 | 
			
		||||
 | 
			
		||||
    if (nmemb > 0)
 | 
			
		||||
        hash = s->buffer[0];
 | 
			
		||||
 | 
			
		||||
    if (nmemb > 1)
 | 
			
		||||
        hash += s->buffer[nmemb-1];
 | 
			
		||||
 | 
			
		||||
    hash ^= nmemb;
 | 
			
		||||
 | 
			
		||||
    return hash + VTYPE_STRING;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
size_t string_nmemb(const str_t* s) {
 | 
			
		||||
    return (!is_null(s->buffer)) ? strlen(s->buffer) : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -226,6 +226,7 @@ void* libcdsb_vnode_peek(const vnode_t* x, vtype t) {
 | 
			
		||||
        case   VTYPE_ARRAY:
 | 
			
		||||
        case    VTYPE_LIST:
 | 
			
		||||
        case     VTYPE_SET:
 | 
			
		||||
        case    VTYPE_DICT:
 | 
			
		||||
                       pt_: return *x;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -260,7 +261,8 @@ void libcdsb_vnode_free(vnode_t* x, vtype t) {
 | 
			
		||||
        case     VTYPE_MAP:    map_free(*x); goto pt_;
 | 
			
		||||
        case   VTYPE_ARRAY:  array_free(*x); goto pt_;
 | 
			
		||||
        case    VTYPE_LIST:   list_free(*x); goto pt_;
 | 
			
		||||
        case     VTYPE_SET:   vset_free(*x);
 | 
			
		||||
        case     VTYPE_SET:   vset_free(*x); goto pt_;
 | 
			
		||||
        case    VTYPE_DICT:   dict_free(*x);
 | 
			
		||||
                       pt_:        free(*x);
 | 
			
		||||
                     break;
 | 
			
		||||
    }
 | 
			
		||||
@ -304,6 +306,9 @@ vnode_t libcdsb_vnode_create_target(vtype xt, const void* v, vtype t) {
 | 
			
		||||
 | 
			
		||||
        case     VTYPE_SET: _.ptr = vset_duplicate(v);
 | 
			
		||||
                     break;
 | 
			
		||||
 | 
			
		||||
        case    VTYPE_DICT: _.ptr = dict_duplicate(v);
 | 
			
		||||
                     break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return _.ptr;
 | 
			
		||||
 | 
			
		||||
@ -59,6 +59,7 @@ const char* libcdsb_vtype_name(vtype t) {
 | 
			
		||||
        case   VTYPE_ARRAY: return   "VTYPE_ARRAY";
 | 
			
		||||
        case    VTYPE_LIST: return    "VTYPE_LIST";
 | 
			
		||||
        case     VTYPE_SET: return     "VTYPE_SET";
 | 
			
		||||
        case    VTYPE_DICT: return    "VTYPE_DICT";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										50
									
								
								src/vtype.c
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								src/vtype.c
									
									
									
									
									
								
							@ -30,6 +30,17 @@ static ldbl_t normalize_value(const void* v, vtype t) {
 | 
			
		||||
    } else return abs(*(ldbl_t*)v) <= LDBL_EPSILON ? 0 : *(ldbl_t*)v;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static hash_t ldouble_hash(ldbl_t s) {
 | 
			
		||||
    hash_t x, y;
 | 
			
		||||
    ldbl_t m;
 | 
			
		||||
 | 
			
		||||
    m = modfl(s, &s);
 | 
			
		||||
    x = llrintl(s);
 | 
			
		||||
    y = floorl(m * 10000);
 | 
			
		||||
 | 
			
		||||
    return x ^ y;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
int libcdsb_vtype_compare_values(const void* s0, vtype t0, const void* s1, vtype t1) {
 | 
			
		||||
@ -66,9 +77,9 @@ int libcdsb_vtype_compare_values_eq(const void* s0, const void* s1, vtype t) {
 | 
			
		||||
        case   VTYPE_UINT8: return compare( u8_t, s0, s1);
 | 
			
		||||
        case  VTYPE_UINT16: return compare(u16_t, s0, s1);
 | 
			
		||||
        case  VTYPE_UINT32:
 | 
			
		||||
                      u32_: return compare(u32_t, s0, s1);
 | 
			
		||||
                   x86_ptr: return compare(u32_t, s0, s1);
 | 
			
		||||
 | 
			
		||||
        case VTYPE_POINTER: if (sizeof(void*) != 8) goto u32_;
 | 
			
		||||
        case VTYPE_POINTER: if (!is_x64) goto x86_ptr;
 | 
			
		||||
        case  VTYPE_UINT64: return compare(u64_t, s0, s1);
 | 
			
		||||
 | 
			
		||||
        case VTYPE_LDOUBLE: return (abs(*(ldbl_t*)s0 - *(ldbl_t*)s1) <= LDBL_EPSILON) ? 0 : (*(ldbl_t*)s0 < *(ldbl_t*)s1 ? -1 : 1);
 | 
			
		||||
@ -80,7 +91,42 @@ int libcdsb_vtype_compare_values_eq(const void* s0, const void* s1, vtype t) {
 | 
			
		||||
        case    VTYPE_LIST: return   list_compare(s0, s1);
 | 
			
		||||
        case     VTYPE_MAP: return    map_compare(s0, s1);
 | 
			
		||||
        case     VTYPE_SET: return   vset_compare(s0, s1);
 | 
			
		||||
        case    VTYPE_DICT: return   dict_compare(s0, s1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #undef compare
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*#####################################################################################################################*/
 | 
			
		||||
 | 
			
		||||
hash_t libcdsb_vtype_hash(void* v, vtype t) {
 | 
			
		||||
 | 
			
		||||
    switch (t) { default: abort();
 | 
			
		||||
 | 
			
		||||
        case VTYPE_BOOLEAN:
 | 
			
		||||
        case    VTYPE_INT8:
 | 
			
		||||
        case   VTYPE_UINT8: return (hash_t)(*(u8_t*)v);
 | 
			
		||||
 | 
			
		||||
        case   VTYPE_INT16:
 | 
			
		||||
        case  VTYPE_UINT16: return (hash_t)(*(u16_t*)v);
 | 
			
		||||
 | 
			
		||||
        case   VTYPE_INT32:
 | 
			
		||||
        case  VTYPE_UINT32:
 | 
			
		||||
                   x86_ptr: return (hash_t)(*(u32_t*)v);
 | 
			
		||||
 | 
			
		||||
        case VTYPE_POINTER: if (!is_x64) goto x86_ptr;
 | 
			
		||||
        case   VTYPE_INT64:
 | 
			
		||||
        case  VTYPE_UINT64: return (hash_t)(*(u64_t*)v);
 | 
			
		||||
 | 
			
		||||
        case  VTYPE_STRING: return string_hash(v);
 | 
			
		||||
        case   VTYPE_ARRAY: return array_hash(v);
 | 
			
		||||
        case    VTYPE_LIST: return list_hash(v);
 | 
			
		||||
        case     VTYPE_MAP: return map_hash(v);
 | 
			
		||||
        case     VTYPE_SET: return vset_hash(v);
 | 
			
		||||
        case    VTYPE_DICT: return dict_hash(v);
 | 
			
		||||
 | 
			
		||||
        case   VTYPE_FLOAT: return ldouble_hash(*(fl_t*)v);
 | 
			
		||||
        case  VTYPE_DOUBLE: return ldouble_hash(*(dbl_t*)v);
 | 
			
		||||
        case VTYPE_LDOUBLE: return ldouble_hash(*(ldbl_t*)v);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user