59 entry (
const std::string& n,
void* a,
jb_type t,
size_t s,
size_t c)
67 template <
typename T,
size_t C>
68 void add_var (T (&var)[C],
const std::string& name)
70 using U =
typename std::remove_extent<T>::type;
71 constexpr size_t sz =
sizeof (U) * (std::extent_v<T> ? std::extent_v<T> : 1);
73 : std::is_same_v<U, unsigned short> ?
JT_USHORT
74 : std::is_same_v<U, int> ?
JT_INT
75 : std::is_same_v<U, unsigned int> ?
JT_UINT
76 : std::is_same_v<U, long> ?
JT_LONG
77 : std::is_same_v<U, unsigned long> ?
JT_ULONG
78 : std::is_same_v<U, float> ?
JT_FLT
79 : std::is_same_v<U, double> ?
JT_DBL
80 : std::is_same_v<U, bool> ?
JT_BOOL
81 : std::is_same_v<U, char> ?
JT_CSTR
82 : std::is_same_v<U, std::string> ?
JT_STR
83 : std::is_same_v<U, char*> ?
JT_PSTR
84 : std::is_same_v<U, const char*> ?
JT_PSTR
86 static_assert (t != JT_UNKNOWN,
"Invalid array type");
88 children.emplace_back (name, var, t, C, 1);
90 children.emplace_back (name, var, t, sz, C);
94 std::enable_if_t<std::is_same_v<T, std::string> || std::is_same_v<T, short>
95 || std::is_same_v<T, unsigned short> || std::is_same_v<T, int>
96 || std::is_same_v<T, unsigned int> || std::is_same_v<T, long>
97 || std::is_same_v<T, unsigned long> || std::is_same_v<T, float>
98 || std::is_same_v<T, double> || std::is_same_v<T, bool>>
99 add_var (T& var,
const std::string& name)
102 : std::is_same_v<T, unsigned short> ?
JT_USHORT
103 : std::is_same_v<T, int> ?
JT_INT
104 : std::is_same_v<T, unsigned int> ?
JT_UINT
105 : std::is_same_v<T, long> ?
JT_LONG
106 : std::is_same_v<T, unsigned long> ?
JT_ULONG
107 : std::is_same_v<T, float> ?
JT_FLT
108 : std::is_same_v<T, double> ?
JT_DBL
109 : std::is_same_v<T, bool> ?
JT_BOOL
110 : std::is_same_v<T, char> ?
JT_CSTR
111 : std::is_same_v<T, std::string> ?
JT_STR
112 : std::is_same_v<T, char*> ?
JT_PSTR
113 : std::is_same_v<T, const char*> ?
JT_PSTR
115 static_assert (t != JT_UNKNOWN,
"Invalid variable type");
116 children.emplace_back (name, &var, t,
sizeof (T), 1);
119 entry& add_object (
const std::string& name)
121 children.emplace_back (name,
nullptr,
JT_OBJECT, 0, 1);
122 return *(--children.end ());
132 friend class JSONBridge;
151 void add_var (T (&var)[C],
const std::string& name)
153 using U =
typename std::remove_extent<T>::type;
154 constexpr size_t sz =
sizeof (U) * (std::extent_v<T> ? std::extent_v<T> : 1);
156 : std::is_same_v<U, unsigned short> ?
JT_USHORT
157 : std::is_same_v<U, int> ?
JT_INT
158 : std::is_same_v<U, unsigned int> ?
JT_UINT
159 : std::is_same_v<U, long> ?
JT_LONG
160 : std::is_same_v<U, unsigned long> ?
JT_ULONG
161 : std::is_same_v<U, float> ?
JT_FLT
162 : std::is_same_v<U, double> ?
JT_DBL
163 : std::is_same_v<U, bool> ?
JT_BOOL
164 : std::is_same_v<U, char> ?
JT_CSTR
165 : std::is_same_v<U, char*> ?
JT_PSTR
166 : std::is_same_v<U, const char*> ?
JT_PSTR
168 static_assert (t != JT_UNKNOWN,
"Invalid array type");
170 dict_.emplace_back (name, var, t, C, 1);
172 dict_.emplace_back (name, var, t, sz, C);
185 : std::is_same_v<T, unsigned short> ?
JT_USHORT
186 : std::is_same_v<T, int> ?
JT_INT
187 : std::is_same_v<T, unsigned int> ?
JT_UINT
188 : std::is_same_v<T, long> ?
JT_LONG
189 : std::is_same_v<T, unsigned long> ?
JT_ULONG
190 : std::is_same_v<T, float> ?
JT_FLT
191 : std::is_same_v<T, double> ?
JT_DBL
192 : std::is_same_v<T, bool> ?
JT_BOOL
193 : std::is_same_v<T, char> ?
JT_CSTR
194 : std::is_same_v<T, std::string> ?
JT_STR
195 : std::is_same_v<T, char*> ?
JT_PSTR
196 : std::is_same_v<T, const char*> ?
JT_PSTR
198 static_assert (t != JT_UNKNOWN,
"Invalid variable type");
199 dict_.emplace_back (name, &var, t,
sizeof (T), 1);