1 /***********************************************************************************************************************************
2 Variant List Handler
3 ***********************************************************************************************************************************/
4 #ifndef COMMON_TYPE_VARIANTLIST_H
5 #define COMMON_TYPE_VARIANTLIST_H
6 
7 /***********************************************************************************************************************************
8 Variant list object
9 ***********************************************************************************************************************************/
10 typedef struct VariantList VariantList;
11 
12 #include "common/type/stringList.h"
13 #include "common/type/variant.h"
14 
15 /***********************************************************************************************************************************
16 Constructors
17 ***********************************************************************************************************************************/
18 // Create empty VariantList
19 __attribute__((always_inline)) static inline VariantList *
varLstNew(void)20 varLstNew(void)
21 {
22     return (VariantList *)lstNewP(sizeof(Variant *));
23 }
24 
25 // Create VariantList from StringList
26 VariantList *varLstNewStrLst(const StringList *stringList);
27 
28 // Duplicate a variant list
29 VariantList *varLstDup(const VariantList *source);
30 
31 /***********************************************************************************************************************************
32 Getters/Setters
33 ***********************************************************************************************************************************/
34 // List size
35 __attribute__((always_inline)) static inline unsigned int
varLstSize(const VariantList * const this)36 varLstSize(const VariantList *const this)
37 {
38     return lstSize((List *)this);
39 }
40 
41 // Is the list empty?
42 __attribute__((always_inline)) static inline bool
varLstEmpty(const VariantList * const this)43 varLstEmpty(const VariantList *const this)
44 {
45     return varLstSize(this) == 0;
46 }
47 
48 /***********************************************************************************************************************************
49 Functions
50 ***********************************************************************************************************************************/
51 // Add to list
52 __attribute__((always_inline)) static inline VariantList *
varLstAdd(VariantList * const this,Variant * const data)53 varLstAdd(VariantList *const this, Variant *const data)
54 {
55     lstAdd((List *)this, &data);
56     return this;
57 }
58 
59 // Get by index
60 __attribute__((always_inline)) static inline Variant *
varLstGet(const VariantList * const this,const unsigned int listIdx)61 varLstGet(const VariantList *const this, const unsigned int listIdx)
62 {
63     return *(Variant **)lstGet((List *)this, listIdx);
64 }
65 
66 // Move to new parent mem context
67 __attribute__((always_inline)) static inline VariantList *
varLstMove(VariantList * const this,MemContext * const parentNew)68 varLstMove(VariantList *const this, MemContext *const parentNew)
69 {
70     return (VariantList *)lstMove((List *)this, parentNew);
71 }
72 
73 /***********************************************************************************************************************************
74 Destructor
75 ***********************************************************************************************************************************/
76 __attribute__((always_inline)) static inline void
varLstFree(VariantList * const this)77 varLstFree(VariantList *const this)
78 {
79     lstFree((List *)this);
80 }
81 
82 /***********************************************************************************************************************************
83 Macros for function logging
84 ***********************************************************************************************************************************/
85 #define FUNCTION_LOG_VARIANT_LIST_TYPE                                                                                             \
86     VariantList *
87 #define FUNCTION_LOG_VARIANT_LIST_FORMAT(value, buffer, bufferSize)                                                                \
88     objToLog(value, "VariantList", buffer, bufferSize)
89 
90 #endif
91