226 if(convfn[dest->
type_id] != NULL) {
230 retval = convfn[dest->
type_id](dest, src);
274 if(current_lit != NULL) {
289 if(current_lit != NULL) {
303 if((current_lit == NULL) && (retval != 0)) {
310 const char*
const key,
313 int64_t index = strtoll(key, &endptr, 0);
323 const char*
const key,
326 int64_t index = strtoll(key, &endptr, 0);
347 when_false((ret == 0) && (*result == 0), exit);
365 .convert_from = NULL,
373 .hit = { .ait = NULL, .key = NULL, .next = NULL },
#define when_failed(x, l)
#define when_null_status(x, l, c)
Ambiorix string API header file.
#define cstring_t
Convenience macro.
#define amxc_var_from_llist_it(ll_it)
Get the variant pointer from an amxc linked list iterator.
int PRIVATE amxc_var_default_convert_to_null(amxc_var_t *const dest, const amxc_var_t *const src)
uint32_t PRIVATE amxc_var_add_type(amxc_var_type_t *const type, const uint32_t index)
int PRIVATE amxc_var_remove_type(amxc_var_type_t *const type)
int amxc_htable_insert(amxc_htable_t *const htable, const char *const key, amxc_htable_it_t *const it)
Inserts an item in the hash table.
int amxc_llist_it_insert_before(amxc_llist_it_t *const reference, amxc_llist_it_t *const it)
Inserts an iterator before a reference interator in the list.
AMXC_INLINE amxc_llist_it_t * amxc_llist_it_get_next(const amxc_llist_it_t *const reference)
Gets the next iterator in the list.
void amxc_llist_it_clean(amxc_llist_it_t *const it, amxc_llist_it_delete_t func)
Removes the iterator from the list and frees allocated memory.
#define amxc_llist_it_get_data(it, type, member)
Gets the data pointer from a linked list iterator.
int amxc_llist_move(amxc_llist_t *const dest, amxc_llist_t *const src)
Moves all items from one linked list to another linked list.
size_t amxc_llist_size(const amxc_llist_t *const llist)
Calculates the size of the linked list.
int amxc_llist_new(amxc_llist_t **llist)
Allocates a linked list.
int amxc_llist_append(amxc_llist_t *const llist, amxc_llist_it_t *const it)
Adds an item to the end of the linked list.
#define amxc_llist_iterate(it, list)
Loops over the list from head to tail.
int amxc_llist_init(amxc_llist_t *const llist)
Initializes a linked list.
bool amxc_llist_is_empty(const amxc_llist_t *const llist)
Checks that the linked list is empty.
amxc_llist_it_t * amxc_llist_get_at(const amxc_llist_t *const llist, const unsigned int index)
Gets an item at a certain position of the linked list.
void amxc_llist_clean(amxc_llist_t *const llist, amxc_llist_it_delete_t func)
Removes all items from the linked list.
AMXC_INLINE amxc_llist_it_t * amxc_llist_take_first(amxc_llist_t *const llist)
Removes the first item from the linked list.
#define amxc_llist_for_each(it, list)
Loops over the list from head to tail.
AMXC_INLINE amxc_llist_it_t * amxc_llist_get_first(const amxc_llist_t *const llist)
Gets the first item of the linked list.
int amxc_string_csv_join_var(amxc_string_t *string, const amxc_var_t *const var)
Joins a variant containing a list of variants into a single string using ',' as separator.
int amxc_string_ssv_join_var(amxc_string_t *string, const amxc_var_t *const var)
Joins a variant containing a list of variants into a single string using ' ' as separator.
int amxc_string_init(amxc_string_t *const string, const size_t length)
Initializes a string.
void amxc_string_clean(amxc_string_t *const string)
Frees the string buffer and reset length attributes.
char * amxc_string_take_buffer(amxc_string_t *const string)
Takes the string buffer.
#define AMXC_VAR_FLAG_COPY
Copy the variant, creates a new variant, leaves the source variant untouched.
#define AMXC_VAR_FLAG_UPDATE
Replaces the value of the variant, leaves the source variant untouched.
const amxc_llist_t * amxc_var_get_const_amxc_llist_t(const amxc_var_t *const var)
Conversion helper function.
void variant_list_it_free(amxc_llist_it_t *it)
Helper functions, can be used as delete function for linked lists.
amxc_llist_t * amxc_var_get_amxc_llist_t(const amxc_var_t *const var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_amxc_llist_t(amxc_var_t *const var, const amxc_llist_t *list)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_amxc_llist_t(amxc_var_t *const var, const char *key, const amxc_llist_t *list)
Conversion helper function.
#define AMXC_VAR_ID_CUSTOM_BASE
Base variant id for custom variants.
#define AMXC_VAR_NAME_LIST
Provides a name for variant id AMXC_VAR_ID_LIST.
#define AMXC_VAR_ID_UINT64
Unsigned 64 bit integer variant id.
#define AMXC_VAR_ID_ANY
Special variant id, typically used in cast or conversion functions.
#define AMXC_VAR_ID_LIST
Ambiorix Linked List variant id.
int(* amxc_var_convert_fn_t)(amxc_var_t *const dest, const amxc_var_t *const src)
Variant type callback function prototype for dynamically converting one type to another.
int amxc_var_set_type(amxc_var_t *const var, const uint32_t type)
Change the variant data type.
#define amxc_var_dyncast(type, var)
Dynamic cast a variant to a certain type.
int amxc_var_new(amxc_var_t **var)
Allocates a variant and initializes it to the null variant type.
int amxc_var_init(amxc_var_t *const var)
Initializes a variant.
amxc_var_t * amxc_var_add_new(amxc_var_t *const var)
Adds a new variant to a composite variant.
int amxc_var_copy(amxc_var_t *const dest, const amxc_var_t *const src)
Copy the type and data from one variant (source) in another variant (destination).
void amxc_var_clean(amxc_var_t *const var)
Clean-up and reset variant.
void amxc_var_delete(amxc_var_t **var)
Frees the previously allocated variant.
amxc_var_t * amxc_var_add_new_key(amxc_var_t *const var, const char *key)
Adds a new variant with a key to a composite variant.
int amxc_var_convert(amxc_var_t *const dest, const amxc_var_t *src, const uint32_t type_id)
Converts one variant (source) to another variant(destination) using the specified variant type id.
int amxc_var_compare(const amxc_var_t *const var1, const amxc_var_t *const var2, int *const result)
Compares two variants.
#define amxc_var_constcast(type, var)
Takes the content from a variant.
The linked list iterator structure.
The linked list structure.
A variant type structure.
The variant struct definition.
static amxc_htable_it_t it[2000]
static amxc_llist_t * llist
static int variant_list_init(amxc_var_t *const var)
static int variant_list_copy(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_list_compare(const amxc_var_t *const lval, const amxc_var_t *const rval, int *const result)
static DESTRUCTOR void amxc_var_list_cleanup(void)
static int variant_list_set_key(amxc_var_t *const dest, amxc_var_t *const src, const char *const key, int flags)
static amxc_var_t * variant_list_get_key(const amxc_var_t *const src, const char *const key, int flags)
static int variant_list_convert_to(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_list_to_ssv_string(amxc_var_t *const dest, const amxc_var_t *const src)
static amxc_var_t * variant_list_get_index(const amxc_var_t *const src, const int64_t index, int flags)
static int variant_list_to_csv_string(amxc_var_t *const dest, const amxc_var_t *const src)
static void variant_list_delete(amxc_var_t *var)
static int variant_list_move(amxc_var_t *const dest, amxc_var_t *const src)
static int variant_list_to_htable(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_list_to_bool(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_list_copy_list(amxc_var_t *const dest, const amxc_llist_t *source_list)
static CONSTRUCTOR void amxc_var_list_init(void)
static int variant_list_to_number(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_list_set_index(amxc_var_t *const dest, amxc_var_t *const src, const int64_t index, int flags)
static amxc_var_type_t amxc_variant_list