libamxc  1.10.3
C Generic Data Containers
amxc_variant.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** SPDX-License-Identifier: BSD-2-Clause-Patent
4 **
5 ** SPDX-FileCopyrightText: Copyright (c) 2023 SoftAtHome
6 **
7 ** Redistribution and use in source and binary forms, with or without modification,
8 ** are permitted provided that the following conditions are met:
9 **
10 ** 1. Redistributions of source code must retain the above copyright notice,
11 ** this list of conditions and the following disclaimer.
12 **
13 ** 2. Redistributions in binary form must reproduce the above copyright notice,
14 ** this list of conditions and the following disclaimer in the documentation
15 ** and/or other materials provided with the distribution.
16 **
17 ** Subject to the terms and conditions of this license, each copyright holder
18 ** and contributor hereby grants to those receiving rights under this license
19 ** a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
20 ** (except for failure to satisfy the conditions of this license) patent license
21 ** to make, have made, use, offer to sell, sell, import, and otherwise transfer
22 ** this software, where such license applies only to those patent claims, already
23 ** acquired or hereafter acquired, licensable by such copyright holder or contributor
24 ** that are necessarily infringed by:
25 **
26 ** (a) their Contribution(s) (the licensed copyrights of copyright holders and
27 ** non-copyrightable additions of contributors, in source or binary form) alone;
28 ** or
29 **
30 ** (b) combination of their Contribution(s) with the work of authorship to which
31 ** such Contribution(s) was added by such copyright holder or contributor, if,
32 ** at the time the Contribution is added, such addition causes such combination
33 ** to be necessarily infringed. The patent license shall not apply to any other
34 ** combinations which include the Contribution.
35 **
36 ** Except as expressly stated above, no rights or licenses from any copyright
37 ** holder or contributor is granted under this license, whether expressly, by
38 ** implication, estoppel or otherwise.
39 **
40 ** DISCLAIMER
41 **
42 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
43 ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44 ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
45 ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
46 ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
47 ** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
48 ** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
49 ** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
50 ** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
51 ** USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
52 **
53 ****************************************************************************/
54 
55 #if !defined(__AMXC_VARIANT_H__)
56 #define __AMXC_VARIANT_H__
57 
58 #ifdef __cplusplus
59 extern "C"
60 {
61 #endif
62 
63 #include <inttypes.h>
64 #include <stdio.h>
65 #include <stdlib.h>
66 
67 #include <amxc/amxc_htable.h>
68 #include <amxc/amxc_llist.h>
69 #include <amxc/amxc_string.h>
70 #include <amxc/amxc_timestamp.h>
71 #include <amxc/amxc_common.h>
72 
122 #define AMXC_VAR_ID_INVALID UINT32_MAX
128 #define AMXC_VAR_ID_NULL 0
134 #define AMXC_VAR_ID_CSTRING 1
140 #define AMXC_VAR_ID_INT8 2
146 #define AMXC_VAR_ID_INT16 3
152 #define AMXC_VAR_ID_INT32 4
158 #define AMXC_VAR_ID_INT64 5
164 #define AMXC_VAR_ID_UINT8 6
170 #define AMXC_VAR_ID_UINT16 7
176 #define AMXC_VAR_ID_UINT32 8
182 #define AMXC_VAR_ID_UINT64 9
188 #define AMXC_VAR_ID_FLOAT 10
194 #define AMXC_VAR_ID_DOUBLE 11
200 #define AMXC_VAR_ID_BOOL 12
206 #define AMXC_VAR_ID_LIST 13
212 #define AMXC_VAR_ID_HTABLE 14
218 #define AMXC_VAR_ID_FD 15
224 #define AMXC_VAR_ID_TIMESTAMP 16
230 #define AMXC_VAR_ID_CSV_STRING 17
236 #define AMXC_VAR_ID_SSV_STRING 18
247 #define AMXC_VAR_ID_ANY 19
257 #define AMXC_VAR_ID_CUSTOM_BASE 20
263 #define AMXC_VAR_ID_MAX UINT32_MAX
264 
270 #define AMXC_VAR_NAME_NULL "null"
276 #define AMXC_VAR_NAME_CSTRING "cstring_t"
282 #define AMXC_VAR_NAME_INT8 "int8_t"
288 #define AMXC_VAR_NAME_INT16 "int16_t"
294 #define AMXC_VAR_NAME_INT32 "int32_t"
300 #define AMXC_VAR_NAME_INT64 "int64_t"
306 #define AMXC_VAR_NAME_UINT8 "uint8_t"
312 #define AMXC_VAR_NAME_UINT16 "uint16_t"
318 #define AMXC_VAR_NAME_UINT32 "uint32_t"
324 #define AMXC_VAR_NAME_UINT64 "uint64_t"
330 #define AMXC_VAR_NAME_FLOAT "float"
336 #define AMXC_VAR_NAME_DOUBLE "double"
342 #define AMXC_VAR_NAME_BOOL "bool"
348 #define AMXC_VAR_NAME_LIST "amxc_llist_t"
354 #define AMXC_VAR_NAME_HTABLE "amxc_htable_t"
360 #define AMXC_VAR_NAME_FD "fd_t"
366 #define AMXC_VAR_NAME_TIMESTAMP "amxc_ts_t"
372 #define AMXC_VAR_NAME_CSV_STRING "csv_string_t"
378 #define AMXC_VAR_NAME_SSV_STRING "ssv_string_t"
392 #define AMXC_VAR_FLAG_DEFAULT 0x00
398 #define AMXC_VAR_FLAG_COPY 0x01
404 #define AMXC_VAR_FLAG_UPDATE 0x02
411 #define AMXC_VAR_FLAG_NO_INDEX 0x04
418 #define AMXC_VAR_FLAG_AUTO_ADD 0x08
419 
436 #define GET_ARG(a, n) amxc_var_get_key(a, n, AMXC_VAR_FLAG_DEFAULT)
446 #define GET_BOOL(a, n) amxc_var_dyncast(bool, n == NULL ? a : GET_ARG(a, n))
456 #define GET_CHAR(a, n) amxc_var_constcast(cstring_t, n == NULL ? a : GET_ARG(a, n))
466 #define GET_UINT32(a, n) amxc_var_dyncast(uint32_t, n == NULL ? a : GET_ARG(a, n))
476 #define GET_INT32(a, n) amxc_var_dyncast(int32_t, n == NULL ? a : GET_ARG(a, n))
477 
487 #define GETI_ARG(a, i) amxc_var_get_index(a, i, AMXC_VAR_FLAG_DEFAULT)
497 #define GETI_BOOL(a, i) amxc_var_dyncast(bool, GETI_ARG(a, i))
507 #define GETI_CHAR(a, i) amxc_var_constcast(cstring_t, GETI_ARG(a, i))
517 #define GETI_UINT32(a, i) amxc_var_dyncast(uint32_t, GETI_ARG(a, i))
527 #define GETI_INT32(a, i) amxc_var_dyncast(int32_t, GETI_ARG(a, i))
528 
538 #define GETP_ARG(a, p) amxc_var_get_path(a, p, AMXC_VAR_FLAG_DEFAULT)
548 #define GETP_BOOL(a, p) amxc_var_dyncast(bool, p == NULL ? a : GETP_ARG(a, p))
558 #define GETP_CHAR(a, p) amxc_var_constcast(cstring_t, p == NULL ? a : GETP_ARG(a, p))
568 #define GETP_UINT32(a, p) amxc_var_dyncast(uint32_t, p == NULL ? a : GETP_ARG(a, p))
578 #define GETP_INT32(a, p) amxc_var_dyncast(int32_t, p == NULL ? a : GETP_ARG(a, p))
579 
584 #define cstring_t char*
589 #define csv_string_t char*
594 #define ssv_string_t char*
595 
600 #define fd_t int
601 
609 #define amxc_var_set(type, var, data) amxc_var_set_ ## type(var, data)
610 
618 #define amxc_var_add(type, var, data) amxc_var_add_new_ ## type(var, data)
619 
627 #define amxc_var_add_key(type, var, key, data) amxc_var_add_new_key_ ## type(var, key, data)
628 
678 #define amxc_var_dyncast(type, var) amxc_var_get_ ## type(var)
679 
722 #define amxc_var_constcast(type, var) amxc_var_get_const_ ## type(var)
723 
757 #define amxc_var_take(type, var) amxc_var_take_ ## type(var)
758 
780 #define amxc_var_push(type, var, val) amxc_var_push_ ## type(var, val)
781 
790 #define amxc_var_from_htable_it(ht_it) \
791  ((amxc_var_t*) (((char*) ht_it) - offsetof(amxc_var_t, hit)))
792 
799 #define amxc_var_from_llist_it(ll_it) \
800  ((amxc_var_t*) (((char*) ll_it) - offsetof(amxc_var_t, lit)))
801 
819 #define amxc_var_for_each(var, var_list) \
820  for(amxc_var_t* var = amxc_var_get_first(var_list), \
821  * var ## _next = amxc_var_get_next(var); \
822  var; \
823  var = var ## _next, \
824  var ## _next = amxc_var_get_next(var))
825 
843 #define amxc_var_for_each_reverse(var, var_list) \
844  for(amxc_var_t* var = amxc_var_get_last(var_list), \
845  * var ## _prev = amxc_var_get_previous(var); \
846  var; \
847  var = var ## _prev, \
848  var ## _prev = amxc_var_get_previous(var))
849 
850 
861 typedef struct _amxc_var {
864  uint32_t type_id;
865  union
866  {
867  char* s;
868  int8_t i8;
869  int16_t i16;
870  int32_t i32;
871  int64_t i64;
872  uint8_t ui8;
873  uint16_t ui16;
874  uint32_t ui32;
875  uint64_t ui64;
876  float f;
877  double d;
878  bool b;
881  int fd;
883  void* data;
884  } data;
886 
904 
920 
944 int amxc_var_init(amxc_var_t* const var);
945 
956 void amxc_var_clean(amxc_var_t* const var);
957 
972 int amxc_var_set_type(amxc_var_t* const var, const uint32_t type);
973 
994 int amxc_var_copy(amxc_var_t* const dest, const amxc_var_t* const src);
995 
1016 int amxc_var_move(amxc_var_t* const dest, amxc_var_t* const src);
1017 
1042 int amxc_var_convert(amxc_var_t* const dest,
1043  const amxc_var_t* src,
1044  const uint32_t type_id);
1045 
1067 int amxc_var_cast(amxc_var_t* const var,
1068  const uint32_t type_id);
1091 int amxc_var_compare(const amxc_var_t* const var1,
1092  const amxc_var_t* const var2,
1093  int* const result);
1094 
1108  if(var != NULL) {
1111  }
1112 }
1113 
1133  const char* const key,
1134  const int flags);
1162 int amxc_var_set_key(amxc_var_t* const var,
1163  const char* const key,
1164  amxc_var_t* data,
1165  const int flags);
1166 
1190  const char* const key) {
1192  amxc_var_take_it(rv);
1193  return rv;
1194 }
1195 
1214  const int64_t index,
1215  const int flags);
1241 int amxc_var_set_index(amxc_var_t* const var,
1242  const int64_t index,
1243  amxc_var_t* data,
1244  const int flags);
1245 
1269  const int64_t index) {
1271  amxc_var_take_it(rv);
1272  return rv;
1273 }
1274 
1293  const char* key);
1294 
1312 
1335  const char* const path,
1336  const int flags);
1337 
1362  const int flags,
1363  const char* const fmt,
1364  ...
1365  ) __attribute__ ((format(printf, 3, 4)));
1366 
1393 int amxc_var_set_path(amxc_var_t* const var,
1394  const char* const path,
1395  amxc_var_t* data,
1396  const int flags);
1397 
1426  amxc_var_t* data,
1427  const int flags,
1428  const char* const fmt,
1429  ...
1430  ) __attribute__ ((format(printf, 4, 5)));
1431 
1450 
1469 
1493 
1517 
1538 
1555 const char* amxc_var_key(const amxc_var_t* const var);
1556 
1568 uint32_t amxc_var_type_of(const amxc_var_t* const var);
1569 
1581 const char* amxc_var_type_name_of(const amxc_var_t* const var);
1582 
1594 bool amxc_var_is_null(const amxc_var_t* const var) {
1595  return var == NULL ? true : (var->type_id == AMXC_VAR_ID_NULL);
1596 }
1597 
1622 
1636 
1653 int amxc_var_dump(const amxc_var_t* const var, int fd);
1654 
1671 int amxc_var_dump_stream(const amxc_var_t* const var, FILE* stream);
1672 
1688 int amxc_var_log(const amxc_var_t* const var);
1689 
1707 int amxc_var_set_bool(amxc_var_t* const var, bool boolean);
1725 int amxc_var_set_int8_t(amxc_var_t* const var, int8_t val);
1743 int amxc_var_set_uint8_t(amxc_var_t* const var, uint8_t val);
1761 int amxc_var_set_int16_t(amxc_var_t* const var, int16_t val);
1779 int amxc_var_set_uint16_t(amxc_var_t* const var, uint16_t val);
1797 int amxc_var_set_int32_t(amxc_var_t* const var, int32_t val);
1815 int amxc_var_set_uint32_t(amxc_var_t* const var, uint32_t val);
1833 int amxc_var_set_int64_t(amxc_var_t* const var, int64_t val);
1851 int amxc_var_set_uint64_t(amxc_var_t* const var, uint64_t val);
1869 int amxc_var_set_cstring_t(amxc_var_t* const var, const char* const val);
1887 int amxc_var_set_csv_string_t(amxc_var_t* const var, const char* const val);
1905 int amxc_var_set_ssv_string_t(amxc_var_t* const var, const char* const val);
1923 int amxc_var_set_double(amxc_var_t* var, double val);
1941 int amxc_var_set_fd_t(amxc_var_t* var, int val);
1960 
1977 bool amxc_var_get_bool(const amxc_var_t* const var);
1994 int8_t amxc_var_get_int8_t(const amxc_var_t* const var);
2011 uint8_t amxc_var_get_uint8_t(const amxc_var_t* const var);
2028 int16_t amxc_var_get_int16_t(const amxc_var_t* const var);
2045 uint16_t amxc_var_get_uint16_t(const amxc_var_t* var);
2062 int32_t amxc_var_get_int32_t(const amxc_var_t* const var);
2079 uint32_t amxc_var_get_uint32_t(const amxc_var_t* var);
2096 int64_t amxc_var_get_int64_t(const amxc_var_t* const var);
2113 uint64_t amxc_var_get_uint64_t(const amxc_var_t* const var);
2130 char* amxc_var_get_cstring_t(const amxc_var_t* const var);
2181 double amxc_var_get_double(const amxc_var_t* var);
2198 int amxc_var_get_fd_t(const amxc_var_t* var);
2216 
2235  return amxc_var_get_cstring_t(var);
2236 }
2237 
2256  return amxc_var_get_cstring_t(var);
2257 }
2258 
2280 const char* amxc_var_get_const_cstring_t(const amxc_var_t* const var);
2346 bool amxc_var_get_const_bool(const amxc_var_t* const var);
2365 int8_t amxc_var_get_const_int8_t(const amxc_var_t* const var);
2384 int16_t amxc_var_get_const_int16_t(const amxc_var_t* const var);
2403 int32_t amxc_var_get_const_int32_t(const amxc_var_t* const var);
2422 int64_t amxc_var_get_const_int64_t(const amxc_var_t* const var);
2441 uint8_t amxc_var_get_const_uint8_t(const amxc_var_t* const var);
2460 uint16_t amxc_var_get_const_uint16_t(const amxc_var_t* const var);
2479 uint32_t amxc_var_get_const_uint32_t(const amxc_var_t* const var);
2498 uint64_t amxc_var_get_const_uint64_t(const amxc_var_t* const var);
2517 double amxc_var_get_const_double(const amxc_var_t* const var);
2556 
2578 }
2579 
2601 }
2602 
2623 amxc_var_t* amxc_var_add_new_bool(amxc_var_t* const var, bool boolean);
2644 amxc_var_t* amxc_var_add_new_int8_t(amxc_var_t* const var, int8_t val);
2665 amxc_var_t* amxc_var_add_new_uint8_t(amxc_var_t* const var, uint8_t val);
2686 amxc_var_t* amxc_var_add_new_int16_t(amxc_var_t* const var, int16_t val);
2707 amxc_var_t* amxc_var_add_new_uint16_t(amxc_var_t* const var, uint16_t val);
2728 amxc_var_t* amxc_var_add_new_int32_t(amxc_var_t* const var, int32_t val);
2749 amxc_var_t* amxc_var_add_new_uint32_t(amxc_var_t* const var, uint32_t val);
2770 amxc_var_t* amxc_var_add_new_int64_t(amxc_var_t* const var, int64_t val);
2791 amxc_var_t* amxc_var_add_new_uint64_t(amxc_var_t* const var, uint64_t val);
2812 amxc_var_t* amxc_var_add_new_cstring_t(amxc_var_t* const var, const char* const val);
2833 amxc_var_t* amxc_var_add_new_csv_string_t(amxc_var_t* const var, const char* const val);
2854 amxc_var_t* amxc_var_add_new_ssv_string_t(amxc_var_t* const var, const char* const val);
2875 amxc_var_t* amxc_var_add_new_double(amxc_var_t* const var, double val);
2918 
2945  const amxc_llist_t* list);
2946 
2973  const amxc_htable_t* htable);
2974 
2996 amxc_var_t* amxc_var_add_new_key_bool(amxc_var_t* const var, const char* key, bool boolean);
3018 amxc_var_t* amxc_var_add_new_key_int8_t(amxc_var_t* const var, const char* key, int8_t val);
3040 amxc_var_t* amxc_var_add_new_key_uint8_t(amxc_var_t* const var, const char* key, uint8_t val);
3062 amxc_var_t* amxc_var_add_new_key_int16_t(amxc_var_t* const var, const char* key, int16_t val);
3084 amxc_var_t* amxc_var_add_new_key_uint16_t(amxc_var_t* const var, const char* key, uint16_t val);
3106 amxc_var_t* amxc_var_add_new_key_int32_t(amxc_var_t* const var, const char* key, int32_t val);
3128 amxc_var_t* amxc_var_add_new_key_uint32_t(amxc_var_t* const var, const char* key, uint32_t val);
3150 amxc_var_t* amxc_var_add_new_key_int64_t(amxc_var_t* const var, const char* key, int64_t val);
3172 amxc_var_t* amxc_var_add_new_key_uint64_t(amxc_var_t* const var, const char* key, uint64_t val);
3194 amxc_var_t* amxc_var_add_new_key_cstring_t(amxc_var_t* const var, const char* key, const char* const val);
3216 amxc_var_t* amxc_var_add_new_key_csv_string_t(amxc_var_t* const var, const char* key, const char* const val);
3238 amxc_var_t* amxc_var_add_new_key_ssv_string_t(amxc_var_t* const var, const char* key, const char* const val);
3260 amxc_var_t* amxc_var_add_new_key_double(amxc_var_t* const var, const char* key, double val);
3282 amxc_var_t* amxc_var_add_new_key_fd_t(amxc_var_t* const var, const char* key, int val);
3304 amxc_var_t* amxc_var_add_new_key_amxc_ts_t(amxc_var_t* const var, const char* key, amxc_ts_t* ts);
3305 
3333  const char* key,
3334  const amxc_llist_t* list);
3335 
3363  const char* key,
3364  const amxc_htable_t* htable);
3365 
3400 
3419  return amxc_var_take_cstring_t(var);
3420 }
3421 
3440  return amxc_var_take_cstring_t(var);
3441 }
3442 
3460 int amxc_var_push_cstring_t(amxc_var_t* const var, char* val);
3478 int amxc_var_push_csv_string_t(amxc_var_t* const var, char* val);
3496 int amxc_var_push_ssv_string_t(amxc_var_t* const var, char* val);
3515 
3516 #ifdef __cplusplus
3517 }
3518 #endif
3519 
3520 #endif // __AMXC_VARIANT_H__
#define AMXC_INLINE
Definition: amxc_common.h:64
Ambiorix hash table API header file.
Ambiorix linked list API header file.
Ambiorix string API header file.
Ambiorix timestamp header file.
#define fd_t
Convenience macro.
Definition: amxc_variant.h:600
#define cstring_t
Convenience macro.
Definition: amxc_variant.h:584
void amxc_htable_it_take(amxc_htable_it_t *const it)
Removes the iterator from the hash table.
void amxc_llist_it_take(amxc_llist_it_t *const it)
Removes the iterator from the list.
#define AMXC_VAR_FLAG_DEFAULT
The default flag, do not copy, use variant as is.
Definition: amxc_variant.h:392
uint64_t amxc_var_get_uint64_t(const amxc_var_t *const var)
Conversion helper function.
int amxc_var_push_ssv_string_t(amxc_var_t *const var, char *val)
Pushes a value in a variant.
Definition: variant_char.c:655
amxc_var_t * amxc_var_add_new_uint32_t(amxc_var_t *const var, uint32_t val)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_csv_string_t(amxc_var_t *const var, const char *key, const char *const val)
Conversion helper function.
Definition: variant_char.c:728
AMXC_INLINE char * amxc_var_get_csv_string_t(const amxc_var_t *const var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_uint8_t(amxc_var_t *const var, uint8_t val)
Conversion helper function.
int amxc_var_set_cstring_t(amxc_var_t *const var, const char *const val)
Setter helper function.
Definition: variant_char.c:549
int16_t amxc_var_get_int16_t(const amxc_var_t *const var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_uint64_t(amxc_var_t *const var, uint64_t val)
Conversion helper function.
int8_t amxc_var_get_const_int8_t(const amxc_var_t *const var)
Conversion helper function.
Definition: variant_int8.c:305
amxc_var_t * amxc_var_add_new_key_ssv_string_t(amxc_var_t *const var, const char *key, const char *const val)
Conversion helper function.
Definition: variant_char.c:745
amxc_var_t * amxc_var_add_new_key_uint64_t(amxc_var_t *const var, const char *key, uint64_t val)
Conversion helper function.
const amxc_llist_t * amxc_var_get_const_amxc_llist_t(const amxc_var_t *const var)
Conversion helper function.
Definition: variant_list.c:411
int32_t amxc_var_get_const_int32_t(const amxc_var_t *const var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_int64_t(amxc_var_t *const var, const char *key, int64_t val)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_cstring_t(amxc_var_t *const var, const char *key, const char *const val)
Conversion helper function.
Definition: variant_char.c:711
char * amxc_var_take_cstring_t(amxc_var_t *const var)
Takes a value from a variant.
Definition: variant_char.c:613
int amxc_var_set_double(amxc_var_t *var, double val)
Setter helper function.
amxc_var_t * amxc_var_add_new_cstring_t(amxc_var_t *const var, const char *const val)
Conversion helper function.
Definition: variant_char.c:666
double amxc_var_get_double(const amxc_var_t *var)
Conversion helper function.
AMXC_INLINE const char * amxc_var_get_const_csv_string_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.
Definition: variant_list.c:66
amxc_llist_t * amxc_var_get_amxc_llist_t(const amxc_var_t *const var)
Conversion helper function.
Definition: variant_list.c:385
int amxc_var_set_bool(amxc_var_t *const var, bool boolean)
Setter helper function.
Definition: variant_bool.c:221
int amxc_var_set_uint32_t(amxc_var_t *const var, uint32_t val)
Setter 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.
Definition: variant_list.c:422
amxc_string_t * amxc_var_take_amxc_string_t(amxc_var_t *const var)
Takes a value from a variant.
Definition: amxc_variant.c:676
bool amxc_var_get_bool(const amxc_var_t *const var)
Conversion helper function.
Definition: variant_bool.c:234
int64_t amxc_var_get_int64_t(const amxc_var_t *const var)
Conversion helper function.
int16_t amxc_var_get_const_int16_t(const amxc_var_t *const var)
Conversion helper function.
void variant_htable_it_free(const char *key, amxc_htable_it_t *it)
Helper functions, can be used as delete function for htable.
amxc_var_t * amxc_var_add_new_int32_t(amxc_var_t *const var, int32_t val)
Conversion helper function.
int32_t amxc_var_get_int32_t(const amxc_var_t *const var)
Conversion helper function.
AMXC_INLINE const char * amxc_var_get_const_ssv_string_t(const amxc_var_t *const var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_uint16_t(amxc_var_t *const var, const char *key, uint16_t val)
Conversion helper function.
const amxc_ts_t * amxc_var_get_const_amxc_ts_t(const amxc_var_t *const var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_int64_t(amxc_var_t *const var, int64_t val)
Conversion helper function.
uint8_t amxc_var_get_uint8_t(const amxc_var_t *const var)
Conversion helper function.
int amxc_var_get_fd_t(const amxc_var_t *var)
Conversion helper function.
Definition: variant_fd.c:303
amxc_var_t * amxc_var_add_new_bool(amxc_var_t *const var, bool boolean)
Conversion helper function.
Definition: variant_bool.c:259
int amxc_var_push_csv_string_t(amxc_var_t *const var, char *val)
Pushes a value in a variant.
Definition: variant_char.c:644
int amxc_var_set_ssv_string_t(amxc_var_t *const var, const char *const val)
Setter helper function.
Definition: variant_char.c:573
amxc_var_t * amxc_var_add_new_double(amxc_var_t *const var, double val)
Conversion helper function.
amxc_var_t * amxc_var_add_new_csv_string_t(amxc_var_t *const var, const char *const val)
Conversion helper function.
Definition: variant_char.c:681
bool amxc_var_get_const_bool(const amxc_var_t *const var)
Conversion helper function.
Definition: variant_bool.c:248
int amxc_var_set_int16_t(amxc_var_t *const var, int16_t val)
Setter helper function.
amxc_var_t * amxc_var_add_new_amxc_htable_t(amxc_var_t *const var, const amxc_htable_t *htable)
Conversion helper function.
int amxc_var_set_int32_t(amxc_var_t *const var, int32_t val)
Setter helper function.
AMXC_INLINE char * amxc_var_take_csv_string_t(amxc_var_t *const var)
Takes a value from a variant.
AMXC_INLINE char * amxc_var_get_ssv_string_t(const amxc_var_t *const var)
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.
Definition: variant_list.c:441
amxc_var_t * amxc_var_add_new_key_double(amxc_var_t *const var, const char *key, double val)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_bool(amxc_var_t *const var, const char *key, bool boolean)
Conversion helper function.
Definition: variant_bool.c:274
int amxc_var_set_uint64_t(amxc_var_t *const var, uint64_t val)
Setter helper function.
uint8_t amxc_var_get_const_uint8_t(const amxc_var_t *const var)
Conversion helper function.
int amxc_var_set_int64_t(amxc_var_t *const var, int64_t val)
Setter helper function.
amxc_var_t * amxc_var_add_new_key_amxc_htable_t(amxc_var_t *const var, const char *key, const amxc_htable_t *htable)
Conversion helper function.
int amxc_var_set_amxc_ts_t(amxc_var_t *var, amxc_ts_t *val)
Setter helper function.
int amxc_var_set_fd_t(amxc_var_t *var, int val)
Setter helper function.
Definition: variant_fd.c:285
amxc_var_t * amxc_var_add_new_key_amxc_ts_t(amxc_var_t *const var, const char *key, amxc_ts_t *ts)
Conversion helper function.
amxc_var_t * amxc_var_add_new_uint16_t(amxc_var_t *const var, uint16_t val)
Conversion helper function.
const char * amxc_var_get_const_cstring_t(const amxc_var_t *const var)
Conversion helper function.
Definition: variant_char.c:600
char * amxc_var_get_cstring_t(const amxc_var_t *const var)
Conversion helper function.
Definition: variant_char.c:585
amxc_htable_t * amxc_var_get_amxc_htable_t(const amxc_var_t *const var)
Conversion helper function.
uint16_t amxc_var_get_const_uint16_t(const amxc_var_t *const var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_int8_t(amxc_var_t *const var, int8_t val)
Conversion helper function.
Definition: variant_int8.c:316
uint64_t amxc_var_get_const_uint64_t(const amxc_var_t *const var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_fd_t(amxc_var_t *const var, const char *key, int val)
Conversion helper function.
Definition: variant_fd.c:343
amxc_var_t * amxc_var_add_new_amxc_ts_t(amxc_var_t *const var, amxc_ts_t *ts)
Conversion helper function.
int amxc_var_set_csv_string_t(amxc_var_t *const var, const char *const val)
Setter helper function.
Definition: variant_char.c:561
amxc_var_t * amxc_var_add_new_int16_t(amxc_var_t *const var, int16_t val)
Conversion helper function.
int amxc_var_get_const_fd_t(const amxc_var_t *const var)
Conversion helper function.
Definition: variant_fd.c:317
amxc_var_t * amxc_var_add_new_fd_t(amxc_var_t *const var, int val)
Conversion helper function.
Definition: variant_fd.c:328
int amxc_var_push_amxc_string_t(amxc_var_t *const var, amxc_string_t *val)
Pushes a value in a variant.
Definition: amxc_variant.c:696
amxc_ts_t * amxc_var_get_amxc_ts_t(const amxc_var_t *var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_int8_t(amxc_var_t *const var, const char *key, int8_t val)
Conversion helper function.
Definition: variant_int8.c:331
amxc_var_t * amxc_var_add_new_key_int32_t(amxc_var_t *const var, const char *key, int32_t val)
Conversion helper function.
const amxc_htable_t * amxc_var_get_const_amxc_htable_t(const amxc_var_t *const var)
Conversion helper function.
int amxc_var_set_uint8_t(amxc_var_t *const var, uint8_t val)
Setter helper function.
uint32_t amxc_var_get_const_uint32_t(const amxc_var_t *const var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_uint32_t(amxc_var_t *const var, const char *key, uint32_t val)
Conversion helper function.
int amxc_var_set_uint16_t(amxc_var_t *const var, uint16_t val)
Setter helper function.
int64_t amxc_var_get_const_int64_t(const amxc_var_t *const var)
Conversion helper function.
int amxc_var_push_cstring_t(amxc_var_t *const var, char *val)
Pushes a value in a variant.
Definition: variant_char.c:629
uint32_t amxc_var_get_uint32_t(const amxc_var_t *var)
Conversion helper function.
AMXC_INLINE char * amxc_var_take_ssv_string_t(amxc_var_t *const var)
Takes a value from a variant.
int8_t amxc_var_get_int8_t(const amxc_var_t *const var)
Conversion helper function.
Definition: variant_int8.c:291
int amxc_var_set_int8_t(amxc_var_t *const var, int8_t val)
Setter helper function.
Definition: variant_int8.c:278
amxc_var_t * amxc_var_add_new_ssv_string_t(amxc_var_t *const var, const char *const val)
Conversion helper function.
Definition: variant_char.c:696
uint16_t amxc_var_get_uint16_t(const amxc_var_t *var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_uint8_t(amxc_var_t *const var, const char *key, uint8_t val)
Conversion helper function.
double amxc_var_get_const_double(const amxc_var_t *const var)
Conversion helper function.
amxc_var_t * amxc_var_add_new_key_int16_t(amxc_var_t *const var, const char *key, int16_t val)
Conversion helper function.
#define AMXC_VAR_ID_NULL
Null variant type id (aka void)
Definition: amxc_variant.h:128
int amxc_var_dump(const amxc_var_t *const var, int fd)
Dumps the content of the variant in a human readable manner.
int amxc_var_log(const amxc_var_t *const var)
Logs the content of the variant in a human readable manner to syslog.
int amxc_var_dump_stream(const amxc_var_t *const var, FILE *stream)
Dumps the content of the variant in a human readable manner.
int amxc_var_move(amxc_var_t *const dest, amxc_var_t *const src)
Moves the type and data from one variant (source) in another variant (destination).
Definition: amxc_variant.c:308
uint32_t amxc_var_type_of(const amxc_var_t *const var)
Gets the variant type id of a variant.
Definition: amxc_variant.c:668
amxc_var_t * amxc_var_get_pathf(const amxc_var_t *const var, const int flags, const char *const fmt,...) __attribute__((format(printf
Retrieves the variant at the given path of a composite variant.
amxc_var_t * amxc_var_get_last(const amxc_var_t *const var)
Gets the last variant in a htable or list variant.
Definition: amxc_variant.c:738
AMXC_INLINE bool amxc_var_is_null(const amxc_var_t *const var)
Checks if the given variant is of the "null" type.
int amxc_var_set_type(amxc_var_t *const var, const uint32_t type)
Change the variant data type.
Definition: amxc_variant.c:261
amxc_var_t * amxc_var_get_path(const amxc_var_t *const var, const char *const path, const int flags)
Retrieves the variant at the given path of a composite variant.
Definition: amxc_variant.c:573
AMXC_INLINE amxc_var_t * amxc_var_take_key(amxc_var_t *const var, const char *const key)
Get a reference to a part of composed variant using a key and removes it from the composed variant.
amxc_var_t int amxc_var_set_path(amxc_var_t *const var, const char *const path, amxc_var_t *data, const int flags)
Sets the variant at the given path of a composite variant.
Definition: amxc_variant.c:623
amxc_var_t * amxc_var_get_key(const amxc_var_t *const var, const char *const key, const int flags)
Get a reference to a part of composed variant using a key.
Definition: amxc_variant.c:449
const char * amxc_var_key(const amxc_var_t *const var)
Gets the key, with which the variant is stored in a htable variant.
Definition: amxc_variant.c:821
int amxc_var_cast(amxc_var_t *const var, const uint32_t type_id)
Casts the variant to another variant type id.
Definition: amxc_variant.c:372
int amxc_var_set_index(amxc_var_t *const var, const int64_t index, amxc_var_t *data, const int flags)
Set a part of composed variant using an index.
Definition: amxc_variant.c:507
amxc_var_t * amxc_var_get_previous(const amxc_var_t *const var)
Gets the previous variant.
Definition: amxc_variant.c:783
struct _amxc_var amxc_var_t
The variant struct definition.
int amxc_var_new(amxc_var_t **var)
Allocates a variant and initializes it to the null variant type.
Definition: amxc_variant.c:194
int amxc_var_init(amxc_var_t *const var)
Initializes a variant.
Definition: amxc_variant.c:223
amxc_var_t * amxc_var_add_new(amxc_var_t *const var)
Adds a new variant to a composite variant.
Definition: amxc_variant.c:551
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).
Definition: amxc_variant.c:285
void amxc_var_clean(amxc_var_t *const var)
Clean-up and reset variant.
Definition: amxc_variant.c:237
int amxc_var_set_pathf(amxc_var_t *const var, amxc_var_t *data, const int flags, const char *const fmt,...) __attribute__((format(printf
Sets the variant at the given path of a composite variant.
void amxc_var_delete(amxc_var_t **var)
Frees the previously allocated variant.
Definition: amxc_variant.c:207
int amxc_var_set_key(amxc_var_t *const var, const char *const key, amxc_var_t *data, const int flags)
Sets a part of composed variant using a key.
Definition: amxc_variant.c:468
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.
Definition: amxc_variant.c:526
amxc_var_t * amxc_var_get_parent(const amxc_var_t *const var)
Gets the containing variant.
Definition: amxc_variant.c:802
amxc_var_t * amxc_var_get_index(const amxc_var_t *const var, const int64_t index, const int flags)
Get a reference to a part of composed variant using an index.
Definition: amxc_variant.c:489
amxc_var_t * amxc_var_get_next(const amxc_var_t *const var)
Gets the next variant.
Definition: amxc_variant.c:764
int amxc_var_t * amxc_var_get_first(const amxc_var_t *const var)
Gets the first variant in a htable or list variant.
Definition: amxc_variant.c:712
AMXC_INLINE void amxc_var_take_it(amxc_var_t *const var)
Removes the variant for a llist and/or a htable.
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.
Definition: amxc_variant.c:333
int amxc_var_compare(const amxc_var_t *const var1, const amxc_var_t *const var2, int *const result)
Compares two variants.
Definition: amxc_variant.c:397
AMXC_INLINE amxc_var_t * amxc_var_take_index(amxc_var_t *const var, const int64_t index)
Get a reference to a part of composed variant using an index and removes it from the composed variant...
const char * amxc_var_type_name_of(const amxc_var_t *const var)
Gets the variant type name of a variant.
Definition: amxc_variant.c:672
The hash table iterator structure.
Definition: amxc_htable.h:138
The hash table structure.
Definition: amxc_htable.h:175
The linked list iterator structure.
Definition: amxc_llist.h:215
The linked list structure.
Definition: amxc_llist.h:228
The string structure.
Definition: amxc_string.h:103
The variant struct definition.
Definition: amxc_variant.h:861
int8_t i8
Definition: amxc_variant.h:868
void * data
Definition: amxc_variant.h:883
amxc_llist_t vl
Definition: amxc_variant.h:879
int64_t i64
Definition: amxc_variant.h:871
double d
Definition: amxc_variant.h:877
uint16_t ui16
Definition: amxc_variant.h:873
uint64_t ui64
Definition: amxc_variant.h:875
amxc_htable_t vm
Definition: amxc_variant.h:880
amxc_llist_it_t lit
Definition: amxc_variant.h:862
uint8_t ui8
Definition: amxc_variant.h:872
amxc_htable_it_t hit
Definition: amxc_variant.h:863
amxc_ts_t ts
Definition: amxc_variant.h:882
int16_t i16
Definition: amxc_variant.h:869
int32_t i32
Definition: amxc_variant.h:870
uint32_t type_id
Definition: amxc_variant.h:864
char * s
Definition: amxc_variant.h:867
uint32_t ui32
Definition: amxc_variant.h:874
The timestamp structure (unix epoch time).
char data[]
static amxc_htable_it_t it[2000]
static amxc_htable_t * htable
static amxc_var_t * var
Definition: test_issue_58.c:77