57 entry (
const std::string& n,
void* a,
jb_type t,
size_t s,
size_t c = 1)
65 template <
typename T,
size_t C>
66 void add_var (T (&var)[C],
const std::string& name)
68 using U =
typename std::remove_extent<T>::type;
69 constexpr size_t sz =
sizeof (U) * (std::extent_v<T> ? std::extent_v<T> : 1);
71 : std::is_same_v<U, unsigned short> ?
JT_USHORT
72 : std::is_same_v<U, int> ?
JT_INT
73 : std::is_same_v<U, unsigned int> ?
JT_UINT
74 : std::is_same_v<U, long> ?
JT_LONG
75 : std::is_same_v<U, unsigned long> ?
JT_ULONG
76 : std::is_same_v<U, float> ?
JT_FLT
77 : std::is_same_v<U, double> ?
JT_DBL
78 : std::is_same_v<U, bool> ?
JT_BOOL
79 : std::is_same_v<U, char> ?
JT_CSTR
80 : std::is_same_v<U, std::string> ?
JT_STR
81 : std::is_same_v<U, char*> ?
JT_PSTR
82 : std::is_same_v<U, const char*> ?
JT_PSTR
84 static_assert (t != JT_UNKNOWN,
"Invalid array type");
86 children.emplace_back (name, var, t, C);
88 children.emplace_back (name, var, t, sz, C);
92 std::enable_if_t<std::is_same_v<T, std::string> || std::is_same_v<T, short>
93 || std::is_same_v<T, unsigned short> || std::is_same_v<T, int>
94 || std::is_same_v<T, unsigned int> || std::is_same_v<T, long>
95 || std::is_same_v<T, unsigned long> || std::is_same_v<T, float>
96 || std::is_same_v<T, double> || std::is_same_v<T, bool>>
97 add_var (T& var,
const std::string& name)
100 : std::is_same_v<T, unsigned short> ?
JT_USHORT
101 : std::is_same_v<T, int> ?
JT_INT
102 : std::is_same_v<T, unsigned int> ?
JT_UINT
103 : std::is_same_v<T, long> ?
JT_LONG
104 : std::is_same_v<T, unsigned long> ?
JT_ULONG
105 : std::is_same_v<T, float> ?
JT_FLT
106 : std::is_same_v<T, double> ?
JT_DBL
107 : std::is_same_v<T, bool> ?
JT_BOOL
108 : std::is_same_v<T, char> ?
JT_CSTR
109 : std::is_same_v<T, std::string> ?
JT_STR
110 : std::is_same_v<T, char*> ?
JT_PSTR
111 : std::is_same_v<T, const char*> ?
JT_PSTR
113 static_assert (t != JT_UNKNOWN,
"Invalid array type");
114 children.emplace_back (name, &var, t,
sizeof (T));
117 entry& add_object (
const std::string& name)
119 children.emplace_back (name,
nullptr,
JT_OBJECT, 0, 1);
120 return *(--children.end ());
130 friend class JSONBridge;
148 void add_var (T (&var)[C],
const std::string& name)
150 using U =
typename std::remove_extent<T>::type;
151 constexpr size_t sz =
sizeof (U) * (std::extent_v<T> ? std::extent_v<T> : 1);
153 : std::is_same_v<U, unsigned short> ?
JT_USHORT
154 : std::is_same_v<U, int> ?
JT_INT
155 : std::is_same_v<U, unsigned int> ?
JT_UINT
156 : std::is_same_v<U, long> ?
JT_LONG
157 : std::is_same_v<U, unsigned long> ?
JT_ULONG
158 : std::is_same_v<U, float> ?
JT_FLT
159 : std::is_same_v<U, double> ?
JT_DBL
160 : std::is_same_v<U, bool> ?
JT_BOOL
161 : std::is_same_v<U, char> ?
JT_CSTR
162 : std::is_same_v<U, char*> ?
JT_PSTR
163 : std::is_same_v<U, const char*> ?
JT_PSTR
165 static_assert (t != JT_UNKNOWN,
"Invalid array type");
167 dict_.emplace_back (name, var, t, C, 1);
169 dict_.emplace_back (name, var, t, sz, C);
182 : std::is_same_v<T, unsigned short> ?
JT_USHORT
183 : std::is_same_v<T, int> ?
JT_INT
184 : std::is_same_v<T, unsigned int> ?
JT_UINT
185 : std::is_same_v<T, long> ?
JT_LONG
186 : std::is_same_v<T, unsigned long> ?
JT_ULONG
187 : std::is_same_v<T, float> ?
JT_FLT
188 : std::is_same_v<T, double> ?
JT_DBL
189 : std::is_same_v<T, bool> ?
JT_BOOL
190 : std::is_same_v<T, char> ?
JT_CSTR
191 : std::is_same_v<T, std::string> ?
JT_STR
192 : std::is_same_v<T, char*> ?
JT_PSTR
193 : std::is_same_v<T, const char*> ?
JT_PSTR
195 static_assert (t != JT_UNKNOWN,
"Invalid array type");
196 dict_.emplace_back (name, &var, t,
sizeof (T));