libsheepy
libsheepyCSmallDict.c
Go to the documentation of this file.
1 // MIT License
2 //
3 // Copyright (c) 2023 Remy Noulin
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to deal
7 // in the Software without restriction, including without limitation the rights
8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 // copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be included in all
13 // copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 // SOFTWARE.
22 
23 #include "../libsheepyObject.h"
24 #include "libsheepyCSmallDict.h"
26 #include "../../release/libsheepy.h"
27 
28 #define internal static
29 
30 #include <stdint.h>
31 #include <stdlib.h>
32 #include <stdbool.h>
33 #include <string.h>
34 #include <stdio.h>
35 
36 void initiateSmallDict(smallDictt *self);
39 void finalizeRecycleSmallDict(void *arg UNUSED);
40 void finalizeSmallDict(void);
48 internal void freeSmallDict(smallDictt *self);
49 internal void terminateSmallDict(smallDictt **self);
50 internal char* toStringSmallDict(smallDictt *self);
52 internal char* escapeSmallDict(smallDictt *self);
53 internal void disposeSmallDict(smallDictt *self);
54 internal void smashSmallDict(smallDictt **self);
55 #if (NFreeStackCheck)
56 internal void finishSmallDict(smallDictt **self);
57 #else
58 internal void finishSmallDict(smallDictt **self);
59 #endif
60 internal const char* helpSmallDict(smallDictt UNUSED *self);
61 internal void resetSmallDict(smallDictt *self);
62 internal sDictt* getsoSmallDict(smallDictt *self);
63 internal void setsoSmallDict(smallDictt *self, sDictt *so);
64 internal smallDictt* mirrorSmallDict(smallDictt *self);
65 internal smallDictt* setSmallDict(smallDictt *self, const char *key, baset *value);
66 internal smallDictt* setUndefinedSmallDict(smallDictt *self, const char *key);
67 internal smallDictt* setBoolSmallDict(smallDictt *self, const char *key, bool value);
68 internal smallDictt* setDoubleSmallDict(smallDictt *self, const char *key, double value);
69 internal smallDictt* setIntSmallDict(smallDictt *self, const char *key, int64_t value);
70 internal smallDictt* setSSmallDict(smallDictt *self, const char *key, const char *string);
71 internal smallDictt* setCharSmallDict(smallDictt *self, const char *key, char c);
72 internal smallDictt* setDictSmallDict(smallDictt *self, const char *key, smallDictt *dict);
73 internal smallDictt* setArraySmallDict(smallDictt *self, const char *key, smallArrayt *array);
74 internal smallDictt* setArraycSmallDict(smallDictt *self, const char *key, char **array);
75 internal smallDictt* setCArraycSmallDict(smallDictt *self, const char *key, const char **array);
76 internal smallDictt* setSmallBoolSmallDict(smallDictt *self, const char *key, smallBoolt *value);
77 internal smallDictt* setSmallBytesSmallDict(smallDictt *self, const char *key, smallBytest *value);
78 internal smallDictt* setSmallDoubleSmallDict(smallDictt *self, const char *key, smallDoublet *value);
79 internal smallDictt* setSmallIntSmallDict(smallDictt *self, const char *key, smallIntt *value);
80 internal smallDictt* setSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *value);
81 internal smallDictt* setSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string);
82 internal smallDictt* setSmallContainerSmallDict(smallDictt *self, const char *key, smallContainert *container);
83 internal smallDictt* setKCharSmallDict(smallDictt *self, char key, baset *value);
84 internal smallDictt* setUndefinedKCharSmallDict(smallDictt *self, char key);
85 internal smallDictt* setBoolKCharSmallDict(smallDictt *self, char key, bool value);
86 internal smallDictt* setDoubleKCharSmallDict(smallDictt *self, char key, double value);
87 internal smallDictt* setIntKCharSmallDict(smallDictt *self, char key, int64_t value);
88 internal smallDictt* setSKCharSmallDict(smallDictt *self, char key, const char *string);
89 internal smallDictt* setCharKCharSmallDict(smallDictt *self, char key, char c);
90 internal smallDictt* setDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict);
91 internal smallDictt* setArrayKCharSmallDict(smallDictt *self, char key, smallArrayt *array);
92 internal smallDictt* setArraycKCharSmallDict(smallDictt *self, char key, char **array);
93 internal smallDictt* setCArraycKCharSmallDict(smallDictt *self, char key, const char **array);
99 internal smallDictt* setSmallStringKCharSmallDict(smallDictt *self, char key, smallStringt *string);
100 internal smallDictt* setSmallContainerKCharSmallDict(smallDictt *self, char key, smallContainert *container);
101 internal smallDictt* setNFreeSmallDict(smallDictt *self, const char *key, baset *value);
102 internal smallDictt* setNFreeUndefinedSmallDict(smallDictt *self, const char *key, undefinedt *u);
103 internal smallDictt* setNFreeSSmallDict(smallDictt *self, const char *key, char *string);
104 internal smallDictt* setNFreeDictSmallDict(smallDictt *self, const char *key, smallDictt *dict);
105 internal smallDictt* setNFreeArraySmallDict(smallDictt *self, const char *key, smallArrayt *array);
106 internal smallDictt* setNFreeArraycSmallDict(smallDictt *self, const char *key, char **array);
107 internal smallDictt* setNFreeSmallBoolSmallDict(smallDictt *self, const char *key, smallBoolt *value);
108 internal smallDictt* setNFreeSmallBytesSmallDict(smallDictt *self, const char *key, smallBytest *value);
109 internal smallDictt* setNFreeSmallDoubleSmallDict(smallDictt *self, const char *key, smallDoublet *value);
110 internal smallDictt* setNFreeSmallIntSmallDict(smallDictt *self, const char *key, smallIntt *value);
111 internal smallDictt* setNFreeSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *value);
112 internal smallDictt* setNFreeSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string);
113 internal smallDictt* setNFreeSmallContainerSmallDict(smallDictt *self, const char *key, smallContainert *container);
114 internal smallDictt* setNFreeKCharSmallDict(smallDictt *self, char key, baset *value);
116 internal smallDictt* setNFreeSKCharSmallDict(smallDictt *self, char key, char *string);
117 internal smallDictt* setNFreeDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict);
119 internal smallDictt* setNFreeArraycKCharSmallDict(smallDictt *self, char key, char **array);
125 internal smallDictt* setNFreeSmallStringKCharSmallDict(smallDictt *self, char key, smallStringt *string);
126 internal smallDictt* setNFreeSmallContainerKCharSmallDict(smallDictt *self, char key, smallContainert *container);
127 internal smallDictt* setPDictSmallDict(smallDictt *self, const char *key, smallDictt *dict);
128 internal smallDictt* setPArraySmallDict(smallDictt *self, const char *key, smallArrayt *array);
129 internal smallDictt* setPSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *json);
130 internal smallDictt* setPSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string);
131 internal smallDictt* setNFreePDictSmallDict(smallDictt *self, const char *key, smallDictt *dict);
132 internal smallDictt* setNFreePArraySmallDict(smallDictt *self, const char *key, smallArrayt *array);
133 internal smallDictt* setNFreePSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *json);
134 internal smallDictt* setNFreePSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string);
135 internal smallDictt* setPArrayKCharSmallDict(smallDictt *self, char key, smallArrayt *array);
136 internal smallDictt* setPDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict);
138 internal smallDictt* setPSmallStringKCharSmallDict(smallDictt *self, char key, smallStringt *string);
140 internal smallDictt* setNFreePDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict);
142 internal smallDictt* setNFreePSmallStringKCharSmallDict(smallDictt *self, char key, smallStringt *string);
143 internal baset* getSmallDict(smallDictt *self, const char *key);
144 internal undefinedt* getUndefinedSmallDict(smallDictt *self, const char *key);
145 internal bool getBoolSmallDict(smallDictt *self, const char *key);
146 internal bool* getBoolPSmallDict(smallDictt *self, const char *key);
147 internal double getDoubleSmallDict(smallDictt *self, const char *key);
148 internal double* getDoublePSmallDict(smallDictt *self, const char *key);
149 internal int64_t getIntSmallDict(smallDictt *self, const char *key);
150 internal int64_t* getIntPSmallDict(smallDictt *self, const char *key);
151 internal int32_t getInt32SmallDict(smallDictt *self, const char *key);
152 internal int32_t* getInt32PSmallDict(smallDictt *self, const char *key);
153 internal uint64_t getUintSmallDict(smallDictt *self, const char *key);
154 internal uint64_t* getUintPSmallDict(smallDictt *self, const char *key);
155 internal uint32_t getUint32SmallDict(smallDictt *self, const char *key);
156 internal uint32_t* getUint32PSmallDict(smallDictt *self, const char *key);
157 internal char* getSSmallDict(smallDictt *self, const char *key);
158 internal smallDictt* getDictSmallDict(smallDictt *self, const char *key);
159 internal smallArrayt* getArraySmallDict(smallDictt *self, const char *key);
160 internal smallBoolt* getSmallBoolSmallDict(smallDictt *self, const char *key);
161 internal smallBytest* getSmallBytesSmallDict(smallDictt *self, const char *key);
162 internal smallDoublet* getSmallDoubleSmallDict(smallDictt *self, const char *key);
163 internal smallIntt* getSmallIntSmallDict(smallDictt *self, const char *key);
164 internal smallJsont* getSmallJsonSmallDict(smallDictt *self, const char *key);
165 internal smallStringt* getSmallStringSmallDict(smallDictt *self, const char *key);
166 internal void* getVoidSmallDict(smallDictt *self, const char *key);
167 internal smallContainert* getSmallContainerSmallDict(smallDictt *self, const char *key);
168 internal baset* getKCharSmallDict(smallDictt *self, char key);
169 internal undefinedt* getUndefinedKCharSmallDict(smallDictt *self, char key);
170 internal bool getBoolKCharSmallDict(smallDictt *self, char key);
171 internal bool* getBoolPKCharSmallDict(smallDictt *self, char key);
172 internal double getDoubleKCharSmallDict(smallDictt *self, char key);
173 internal double* getDoublePKCharSmallDict(smallDictt *self, char key);
174 internal int64_t getIntKCharSmallDict(smallDictt *self, char key);
175 internal int64_t* getIntPKCharSmallDict(smallDictt *self, char key);
176 internal int32_t getInt32KCharSmallDict(smallDictt *self, char key);
177 internal int32_t* getInt32PKCharSmallDict(smallDictt *self, char key);
178 internal uint64_t getUintKCharSmallDict(smallDictt *self, char key);
179 internal uint64_t* getUintPKCharSmallDict(smallDictt *self, char key);
180 internal uint32_t getUint32KCharSmallDict(smallDictt *self, char key);
181 internal uint32_t* getUint32PKCharSmallDict(smallDictt *self, char key);
182 internal char* getSKCharSmallDict(smallDictt *self, char key);
183 internal smallDictt* getDictKCharSmallDict(smallDictt *self, char key);
184 internal smallArrayt* getArrayKCharSmallDict(smallDictt *self, char key);
185 internal smallBoolt* getSmallBoolKCharSmallDict(smallDictt *self, char key);
186 internal smallBytest* getSmallBytesKCharSmallDict(smallDictt *self, char key);
187 internal smallDoublet* getSmallDoubleKCharSmallDict(smallDictt *self, char key);
188 internal smallIntt* getSmallIntKCharSmallDict(smallDictt *self, char key);
189 internal smallJsont* getSmallJsonKCharSmallDict(smallDictt *self, char key);
190 internal smallStringt* getSmallStringKCharSmallDict(smallDictt *self, char key);
191 internal void* getVoidKCharSmallDict(smallDictt *self, char key);
193 internal baset* getNDupSmallDict(smallDictt *self, const char *key);
194 internal undefinedt* getNDupUndefinedSmallDict(smallDictt *self, const char *key);
195 internal bool getNDupBoolSmallDict(smallDictt *self, const char *key);
196 internal double getNDupDoubleSmallDict(smallDictt *self, const char *key);
197 internal int64_t getNDupIntSmallDict(smallDictt *self, const char *key);
198 internal int32_t getNDupInt32SmallDict(smallDictt *self, const char *key);
199 internal uint64_t getNDupUintSmallDict(smallDictt *self, const char *key);
200 internal uint32_t getNDupUint32SmallDict(smallDictt *self, const char *key);
201 internal char* getNDupSSmallDict(smallDictt *self, const char *key);
202 internal smallDictt* getNDupDictSmallDict(smallDictt *self, const char *key);
203 internal smallArrayt* getNDupArraySmallDict(smallDictt *self, const char *key);
204 internal smallBoolt* getNDupSmallBoolSmallDict(smallDictt *self, const char *key);
205 internal smallBytest* getNDupSmallBytesSmallDict(smallDictt *self, const char *key);
206 internal smallDoublet* getNDupSmallDoubleSmallDict(smallDictt *self, const char *key);
207 internal smallIntt* getNDupSmallIntSmallDict(smallDictt *self, const char *key);
208 internal smallJsont* getNDupSmallJsonSmallDict(smallDictt *self, const char *key);
209 internal smallStringt* getNDupSmallStringSmallDict(smallDictt *self, const char *key);
210 internal void* getNDupVoidSmallDict(smallDictt *self, const char *key);
211 internal smallContainert* getNDupSmallContainerSmallDict(smallDictt *self, const char *key);
212 internal baset* getNDupKCharSmallDict(smallDictt *self, char key);
213 internal undefinedt* getNDupUndefinedKCharSmallDict(smallDictt *self, char key);
214 internal bool getNDupBoolKCharSmallDict(smallDictt *self, char key);
215 internal double getNDupDoubleKCharSmallDict(smallDictt *self, char key);
216 internal int64_t getNDupIntKCharSmallDict(smallDictt *self, char key);
217 internal int32_t getNDupInt32KCharSmallDict(smallDictt *self, char key);
218 internal uint64_t getNDupUintKCharSmallDict(smallDictt *self, char key);
219 internal uint32_t getNDupUint32KCharSmallDict(smallDictt *self, char key);
220 internal char* getNDupSKCharSmallDict(smallDictt *self, char key);
221 internal smallDictt* getNDupDictKCharSmallDict(smallDictt *self, char key);
222 internal smallArrayt* getNDupArrayKCharSmallDict(smallDictt *self, char key);
223 internal smallBoolt* getNDupSmallBoolKCharSmallDict(smallDictt *self, char key);
224 internal smallBytest* getNDupSmallBytesKCharSmallDict(smallDictt *self, char key);
225 internal smallDoublet* getNDupSmallDoubleKCharSmallDict(smallDictt *self, char key);
226 internal smallIntt* getNDupSmallIntKCharSmallDict(smallDictt *self, char key);
227 internal smallJsont* getNDupSmallJsonKCharSmallDict(smallDictt *self, char key);
228 internal smallStringt* getNDupSmallStringKCharSmallDict(smallDictt *self, char key);
229 internal void* getNDupVoidKCharSmallDict(smallDictt *self, char key);
231 internal double getNumSmallDict(smallDictt *self, const char *key);
232 internal baset* cropElemSmallDict(smallDictt *self, const char* key);
233 internal undefinedt* cropElemUndefinedSmallDict(smallDictt *self, const char* key);
234 internal bool cropElemBoolSmallDict(smallDictt *self, const char* key);
235 internal double cropElemDoubleSmallDict(smallDictt *self, const char* key);
236 internal int64_t cropElemIntSmallDict(smallDictt *self, const char* key);
237 internal int32_t cropElemInt32SmallDict(smallDictt *self, const char* key);
238 internal uint64_t cropElemUintSmallDict(smallDictt *self, const char* key);
239 internal uint32_t cropElemUint32SmallDict(smallDictt *self, const char* key);
240 internal char* cropElemSSmallDict(smallDictt *self, const char* key);
241 internal smallDictt* cropElemDictSmallDict(smallDictt *self, const char* key);
242 internal smallArrayt* cropElemArraySmallDict(smallDictt *self, const char* key);
243 internal smallBoolt* cropElemSmallBoolSmallDict(smallDictt *self, const char* key);
244 internal smallBytest* cropElemSmallBytesSmallDict(smallDictt *self, const char* key);
245 internal smallDoublet* cropElemSmallDoubleSmallDict(smallDictt *self, const char* key);
246 internal smallIntt* cropElemSmallIntSmallDict(smallDictt *self, const char* key);
247 internal smallJsont* cropElemSmallJsonSmallDict(smallDictt *self, const char* key);
248 internal smallStringt* cropElemSmallStringSmallDict(smallDictt *self, const char* key);
249 internal void* cropElemVoidSmallDict(smallDictt *self, const char* key);
250 internal smallContainert* cropElemSmallContainerSmallDict(smallDictt *self, const char* key);
251 internal smallDictt* delSmallDict(smallDictt *self, const char *key);
252 internal smallDictt* delKCharSmallDict(smallDictt *self, char key);
253 internal smallDictt* removeSmallDict(smallDictt *self, const char *key);
254 internal smallDictt* removeKCharSmallDict(smallDictt *self, char key);
255 internal bool hasSmallDict(smallDictt *self, const char *key);
256 internal bool hasKCharSmallDict(smallDictt *self, char key);
257 internal char* keyBySmallDict(smallDictt *self, baset *value);
258 internal char* keyByUndefinedSmallDict(smallDictt *self, undefinedt *u);
259 internal char* keyByBoolSmallDict(smallDictt *self, bool value);
260 internal char* keyByDoubleSmallDict(smallDictt *self, double value);
261 internal char* keyByIntSmallDict(smallDictt *self, int64_t value);
262 internal char* keyBySSmallDict(smallDictt *self, const char *string);
263 internal char* keyByCharSmallDict(smallDictt *self, char c);
264 internal char* keyByDictSmallDict(smallDictt *self, smallDictt *dict);
265 internal char* keyByArraySmallDict(smallDictt *self, smallArrayt *array);
266 internal char* keyByArraycSmallDict(smallDictt *self, char **array);
267 internal char* keyByCArraycSmallDict(smallDictt *self, const char **array);
268 internal char* keyBySmallBoolSmallDict(smallDictt *self, smallBoolt *value);
269 internal char* keyBySmallBytesSmallDict(smallDictt *self, smallBytest *value);
271 internal char* keyBySmallIntSmallDict(smallDictt *self, smallIntt *value);
272 internal char* keyBySmallJsonSmallDict(smallDictt *self, smallJsont *string);
273 internal char* keyBySmallStringSmallDict(smallDictt *self, smallStringt *string);
274 internal char* keyBySmallContainerSmallDict(smallDictt *self, smallContainert *container);
275 internal char* icKeyBySmallDict(smallDictt *self, baset *value);
276 internal char* icKeyBySSmallDict(smallDictt *self, const char *string);
277 internal char* icKeyByCharSmallDict(smallDictt *self, char c);
278 internal char* icKeyByDictSmallDict(smallDictt *self, smallDictt *dict);
279 internal char* icKeyByArraySmallDict(smallDictt *self, smallArrayt *array);
280 internal char* icKeyByArraycSmallDict(smallDictt *self, char **array);
281 internal char* icKeyByCArraycSmallDict(smallDictt *self, const char **array);
282 internal char* icKeyBySmallJsonSmallDict(smallDictt *self, smallJsont *string);
283 internal char* icKeyBySmallStringSmallDict(smallDictt *self, smallStringt *string);
284 internal smallDictt* trimSmallDict(smallDictt *self);
285 internal char** keysSmallDict(smallDictt *self);
287 internal smallArrayt* valuesSmallDict(smallDictt *self);
294 internal bool equalSmallDictBase(smallDictt* self, baset* p2);
295 internal bool equalSmallDictSmallJson(smallDictt* self, smallJsont* p2);
296 internal bool equalSmallDict(smallDictt* self, smallDictt* p2);
297 internal bool icEqualSmallDictBase(smallDictt* self, baset* p2);
298 internal bool icEqualSmallDictSmallJson(smallDictt* self, smallJsont* p2);
299 internal bool icEqualSmallDict(smallDictt* self, smallDictt* p2);
300 internal size_t lenSmallDict(smallDictt *self);
301 internal smallDictt* emptySmallDict(smallDictt *self);
302 internal bool isEmptySmallDict(smallDictt *self);
303 internal void enumerateSmallDictF(smallDictt *self, void *closure, enumerateElementSmallDictFt funcElem);
304 internal baset* iterStartSmallDict(smallDictt *self);
305 internal const char* iterStartKeySmallDict(smallDictt *self);
306 internal baset* iterNextSmallDict(smallDictt *self);
307 internal const char* iterNextKeySmallDict(smallDictt *self);
308 internal baset* iterElementSmallDict(smallDictt *self);
309 internal const char* iterKeySmallDict(smallDictt *self);
316 internal smallDictt* zipArraySmallDict(smallDictt *self, char** keys, smallArrayt *values);
317 internal smallDictt* zipCArraySmallDict(smallDictt *self, const char** keys, smallArrayt *values);
319 internal smallDictt* zipCArraySmallJsonSmallDict(smallDictt *self, const char** keys, smallJsont *values);
320 internal smallDictt* zipArrayArraySmallDict(smallDictt *self, char** keys, char** values);
321 internal smallDictt* zipCArrayArraySmallDict(smallDictt *self, const char** keys, char** values);
322 internal smallDictt* zipArrayCArraySmallDict(smallDictt *self, char** keys, const char** values);
323 internal smallDictt* zipCArrayCArraySmallDict(smallDictt *self, const char** keys, const char** values);
325 internal smallDictt* zipVCArraySmallDict(smallDictt *self, smallArrayt *keys, const char** values);
326 internal smallDictt* fromArraySmallDict(smallDictt *self, smallArrayt *items);
327 internal smallArrayt* toArraySmallDict(smallDictt *self);
328 internal bool writeFileSmallDict(smallDictt *self, const char *filePath);
329 internal bool writeFileSmallJsonSmallDict(smallDictt *self, smallJsont *filePath);
330 internal bool writeFileSmallStringSmallDict(smallDictt *self, smallStringt *filePath);
331 internal bool writeStreamSmallDict(smallDictt *self, FILE *fp);
332 internal bool appendFileSmallDict(smallDictt *self, const char *filePath);
333 internal bool appendFileSmallStringSmallDict(smallDictt *self, smallStringt *filePath);
334 internal void logSmallDict(smallDictt *self);
335 internal const char* typeStringSmallDict(smallDictt *self, const char *key);
336 internal smallStringt* typeSmallStringSmallDict(smallDictt *self, const char *key);
337 internal const char* typeStringKCharSmallDict(smallDictt *self, char key);
338 internal smallStringt* typeSmallStringKCharSmallDict(smallDictt *self, char key);
339 internal char typeSmallDict(smallDictt *self, const char *key);
340 internal char typeKCharSmallDict(smallDictt *self, char key);
342 internal bool isETypeSmallDict(smallDictt *self, const char *key, const char *type);
343 internal bool isEUndefinedSmallDict(smallDictt *self, const char *key);
344 internal bool isEBoolSmallDict(smallDictt *self, const char *key);
345 internal bool isEContainerSmallDict(smallDictt *self, const char *key);
346 internal bool isEDictSmallDict(smallDictt *self, const char *key);
347 internal bool isEDoubleSmallDict(smallDictt *self, const char *key);
348 internal bool isEIntSmallDict(smallDictt *self, const char *key);
349 internal bool isEStringSmallDict(smallDictt *self, const char *key);
350 internal bool isEFaststringSmallDict(smallDictt *self, const char *key);
351 internal bool isEArraySmallDict(smallDictt *self, const char *key);
352 internal bool isEBytesSmallDict(smallDictt *self, const char *key);
353 internal bool areAllETypeSmallDict(smallDictt *self, const char *type);
354 internal bool areAllEUndefinedSmallDict(smallDictt *self);
355 internal bool areAllEBoolSmallDict(smallDictt *self);
356 internal bool areAllEContainerSmallDict(smallDictt *self);
357 internal bool areAllEDictSmallDict(smallDictt *self);
358 internal bool areAllEDoubleSmallDict(smallDictt *self);
359 internal bool areAllEIntSmallDict(smallDictt *self);
360 internal bool areAllEStringSmallDict(smallDictt *self);
361 internal bool areAllEFaststringSmallDict(smallDictt *self);
362 internal bool areAllEArraySmallDict(smallDictt *self);
363 internal bool areAllEBytesSmallDict(smallDictt *self);
366 smallDictt* setSmallDictG (smallDictt *self, const char *key, baset *value);
367 baset* getSmallDictG (smallDictt *self, baset* retType UNUSED, const char *key);
368 undefinedt* getUndefinedSmallDictG (smallDictt *self, undefinedt* retType UNUSED, const char *key);
369 bool getBoolSmallDictG (smallDictt *self, bool retType UNUSED, const char *key);
370 bool* getBoolPSmallDictG (smallDictt *self, bool* retType UNUSED, const char *key);
371 double getDoubleSmallDictG (smallDictt *self, double retType UNUSED, const char *key);
372 double* getDoublePSmallDictG (smallDictt *self, double* retType UNUSED, const char *key);
373 int64_t getIntSmallDictG (smallDictt *self, int64_t retType UNUSED, const char *key);
374 int64_t* getIntPSmallDictG (smallDictt *self, int64_t* retType UNUSED, const char *key);
375 int32_t getInt32SmallDictG (smallDictt *self, int32_t retType UNUSED, const char *key);
376 int32_t* getInt32PSmallDictG (smallDictt *self, int32_t* retType UNUSED, const char *key);
377 uint64_t getUintSmallDictG (smallDictt *self, uint64_t retType UNUSED, const char *key);
378 uint64_t* getUintPSmallDictG (smallDictt *self, uint64_t* retType UNUSED, const char *key);
379 uint32_t getUint32SmallDictG (smallDictt *self, uint32_t retType UNUSED, const char *key);
380 uint32_t* getUint32PSmallDictG (smallDictt *self, uint32_t* retType UNUSED, const char *key);
381 char* getSSmallDictG (smallDictt *self, char* retType UNUSED, const char *key);
382 smallDictt* getDictSmallDictG (smallDictt *self, smallDictt* retType UNUSED, const char *key);
383 smallArrayt* getArraySmallDictG (smallDictt *self, smallArrayt* retType UNUSED, const char *key);
384 smallBoolt* getSmallBoolSmallDictG (smallDictt *self, smallBoolt* retType UNUSED, const char *key);
385 smallBytest* getSmallBytesSmallDictG (smallDictt *self, smallBytest* retType UNUSED, const char *key);
386 smallDoublet* getSmallDoubleSmallDictG (smallDictt *self, smallDoublet* retType UNUSED, const char *key);
387 smallIntt* getSmallIntSmallDictG (smallDictt *self, smallIntt* retType UNUSED, const char *key);
388 smallJsont* getSmallJsonSmallDictG(smallDictt *self, smallJsont* retType UNUSED, const char *key);
389 smallStringt* getSmallStringSmallDictG (smallDictt *self, smallStringt* retType UNUSED, const char *key);
390 void* getVoidSmallDictG (smallDictt *self, void* retType UNUSED, const char *key);
392 baset* getKCharSmallDictG (smallDictt *self, baset* retType UNUSED, char key);
394 bool getBoolKCharSmallDictG (smallDictt *self, bool retType UNUSED, char key);
395 bool* getBoolPKCharSmallDictG (smallDictt *self, bool* retType UNUSED, char key);
396 double getDoubleKCharSmallDictG (smallDictt *self, double retType UNUSED, char key);
397 double* getDoublePKCharSmallDictG (smallDictt *self, double* retType UNUSED, char key);
398 int64_t getIntKCharSmallDictG (smallDictt *self, int64_t retType UNUSED, char key);
399 int64_t* getIntPKCharSmallDictG (smallDictt *self, int64_t* retType UNUSED, char key);
400 int32_t getInt32KCharSmallDictG (smallDictt *self, int32_t retType UNUSED, char key);
401 int32_t* getInt32PKCharSmallDictG (smallDictt *self, int32_t* retType UNUSED, char key);
402 uint64_t getUintKCharSmallDictG (smallDictt *self, uint64_t retType UNUSED, char key);
403 uint64_t* getUintPKCharSmallDictG (smallDictt *self, uint64_t* retType UNUSED, char key);
404 uint32_t getUint32KCharSmallDictG (smallDictt *self, uint32_t retType UNUSED, char key);
405 uint32_t* getUint32PKCharSmallDictG (smallDictt *self, uint32_t* retType UNUSED, char key);
406 char* getSKCharSmallDictG (smallDictt *self, char* retType UNUSED, char key);
407 smallDictt* getDictKCharSmallDictG (smallDictt *self, smallDictt* retType UNUSED, char key);
412 smallIntt* getSmallIntKCharSmallDictG (smallDictt *self, smallIntt* retType UNUSED, char key);
415 void* getVoidKCharSmallDictG (smallDictt *self, void* retType UNUSED, char key);
417 baset* getNDupSmallDictG (smallDictt *self, baset* retType UNUSED, const char *key);
418 undefinedt* getNDupUndefinedSmallDictG (smallDictt *self, undefinedt* retType UNUSED, const char *key);
419 bool getNDupBoolSmallDictG (smallDictt *self, bool retType UNUSED, const char *key);
420 double getNDupDoubleSmallDictG (smallDictt *self, double retType UNUSED, const char *key);
421 int64_t getNDupIntSmallDictG (smallDictt *self, int64_t retType UNUSED, const char *key);
422 int32_t getNDupInt32SmallDictG (smallDictt *self, int32_t retType UNUSED, const char *key);
423 uint64_t getNDupUintSmallDictG (smallDictt *self, uint64_t retType UNUSED, const char *key);
424 uint32_t getNDupUint32SmallDictG (smallDictt *self, uint32_t retType UNUSED, const char *key);
425 char* getNDupSSmallDictG (smallDictt *self, char* retType UNUSED, const char *key);
426 smallDictt* getNDupDictSmallDictG (smallDictt *self, smallDictt* retType UNUSED, const char *key);
427 smallArrayt* getNDupArraySmallDictG (smallDictt *self, smallArrayt* retType UNUSED, const char *key);
428 smallBoolt* getNDupSmallBoolSmallDictG (smallDictt *self, smallBoolt* retType UNUSED, const char *key);
429 smallBytest* getNDupSmallBytesSmallDictG (smallDictt *self, smallBytest* retType UNUSED, const char *key);
430 smallDoublet* getNDupSmallDoubleSmallDictG (smallDictt *self, smallDoublet* retType UNUSED, const char *key);
431 smallIntt* getNDupSmallIntSmallDictG (smallDictt *self, smallIntt* retType UNUSED, const char *key);
432 smallJsont* getNDupSmallJsonSmallDictG (smallDictt *self, smallJsont* retType UNUSED, const char *key);
433 smallStringt* getNDupSmallStringSmallDictG (smallDictt *self, smallStringt* retType UNUSED, const char *key);
434 void* getNDupVoidSmallDictG (smallDictt *self, void* retType UNUSED, const char *key);
436 baset* getNDupKCharSmallDictG (smallDictt *self, baset* retType UNUSED, char key);
438 bool getNDupBoolKCharSmallDictG (smallDictt *self, bool retType UNUSED, char key);
439 double getNDupDoubleKCharSmallDictG (smallDictt *self, double retType UNUSED, char key);
440 int64_t getNDupIntKCharSmallDictG (smallDictt *self, int64_t retType UNUSED, char key);
441 int32_t getNDupInt32KCharSmallDictG (smallDictt *self, int32_t retType UNUSED, char key);
442 uint64_t getNDupUintKCharSmallDictG (smallDictt *self, uint64_t retType UNUSED, char key);
443 uint32_t getNDupUint32KCharSmallDictG (smallDictt *self, uint32_t retType UNUSED, char key);
444 char* getNDupSKCharSmallDictG (smallDictt *self, char* retType UNUSED, char key);
453 void* getNDupVoidKCharSmallDictG (smallDictt *self, void* retType UNUSED, char key);
455 smallDictt* setUndefinedSmallDictG(smallDictt *self, const char *key, void *value UNUSED);
456 smallDictt* setBoolSmallDictG (smallDictt *self, const char *key, bool value);
457 smallDictt* setDoubleSmallDictG (smallDictt *self, const char *key, double value);
458 smallDictt* setIntSmallDictG (smallDictt *self, const char *key, int64_t value);
459 smallDictt* setSSmallDictG (smallDictt *self, const char *key, const char *string);
460 smallDictt* setCharSmallDictG (smallDictt *self, const char *key, char c);
461 smallDictt* setDictSmallDictG (smallDictt *self, const char *key, smallDictt *dict);
462 smallDictt* setArraySmallDictG (smallDictt *self, const char *key, smallArrayt *array);
463 smallDictt* setArraycSmallDictG (smallDictt *self, const char *key, char **array);
464 smallDictt* setCArraycSmallDictG (smallDictt *self, const char *key, const char **array);
465 smallDictt* setVoidSmallDictG (smallDictt *self, const char *key, void *value);
466 smallDictt* setSmallBoolSmallDictG (smallDictt *self, const char *key, smallBoolt *value);
469 smallDictt* setSmallIntSmallDictG (smallDictt *self, const char *key, smallIntt *value);
470 smallDictt* setSmallJsonSmallDictG(smallDictt *self, const char *key, smallJsont *value);
471 smallDictt* setSmallStringSmallDictG (smallDictt *self, const char *key, smallStringt *string);
472 smallDictt* setSmallContainerSmallDictG(smallDictt *self, const char *key, smallContainert *container);
473 smallDictt* setKCharSmallDictG (smallDictt *self, char key, baset *value);
475 smallDictt* setBoolKCharSmallDictG (smallDictt *self, char key, bool value);
476 smallDictt* setDoubleKCharSmallDictG (smallDictt *self, char key, double value);
477 smallDictt* setIntKCharSmallDictG (smallDictt *self, char key, int64_t value);
478 smallDictt* setSKCharSmallDictG (smallDictt *self, char key, const char *string);
479 smallDictt* setCharKCharSmallDictG (smallDictt *self, char key, char c);
480 smallDictt* setDictKCharSmallDictG (smallDictt *self, char key, smallDictt *dict);
482 smallDictt* setArraycKCharSmallDictG (smallDictt *self, char key, char **array);
483 smallDictt* setCArraycKCharSmallDictG (smallDictt *self, char key, const char **array);
484 smallDictt* setVoidKCharSmallDictG (smallDictt *self, char key, void *value);
492 smallDictt* setNFreeSmallDictG (smallDictt *self, const char *key, baset *value);
494 smallDictt* setNFreeSSmallDictG (smallDictt *self, const char *key, char *string);
495 smallDictt* setNFreeDictSmallDictG (smallDictt *self, const char *key, smallDictt *dict);
497 smallDictt* setNFreeArraycSmallDictG (smallDictt *self, const char *key, char **array);
503 smallDictt* setNFreeSmallStringSmallDictG (smallDictt *self, const char *key, smallStringt *string);
504 smallDictt* setNFreeSmallContainerSmallDictG(smallDictt *self, const char *key, smallContainert *container);
507 smallDictt* setNFreeSKCharSmallDictG (smallDictt *self, char key, char *string);
510 smallDictt* setNFreeArraycKCharSmallDictG (smallDictt *self, char key, char **array);
518 smallDictt* setPDictSmallDictG (smallDictt *self, const char *key, smallDictt *dict);
519 smallDictt* setPArraySmallDictG (smallDictt *self, const char *key, smallArrayt *array);
520 smallDictt* setPSmallJsonSmallDictG(smallDictt *self, const char *key, smallJsont *json);
521 smallDictt* setPSmallStringSmallDictG(smallDictt *self, const char *key, smallStringt *string);
522 smallDictt* setNFreePDictSmallDictG (smallDictt *self, const char *key, smallDictt *dict);
525 smallDictt* setNFreePSmallStringSmallDictG(smallDictt *self, const char *key, smallStringt *string);
527 smallDictt* setPDictKCharSmallDictG (smallDictt *self, char key, smallDictt *dict);
538 bool equalSmallDictBaseG(smallDictt* self, baset* p2);
540 bool equalSmallDictG(smallDictt* self, smallDictt* p2);
541 bool icEqualSmallDictBaseG(smallDictt* self, baset* p2);
543 bool icEqualSmallDictG(smallDictt* self, smallDictt* p2);
544 double getNumSmallDictG(smallDictt *self, const char *key);
545 baset* cropElemSmallDictG (smallDictt *self, const char* key);
546 undefinedt* cropElemUndefinedSmallDictG (smallDictt *self, const char* key);
547 bool cropElemBoolSmallDictG (smallDictt *self, const char* key);
548 double cropElemDoubleSmallDictG (smallDictt *self, const char* key);
549 int64_t cropElemIntSmallDictG (smallDictt *self, const char* key);
550 int32_t cropElemInt32SmallDictG (smallDictt *self, const char* key);
551 uint64_t cropElemUintSmallDictG (smallDictt *self, const char* key);
552 uint32_t cropElemUint32SmallDictG (smallDictt *self, const char* key);
553 char* cropElemSSmallDictG (smallDictt *self, const char* key);
554 smallDictt* cropElemDictSmallDictG (smallDictt *self, const char* key);
555 smallArrayt* cropElemArraySmallDictG (smallDictt *self, const char* key);
556 smallBoolt* cropElemSmallBoolSmallDictG (smallDictt *self, const char* key);
557 smallBytest* cropElemSmallBytesSmallDictG (smallDictt *self, const char* key);
558 smallDoublet* cropElemSmallDoubleSmallDictG (smallDictt *self, const char* key);
559 smallIntt* cropElemSmallIntSmallDictG (smallDictt *self, const char* key);
560 smallJsont* cropElemSmallJsonSmallDictG (smallDictt *self, const char* key);
561 smallStringt* cropElemSmallStringSmallDictG (smallDictt *self, const char* key);
562 void* cropElemVoidSmallDictG (smallDictt *self, const char* key);
564 smallDictt* delSmallDictG (smallDictt *self, const char *key, int unused UNUSED);
565 smallDictt* delKCharSmallDictG (smallDictt *self, char key, int unused UNUSED);
566 smallDictt* delElemSmallDictG (smallDictt *self, const char *key);
568 smallDictt* removeSmallDictG (smallDictt *self, const char *key, int unused UNUSED);
569 smallDictt* removeKCharSmallDictG (smallDictt *self, char key, int unused UNUSED);
570 smallDictt* removeElemSmallDictG (smallDictt *self, const char *key);
572 bool hasSmallDictG (smallDictt *self, const char *key);
573 bool hasKCharSmallDictG (smallDictt *self, char key);
574 char* keyBySmallDictG(smallDictt *self, baset *value);
576 char* keyByBoolSmallDictG(smallDictt *self, bool value);
577 char* keyByDoubleSmallDictG(smallDictt *self, double value);
578 char* keyByIntSmallDictG(smallDictt *self, int64_t value);
579 char* keyBySSmallDictG(smallDictt *self, const char *string);
580 char* keyByCharSmallDictG(smallDictt *self, char c);
581 char* keyByDictSmallDictG(smallDictt *self, smallDictt *dict);
583 char* keyByArraycSmallDictG(smallDictt *self, char **array);
584 char* keyByCArraycSmallDictG(smallDictt *self, const char **array);
589 char* keyBySmallJsonSmallDictG(smallDictt *self, smallJsont *string);
592 char* icKeyBySmallDictG(smallDictt *self, baset *value);
593 char* icKeyBySSmallDictG(smallDictt *self, const char *string);
594 char* icKeyByCharSmallDictG(smallDictt *self, char c);
595 char* icKeyByDictSmallDictG(smallDictt *self, smallDictt *dict);
597 char* icKeyByArraycSmallDictG(smallDictt *self, char **array);
598 char* icKeyByCArraycSmallDictG(smallDictt *self, const char **array);
599 char* icKeyBySmallJsonSmallDictG(smallDictt *self, smallJsont *string);
603 size_t lenSmallDictG (smallDictt *self);
605 bool isEmptySmallDictG (smallDictt *self);
617 smallDictt* zipCArrayArraySmallDictG(smallDictt *self, const char** keys, char** values);
618 smallDictt* zipArrayCArraySmallDictG(smallDictt *self, char** keys, const char** values);
619 smallDictt* zipCArrayCArraySmallDictG(smallDictt *self, const char** keys, const char** values);
624 bool writeFileSmallDictG (smallDictt *self, const char *filePath);
625 bool writeFileSmallJsonSmallDictG (smallDictt *self, smallJsont *filePath);
627 bool writeStreamSmallDictG (smallDictt *self, FILE *fp);
628 bool appendFileSmallDictG (smallDictt *self, const char *filePath);
630 void logSmallDictG(smallDictt *self);
631 smallStringt* typeSmallStringSmallDictG(smallDictt *self, const char *key);
632 const char* typeStringKCharSmallDictG (smallDictt *self, char key);
634 
636 
637  self->type = "smallDict";
638  if (!smallDictF) {
639  isError(smallDictF, malloc(sizeof(smallDictFunctionst))) {
640  self->f = NULL;
641  return;
642  }
643  registerMethodsSmallDict(smallDictF);
644  }
645  self->f = smallDictF;
646 
647  self->d = NULL;
648  self->iterIndex = -1;
649  self->iterKey = NULL;
650  self->iterElement = NULL;
651  self->iterElementDataType = 0;
652 }
653 
655 
656  f->free = freeSmallDict;
660 
661  f->escape = escapeSmallDict;
662  f->dispose = disposeSmallDict;
663  f->reset = resetSmallDict;
664  f->smash = smashSmallDict;
665  f->finish = finishSmallDict;
666  f->help = helpSmallDict;
667  f->getso = getsoSmallDict;
668  f->setso = setsoSmallDict;
669  f->mirror = mirrorSmallDict;
670  f->set = setSmallDict;
671  f->setUndefined = setUndefinedSmallDict;
672  f->setBool = setBoolSmallDict;
673  f->setDouble = setDoubleSmallDict;
674  f->setInt = setIntSmallDict;
675  f->setS = setSSmallDict;
676  f->setChar = setCharSmallDict;
677  f->setDict = setDictSmallDict;
678  f->setArray = setArraySmallDict;
679  f->setArrayc = setArraycSmallDict;
680  f->setCArrayc = setCArraycSmallDict;
681  f->setSmallBool = setSmallBoolSmallDict;
682  f->setSmallBytes = setSmallBytesSmallDict;
683  f->setSmallDouble = setSmallDoubleSmallDict;
684  f->setSmallInt = setSmallIntSmallDict;
685  f->setSmallJson = setSmallJsonSmallDict;
686  f->setSmallString = setSmallStringSmallDict;
687  f->setSmallContainer = setSmallContainerSmallDict;
688  f->setKChar = setKCharSmallDict;
689  f->setUndefinedKChar = setUndefinedKCharSmallDict;
690  f->setBoolKChar = setBoolKCharSmallDict;
691  f->setDoubleKChar = setDoubleKCharSmallDict;
692  f->setIntKChar = setIntKCharSmallDict;
693  f->setSKChar = setSKCharSmallDict;
694  f->setCharKChar = setCharKCharSmallDict;
695  f->setDictKChar = setDictKCharSmallDict;
696  f->setArrayKChar = setArrayKCharSmallDict;
697  f->setArraycKChar = setArraycKCharSmallDict;
698  f->setCArraycKChar = setCArraycKCharSmallDict;
699  f->setSmallBoolKChar = setSmallBoolKCharSmallDict;
700  f->setSmallBytesKChar = setSmallBytesKCharSmallDict;
701  f->setSmallDoubleKChar = setSmallDoubleKCharSmallDict;
702  f->setSmallIntKChar = setSmallIntKCharSmallDict;
703  f->setSmallJsonKChar = setSmallJsonKCharSmallDict;
704  f->setSmallStringKChar = setSmallStringKCharSmallDict;
705  f->setSmallContainerKChar = setSmallContainerKCharSmallDict;
706  f->setNFree = setNFreeSmallDict;
707  f->setNFreeUndefined = setNFreeUndefinedSmallDict;
708  f->setNFreeS = setNFreeSSmallDict;
709  f->setNFreeDict = setNFreeDictSmallDict;
710  f->setNFreeArray = setNFreeArraySmallDict;
711  f->setNFreeArrayc = setNFreeArraycSmallDict;
712  f->setNFreeSmallBool = setNFreeSmallBoolSmallDict;
713  f->setNFreeSmallBytes = setNFreeSmallBytesSmallDict;
714  f->setNFreeSmallDouble = setNFreeSmallDoubleSmallDict;
715  f->setNFreeSmallInt = setNFreeSmallIntSmallDict;
716  f->setNFreeSmallJson = setNFreeSmallJsonSmallDict;
717  f->setNFreeSmallString = setNFreeSmallStringSmallDict;
718  f->setNFreeSmallContainer = setNFreeSmallContainerSmallDict;
719  f->setNFreeKChar = setNFreeKCharSmallDict;
720  f->setNFreeUndefinedKChar = setNFreeUndefinedKCharSmallDict;
721  f->setNFreeSKChar = setNFreeSKCharSmallDict;
722  f->setNFreeDictKChar = setNFreeDictKCharSmallDict;
723  f->setNFreeArrayKChar = setNFreeArrayKCharSmallDict;
724  f->setNFreeArraycKChar = setNFreeArraycKCharSmallDict;
725  f->setNFreeSmallBoolKChar = setNFreeSmallBoolKCharSmallDict;
726  f->setNFreeSmallBytesKChar = setNFreeSmallBytesKCharSmallDict;
727  f->setNFreeSmallDoubleKChar = setNFreeSmallDoubleKCharSmallDict;
728  f->setNFreeSmallIntKChar = setNFreeSmallIntKCharSmallDict;
729  f->setNFreeSmallJsonKChar = setNFreeSmallJsonKCharSmallDict;
730  f->setNFreeSmallStringKChar = setNFreeSmallStringKCharSmallDict;
731  f->setNFreeSmallContainerKChar = setNFreeSmallContainerKCharSmallDict;
732  f->setPDict = setPDictSmallDict;
733  f->setPArray = setPArraySmallDict;
734  f->setPSmallJson = setPSmallJsonSmallDict;
735  f->setPSmallString = setPSmallStringSmallDict;
736  f->setNFreePDict = setNFreePDictSmallDict;
737  f->setNFreePArray = setNFreePArraySmallDict;
738  f->setNFreePSmallJson = setNFreePSmallJsonSmallDict;
739  f->setNFreePSmallString = setNFreePSmallStringSmallDict;
740  f->setPArrayKChar = setPArrayKCharSmallDict;
741  f->setPDictKChar = setPDictKCharSmallDict;
742  f->setPSmallJsonKChar = setPSmallJsonKCharSmallDict;
743  f->setPSmallStringKChar = setPSmallStringKCharSmallDict;
744  f->setNFreePArrayKChar = setNFreePArrayKCharSmallDict;
745  f->setNFreePDictKChar = setNFreePDictKCharSmallDict;
746  f->setNFreePSmallJsonKChar = setNFreePSmallJsonKCharSmallDict;
747  f->setNFreePSmallStringKChar = setNFreePSmallStringKCharSmallDict;
748  f->get = getSmallDict;
749  f->getUndefined = getUndefinedSmallDict;
750  f->getBool = getBoolSmallDict;
751  f->getBoolP = getBoolPSmallDict;
752  f->getDouble = getDoubleSmallDict;
753  f->getDoubleP = getDoublePSmallDict;
754  f->getInt = getIntSmallDict;
755  f->getIntP = getIntPSmallDict;
756  f->getInt32 = getInt32SmallDict;
757  f->getInt32P = getInt32PSmallDict;
758  f->getUint = getUintSmallDict;
759  f->getUintP = getUintPSmallDict;
760  f->getUint32 = getUint32SmallDict;
761  f->getUint32P = getUint32PSmallDict;
762  f->getS = getSSmallDict;
763  f->getDict = getDictSmallDict;
764  f->getArray = getArraySmallDict;
765  f->getSmallBool = getSmallBoolSmallDict;
766  f->getSmallBytes = getSmallBytesSmallDict;
767  f->getSmallDouble = getSmallDoubleSmallDict;
768  f->getSmallInt = getSmallIntSmallDict;
769  f->getSmallJson = getSmallJsonSmallDict;
770  f->getSmallString = getSmallStringSmallDict;
771  f->getVoid = getVoidSmallDict;
772  f->getSmallContainer = getSmallContainerSmallDict;
773  f->getKChar = getKCharSmallDict;
774  f->getUndefinedKChar = getUndefinedKCharSmallDict;
775  f->getBoolKChar = getBoolKCharSmallDict;
776  f->getBoolPKChar = getBoolPKCharSmallDict;
777  f->getDoubleKChar = getDoubleKCharSmallDict;
778  f->getDoublePKChar = getDoublePKCharSmallDict;
779  f->getIntKChar = getIntKCharSmallDict;
780  f->getIntPKChar = getIntPKCharSmallDict;
781  f->getInt32KChar = getInt32KCharSmallDict;
782  f->getInt32PKChar = getInt32PKCharSmallDict;
783  f->getUintKChar = getUintKCharSmallDict;
784  f->getUintPKChar = getUintPKCharSmallDict;
785  f->getUint32KChar = getUint32KCharSmallDict;
786  f->getUint32PKChar = getUint32PKCharSmallDict;
787  f->getSKChar = getSKCharSmallDict;
788  f->getDictKChar = getDictKCharSmallDict;
789  f->getArrayKChar = getArrayKCharSmallDict;
790  f->getSmallBoolKChar = getSmallBoolKCharSmallDict;
791  f->getSmallBytesKChar = getSmallBytesKCharSmallDict;
792  f->getSmallDoubleKChar = getSmallDoubleKCharSmallDict;
793  f->getSmallIntKChar = getSmallIntKCharSmallDict;
794  f->getSmallJsonKChar = getSmallJsonKCharSmallDict;
795  f->getSmallStringKChar = getSmallStringKCharSmallDict;
796  f->getVoidKChar = getVoidKCharSmallDict;
797  f->getSmallContainerKChar = getSmallContainerKCharSmallDict;
798  f->getNDup = getNDupSmallDict;
799  f->getNDupUndefined = getNDupUndefinedSmallDict;
800  f->getNDupBool = getNDupBoolSmallDict;
801  f->getNDupDouble = getNDupDoubleSmallDict;
802  f->getNDupInt = getNDupIntSmallDict;
803  f->getNDupInt32 = getNDupInt32SmallDict;
804  f->getNDupUint = getNDupUintSmallDict;
805  f->getNDupUint32 = getNDupUint32SmallDict;
806  f->getNDupS = getNDupSSmallDict;
807  f->getNDupDict = getNDupDictSmallDict;
808  f->getNDupArray = getNDupArraySmallDict;
809  f->getNDupSmallBool = getNDupSmallBoolSmallDict;
810  f->getNDupSmallBytes = getNDupSmallBytesSmallDict;
811  f->getNDupSmallDouble = getNDupSmallDoubleSmallDict;
812  f->getNDupSmallInt = getNDupSmallIntSmallDict;
813  f->getNDupSmallJson = getNDupSmallJsonSmallDict;
814  f->getNDupSmallString = getNDupSmallStringSmallDict;
815  f->getNDupVoid = getNDupVoidSmallDict;
816  f->getNDupSmallContainer = getNDupSmallContainerSmallDict;
817  f->getNDupKChar = getNDupKCharSmallDict;
818  f->getNDupUndefinedKChar = getNDupUndefinedKCharSmallDict;
819  f->getNDupBoolKChar = getNDupBoolKCharSmallDict;
820  f->getNDupDoubleKChar = getNDupDoubleKCharSmallDict;
821  f->getNDupIntKChar = getNDupIntKCharSmallDict;
822  f->getNDupInt32KChar = getNDupInt32KCharSmallDict;
823  f->getNDupUintKChar = getNDupUintKCharSmallDict;
824  f->getNDupUint32KChar = getNDupUint32KCharSmallDict;
825  f->getNDupSKChar = getNDupSKCharSmallDict;
826  f->getNDupDictKChar = getNDupDictKCharSmallDict;
827  f->getNDupArrayKChar = getNDupArrayKCharSmallDict;
828  f->getNDupSmallBoolKChar = getNDupSmallBoolKCharSmallDict;
829  f->getNDupSmallBytesKChar = getNDupSmallBytesKCharSmallDict;
830  f->getNDupSmallDoubleKChar = getNDupSmallDoubleKCharSmallDict;
831  f->getNDupSmallIntKChar = getNDupSmallIntKCharSmallDict;
832  f->getNDupSmallJsonKChar = getNDupSmallJsonKCharSmallDict;
833  f->getNDupSmallStringKChar = getNDupSmallStringKCharSmallDict;
834  f->getNDupVoidKChar = getNDupVoidKCharSmallDict;
835  f->getNDupSmallContainerKChar = getNDupSmallContainerKCharSmallDict;
836  f->getNum = getNumSmallDict;
837  f->cropElem = cropElemSmallDict;
838  f->cropElemUndefined = cropElemUndefinedSmallDict;
839  f->cropElemBool = cropElemBoolSmallDict;
840  f->cropElemDouble = cropElemDoubleSmallDict;
841  f->cropElemInt = cropElemIntSmallDict;
842  f->cropElemInt32 = cropElemInt32SmallDict;
843  f->cropElemUint = cropElemUintSmallDict;
844  f->cropElemUint32 = cropElemUint32SmallDict;
845  f->cropElemS = cropElemSSmallDict;
846  f->cropElemDict = cropElemDictSmallDict;
847  f->cropElemArray = cropElemArraySmallDict;
848  f->cropElemSmallBool = cropElemSmallBoolSmallDict;
849  f->cropElemSmallBytes = cropElemSmallBytesSmallDict;
850  f->cropElemSmallDouble = cropElemSmallDoubleSmallDict;
851  f->cropElemSmallInt = cropElemSmallIntSmallDict;
852  f->cropElemSmallJson = cropElemSmallJsonSmallDict;
853  f->cropElemSmallString = cropElemSmallStringSmallDict;
854  f->cropElemVoid = cropElemVoidSmallDict;
855  f->cropElemSmallContainer = cropElemSmallContainerSmallDict;
856  f->del = delSmallDict;
857  f->delKChar = delKCharSmallDict;
858  f->remove = removeSmallDict;
859  f->removeKChar = removeKCharSmallDict;
860  f->has = hasSmallDict;
861  f->hasKChar = hasKCharSmallDict;
862  f->keyBy = keyBySmallDict;
863  f->keyByUndefined = keyByUndefinedSmallDict;
864  f->keyByBool = keyByBoolSmallDict;
865  f->keyByDouble = keyByDoubleSmallDict;
866  f->keyByInt = keyByIntSmallDict;
867  f->keyByS = keyBySSmallDict;
868  f->keyByChar = keyByCharSmallDict;
869  f->keyByDict = keyByDictSmallDict;
870  f->keyByArray = keyByArraySmallDict;
871  f->keyByArrayc = keyByArraycSmallDict;
872  f->keyByCArrayc = keyByCArraycSmallDict;
873  f->keyBySmallBool = keyBySmallBoolSmallDict;
874  f->keyBySmallBytes = keyBySmallBytesSmallDict;
875  f->keyBySmallDouble = keyBySmallDoubleSmallDict;
876  f->keyBySmallInt = keyBySmallIntSmallDict;
877  f->keyBySmallJson = keyBySmallJsonSmallDict;
878  f->keyBySmallString = keyBySmallStringSmallDict;
879  f->keyBySmallContainer = keyBySmallContainerSmallDict;
880  f->icKeyBy = icKeyBySmallDict;
881  f->icKeyByS = icKeyBySSmallDict;
882  f->icKeyByChar = icKeyByCharSmallDict;
883  f->icKeyByDict = icKeyByDictSmallDict;
884  f->icKeyByArray = icKeyByArraySmallDict;
885  f->icKeyByArrayc = icKeyByArraycSmallDict;
886  f->icKeyByCArrayc = icKeyByCArraycSmallDict;
887  f->icKeyBySmallJson = icKeyBySmallJsonSmallDict;
888  f->icKeyBySmallString = icKeyBySmallStringSmallDict;
889  f->trim = trimSmallDict;
890  f->keys = keysSmallDict;
891  f->keysSmallString = keysSmallStringSmallDict;
892  f->values = valuesSmallDict;
893  f->merge = mergeSmallDict;
894  f->mergeSmallJson = mergeSmallJsonSmallDict;
895  f->mergeNSmash = mergeNSmashSmallDict;
896  f->mergeNSmashSmallJson = mergeNSmashSmallJsonSmallDict;
897  f->append = appendSmallDict;
898  f->appendNSmash = appendNSmashSmallDict;
899  f->equalBase = equalSmallDictBase;
900  f->equalSmallJson = equalSmallDictSmallJson;
901  f->equal = equalSmallDict;
902  f->icEqualBase = icEqualSmallDictBase;
903  f->icEqualSmallJson = icEqualSmallDictSmallJson;
904  f->icEqual = icEqualSmallDict;
905  f->len = lenSmallDict;
906  f->empty = emptySmallDict;
907  f->isEmpty = isEmptySmallDict;
908  f->enumerate = enumerateSmallDictF; {
909  f->iterStart = iterStartSmallDict;
910  f->iterStartKey = iterStartKeySmallDict;
911  f->iterNext = iterNextSmallDict;
912  f->iterNextKey = iterNextKeySmallDict;
913  f->iterElement = iterElementSmallDict;
914  f->iterKey = iterKeySmallDict;
915  f->zip = zipSmallDict;
916  f->zipSmallJson = zipSmallJsonSmallDict;
917  f->zipSmallJsonSmallArray = zipSmallJsonSmallArraySmallDict;
918  f->zipSmallJsonSmallJson = zipSmallJsonSmallJsonSmallDict;
919  f->zipSmallJsonVArray = zipSmallJsonVArraySmallDict;
920  f->zipSmallJsonVCArray = zipSmallJsonVCArraySmallDict;
921  f->zipArray = zipArraySmallDict;
922  f->zipCArray = zipCArraySmallDict;
923  f->zipArraySmallJson = zipArraySmallJsonSmallDict;
924  f->zipCArraySmallJson = zipCArraySmallJsonSmallDict;
925  f->zipArrayArray = zipArrayArraySmallDict;
926  f->zipCArrayArray = zipCArrayArraySmallDict;
927  f->zipArrayCArray = zipArrayCArraySmallDict;
928  f->zipCArrayCArray = zipCArrayCArraySmallDict;
929  f->zipVArray = zipVArraySmallDict;
930  f->zipVCArray = zipVCArraySmallDict;
931  f->fromArray = fromArraySmallDict;
932  f->toArray = toArraySmallDict;
933  f->writeFile = writeFileSmallDict;
934  f->writeFileSmallJson = writeFileSmallJsonSmallDict;
935  f->writeFileSmallString = writeFileSmallStringSmallDict;
936  f->writeStream = writeStreamSmallDict;
937  f->appendFile = appendFileSmallDict;
938  f->appendFileSmallString = appendFileSmallStringSmallDict;
939  f->log = logSmallDict;
940  f->typeString = typeStringSmallDict;
941  f->typeSmallString = typeSmallStringSmallDict;
942  f->typeStringKChar = typeStringKCharSmallDict;
943  f->typeSmallStringKChar = typeSmallStringKCharSmallDict;
944  f->type = typeSmallDict;
945  f->typeKChar = typeKCharSmallDict;
946  f->typeStrings = typeStringsSmallDict;
947  f->isEType = isETypeSmallDict;
948  f->isEUndefined = isEUndefinedSmallDict;
949  f->isEBool = isEBoolSmallDict;
950  f->isEContainer = isEContainerSmallDict;
951  f->isEDict = isEDictSmallDict;
952  f->isEDouble = isEDoubleSmallDict;
953  f->isEInt = isEIntSmallDict;
954  f->isEString = isEStringSmallDict;
955  f->isEFaststring = isEFaststringSmallDict;
956  f->isEArray = isEArraySmallDict;
957  f->isEBytes = isEBytesSmallDict;
958  f->areAllEType = areAllETypeSmallDict;
959  f->areAllEUndefined = areAllEUndefinedSmallDict;
960  f->areAllEBool = areAllEBoolSmallDict;
961  f->areAllEContainer = areAllEContainerSmallDict;
962  f->areAllEDict = areAllEDictSmallDict;
963  f->areAllEDouble = areAllEDoubleSmallDict;
964  f->areAllEInt = areAllEIntSmallDict;
965  f->areAllEString = areAllEStringSmallDict;
966  f->areAllEFaststring = areAllEFaststringSmallDict;
967  f->areAllEArray = areAllEArraySmallDict;
968  f->areAllEBytes = areAllEBytesSmallDict;
969  // cg_c bug
970 }
971  }
972 
974 
975  if (self) {
976  #if (recycleContainers)
977  initAllocateRecycle(smallDictt);
978  #else
979  isError(*self, malloc(sizeof(smallDictt)))
980  return;
981  #endif
982  if (*self) {
983  initiateSmallDict(*self);
984  if (!(*self)->f) {
985  finishSmallDict(self);
986 }
987  }
988  }
989  }
990 
992 
993  #if (recycleContainers)
994  finalizeRecycle
995  #endif
996  // recycleContainers
997 }
998 
999 void finalizeSmallDict(void) {
1000 
1001  if (smallDictF) {
1002  free(smallDictF);
1003  smallDictF = NULL;
1004  }
1006 }
1007 
1009  smallDictt *r = NULL;
1010 
1012  if (!r) {
1013  return(NULL);
1014  }
1015  return(r);
1016 }
1017 
1019 
1020  terminateO(*val);
1021 }
1022 
1024 
1025  freeO(val);
1026 }
1027 
1029 
1030  freeO(*val);
1031 }
1032 
1034 
1035  finishO(*val);
1036 }
1037 
1039 
1040  disposeO(val);
1041 }
1042 
1044 
1045  smashO(*val);
1046 }
1047 
1048 internal void freeSmallDict(smallDictt *self) {
1049 
1050  sFree((smallt *)self->d);
1051  resetSmallDict(self);
1052 }
1053 
1054 internal void terminateSmallDict(smallDictt **self) {
1055 
1056  freeSmallDict(*self);
1057  finishSmallDict(self);
1058 }
1059 
1060 internal char* toStringSmallDict(smallDictt *self) {
1061 
1062  if (!self->d) {
1063  return(strdup("{}"));
1064  }
1065  return(sToStringTiny((smallt *)self->d));
1066 }
1067 
1069 
1071  if (!dup) {
1072  return(NULL);
1073  }
1074 
1075  if (!self->d) {
1076  // empty dictionary
1077  return(dup);
1078  }
1079 
1080  forEachSDict(self->d, o) {
1081  if (o->key) {
1082  smallt *sO = sDuplicateTiny(o->data);
1083  sDictPushTiny(&(dup->d), o->key, sO);
1084  }
1085  }
1086 
1087  dup->iterElementDataType = self->iterElementDataType;
1088  dup->iterIndex = self->iterIndex;
1089  if (dup->iterIndex != -1) {
1090  dup->iterKey = (&((dup->d)->elements) + dup->iterIndex)->key;
1091  }
1092  if (dup->iterIndex != -1) {
1093  dup->iterElement = toBaset((&((dup->d)->elements) + dup->iterIndex)->data);
1094  }
1095  return(dup);
1096 }
1097 
1098 internal char* escapeSmallDict(smallDictt *self) {
1099 
1100  if (!self->d) {
1101  return(strdup("{}"));
1102  }
1103  return(sEscapeTiny((smallt *)self->d));
1104 }
1105 
1106 internal void disposeSmallDict(smallDictt *self) {
1107 
1108  if (self->d) {
1109  forEachSDict(self->d, e) {
1110  if (e->key) {
1111  free(e->key);
1112  // free containers of baset object to avoid leaks
1113  // e->data is valid only when e->key is not null
1114  if (e->data && e->data->type == CONTAINER && (((sContainert*)e->data)->dataType == SH_DT_BASET)) {
1115  free(e->data);
1116  }
1117  }
1118  }
1119  free(self->d);
1120  resetSmallDict(self);
1121 }
1122  }
1123 
1124 internal void smashSmallDict(smallDictt **self) {
1125 
1126  (*self)->f->dispose(*self);
1127  finishSmallDict(self);
1128 }
1129 
1130 #if (NFreeStackCheck)
1131 internal void finishSmallDict(smallDictt **self) {
1132 
1133  resetSmallDict(*self);
1134 
1135  register u64 rsp asm("rsp");
1136  if ((u64)*self > rsp) {
1137  logW("Probably trying to free a smallDict on stack: "BLD PRIx64 RST" sp: "BLD PRIx64 RST, *self, rsp);
1138  logBtrace;
1139  }
1140  else {
1141  #if (recycleContainers)
1142  finishRecycle
1143  #else
1144  free(*self);
1145  #endif
1146  // recycleContainers
1147  *self = NULL;
1148 }
1149  }
1150 
1151 #else
1152 // #if NFreeStackCheck
1153 internal void finishSmallDict(smallDictt **self) {
1154 
1155  resetSmallDict(*self);
1156 
1157  #if (recycleContainers)
1158  finishRecycle
1159  #else
1160  free(*self);
1161  #endif
1162  // recycleContainers
1163  *self = NULL;
1164 }
1165 
1166 #endif
1167 // #if NFreeStackCheck
1168 
1169 internal const char* helpSmallDict(smallDictt UNUSED *self) {
1170 
1171  return(helpTextSmallDict);
1172 }
1173 
1174 internal void resetSmallDict(smallDictt *self) {
1175 
1176  if (self->iterIndex != -1) {
1177  if (self->iterElementDataType != SH_DT_BASET) {
1178  finishO(self->iterElement);
1179  }
1180  self->iterKey = NULL;
1181  self->iterElement = NULL;
1182  self->iterIndex = -1;
1183  }
1184  self->d = NULL;
1185 }
1186 
1188 
1189  return(self->d);
1190 }
1191 
1192 internal void setsoSmallDict(smallDictt *self, sDictt *so) {
1193 
1194  resetSmallDict(self);
1195  self->d = so;
1196 }
1197 
1199 
1200  createAllocateSmallDict(mirror);
1201  if (!mirror) {
1202  return(NULL);
1203  }
1204 
1205  if (!self->d) {
1206  // empty dictionary
1207  return(mirror);
1208  }
1209 
1210  mirror->d = self->d;
1211 
1212  mirror->iterElementDataType = self->iterElementDataType;
1213  mirror->iterIndex = self->iterIndex;
1214  if (mirror->iterIndex != -1) {
1215  mirror->iterKey = (&((mirror->d)->elements) + mirror->iterIndex)->key;
1216  }
1217  if (mirror->iterIndex != -1) {
1218  mirror->iterElement = toBaset((&((mirror->d)->elements) + mirror->iterIndex)->data);
1219  }
1220  return(mirror);
1221 }
1222 
1223 
1224 internal smallDictt* setSmallDict(smallDictt *self, const char *key, baset *value) {
1225 
1226  if (!key) {
1227  // can't insert NULL in sDict
1228  return(NULL);
1229  }
1230  if (!value) {
1231  return(NULL);
1232  }
1233  sDictSetTiny(&(self->d), key, toSmallt(value));
1234  return(self);
1235 }
1236 
1237 internal smallDictt* setUndefinedSmallDict(smallDictt *self, const char *key) {
1238 
1239  if (!key) {
1240  // can't insert NULL in sDict
1241  return(NULL);
1242  }
1243  smallt *o = (smallt *) allocSUndefined();
1244  if (!o) {
1245  return(NULL);
1246  }
1247  sDictSetTiny(&(self->d), key, o);
1248  return(self);
1249 }
1250 
1251 internal smallDictt* setBoolSmallDict(smallDictt *self, const char *key, bool value) {
1252 
1253  if (!key) {
1254  // can't insert NULL in sDict
1255  return(NULL);
1256  }
1257  smallt *o = (smallt *) allocSBool(value);
1258  if (!o) {
1259  return(NULL);
1260  }
1261  sDictSetTiny(&(self->d), key, o);
1262  return(self);
1263 }
1264 
1265 internal smallDictt* setDoubleSmallDict(smallDictt *self, const char *key, double value) {
1266 
1267  if (!key) {
1268  // can't insert NULL in sDict
1269  return(NULL);
1270  }
1271  smallt *o = (smallt *) allocSDouble(value);
1272  if (!o) {
1273  return(NULL);
1274  }
1275  sDictSetTiny(&(self->d), key, o);
1276  return(self);
1277 }
1278 
1279 internal smallDictt* setIntSmallDict(smallDictt *self, const char *key, int64_t value) {
1280 
1281  if (!key) {
1282  // can't insert NULL in sDict
1283  return(NULL);
1284  }
1285  smallt *o = (smallt *) allocSInt(value);
1286  if (!o) {
1287  return(NULL);
1288  }
1289  sDictSetTiny(&(self->d), key, o);
1290  return(self);
1291 }
1292 
1293 internal smallDictt* setSSmallDict(smallDictt *self, const char *key, const char *string) {
1294 
1295  if (!key || !string) {
1296  return(NULL);
1297  }
1298 
1299  smallt *o;
1300  o = (smallt *) allocSStringTiny(string);
1301  if (!o) {
1302  return(NULL);
1303  }
1304  sDictSetTiny(&(self->d), key, o);
1305  return(self);
1306 }
1307 
1308 internal smallDictt* setCharSmallDict(smallDictt *self, const char *key, char c) {
1309 
1310  charToS(s, c);
1311  return(setSSmallDict(self, key, s));
1312 }
1313 
1314 internal smallDictt* setDictSmallDict(smallDictt *self, const char *key, smallDictt *dict) {
1315 
1316  if (!key || !dict) {
1317  return(NULL);
1318  }
1319 
1320  if (checkObjectTypes && dict && !isOSmallDict(dict)) {
1321  return(NULL);
1322  }
1323 
1324  if (!dict->d) {
1325  isError(dict->d, allocSDict()) return(NULL);
1326  }
1327 
1328  sDictSetTiny(&(self->d), key, (smallt *)dict->d);
1329  return(self);
1330 }
1331 
1332 internal smallDictt* setArraySmallDict(smallDictt *self, const char *key, smallArrayt *array) {
1333 
1334  if (!key || !array) {
1335  return(NULL);
1336  }
1337 
1338  if (checkObjectTypes && array && !isOSmallArray(array)) {
1339  return(NULL);
1340  }
1341 
1342  if (!array->a) {
1343  // allocate empty array
1344  isError(array->a, allocSArray()) return(NULL);
1345  }
1346 
1347  sDictSetTiny(&(self->d), key, (smallt *)array->a);
1348  return(self);
1349 }
1350 
1351 internal smallDictt* setArraycSmallDict(smallDictt *self, const char *key, char **array) {
1352 
1353  if (!key || !array) {
1354  return(NULL);
1355  }
1356 
1357  sArrayt *a = allocSArray();
1358  if (!a) {
1359  return(NULL);
1360  }
1361 
1362  forEachCharP(array, e) {
1363  sStringt *s = allocSStringTiny(*e);
1364  if (!s) {
1365  if (a) {
1366  sArrayFreeTiny(a);
1367  }
1368  return(NULL);
1369  }
1370  sArrayPushTiny(&a, (smallt *) s);
1371  }
1372 
1373  sDictSetTiny(&(self->d), key, (smallt *)a);
1374  return(self);
1375 }
1376 
1377 internal smallDictt* setCArraycSmallDict(smallDictt *self, const char *key, const char **array) {
1378 
1379  if (!key || !array) {
1380  return(NULL);
1381  }
1382 
1383  sArrayt *a = allocSArray();
1384  if (!a) {
1385  return(NULL);
1386  }
1387 
1388  forEachCCharP(array, e) {
1389  sStringt *s = allocSStringTiny(*e);
1390  if (!s) {
1391  if (a) {
1392  sArrayFreeTiny(a);
1393  }
1394  return(NULL);
1395  }
1396  sArrayPushTiny(&a, (smallt *) s);
1397  }
1398 
1399  sDictSetTiny(&(self->d), key, (smallt *)a);
1400  return(self);
1401 }
1402 
1403 internal smallDictt* setSmallBoolSmallDict(smallDictt *self, const char *key, smallBoolt *value) {
1404 
1405  if (!key || !value) {
1406  return(NULL);
1407  }
1408 
1409  if (checkObjectTypes && value && !isOSmallBool(value)) {
1410  return(NULL);
1411  }
1412 
1413  if (!value->value) {
1414  isError(value->value, allocSBool(false)) return(NULL);
1415  }
1416  sDictSetTiny(&(self->d), key, (smallt *) value->value);
1417  return(self);
1418 }
1419 
1420 internal smallDictt* setSmallBytesSmallDict(smallDictt *self, const char *key, smallBytest *value) {
1421 
1422  if (!key || !value) {
1423  return(NULL);
1424  }
1425 
1426  if (checkObjectTypes && value && !isOSmallBytes(value)) {
1427  return(NULL);
1428  }
1429 
1430  if (!value->B) {
1431  isError(value->B, allocSBytes()) return(NULL);
1432  }
1433  sDictSetTiny(&(self->d), key, (smallt *) value->B);
1434  return(self);
1435 }
1436 
1437 internal smallDictt* setSmallDoubleSmallDict(smallDictt *self, const char *key, smallDoublet *value) {
1438 
1439  if (!key || !value) {
1440  return(NULL);
1441  }
1442 
1443  if (checkObjectTypes && value && !isOSmallDouble(value)) {
1444  return(NULL);
1445  }
1446 
1447  if (!value->value) {
1448  isError(value->value, allocSDouble(0)) return(NULL);
1449  }
1450  sDictSetTiny(&(self->d), key, (smallt *) value->value);
1451  return(self);
1452 }
1453 
1454 internal smallDictt* setSmallIntSmallDict(smallDictt *self, const char *key, smallIntt *value) {
1455 
1456  if (!key || !value) {
1457  return(NULL);
1458  }
1459 
1460  if (checkObjectTypes && value && !isOSmallInt(value)) {
1461  return(NULL);
1462  }
1463 
1464  if (!value->value) {
1465  isError(value->value, allocSInt(0)) return(NULL);
1466  }
1467  sDictSetTiny(&(self->d), key, (smallt *) value->value);
1468  return(self);
1469 }
1470 
1471 internal smallDictt* setSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *value) {
1472 
1473  if (!key || !value) {
1474  return(NULL);
1475  }
1476 
1477  if (checkObjectTypes && value && !isOSmallJson(value)) {
1478  return(NULL);
1479  }
1480 
1481  smallt *o = getsoO(value);
1482  if (!o) {
1483  // smallJson is empty, create an empty dict
1484  isError(o, (smallt*)allocSDict()) return(NULL);
1485  setsoO(value, o);
1486  }
1487 
1488  sDictSetTiny(&(self->d), key, o);
1489  return(self);
1490 }
1491 
1492 internal smallDictt* setSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string) {
1493 
1494  if (!key || !string) {
1495  return(NULL);
1496  }
1497 
1498  if (checkObjectTypes && string && !isOSmallString(string)) {
1499  return(NULL);
1500  }
1501 
1502  if (!string->data) {
1503  // set empty string when NULL
1504  isError(string->data, allocSStringTiny("")) return(NULL);
1505  }
1506  sDictSetTiny(&(self->d), key, (smallt *) string->data);
1507  return(self);
1508 }
1509 
1510 internal smallDictt* setSmallContainerSmallDict(smallDictt *self, const char *key, smallContainert *container) {
1511 
1512  if (!key || !container) {
1513  return(NULL);
1514  }
1515 
1516  if (checkObjectTypes && container && !isOSmallContainer(container)) {
1517  return(NULL);
1518  }
1519 
1520  if (!container->data) {
1521  isError(container->data, allocSContainer(NULL)) return(NULL);
1522  }
1523  sDictSetTiny(&(self->d), key, (smallt *) container->data);
1524  return(self);
1525 }
1526 
1527 internal smallDictt* setKCharSmallDict(smallDictt *self, char key, baset *value) {
1528 
1529  charToS(s, key);
1530  return(setSmallDict(self, s, value));
1531 }
1532 
1534 
1535  charToS(s, key);
1536  return(setUndefinedSmallDict(self, s));
1537 }
1538 
1539 internal smallDictt* setBoolKCharSmallDict(smallDictt *self, char key, bool value) {
1540 
1541  charToS(s, key);
1542  return(setBoolSmallDict(self, s, value));
1543 }
1544 
1545 internal smallDictt* setDoubleKCharSmallDict(smallDictt *self, char key, double value) {
1546 
1547  charToS(s, key);
1548  return(setDoubleSmallDict(self, s, value));
1549 }
1550 
1551 internal smallDictt* setIntKCharSmallDict(smallDictt *self, char key, int64_t value) {
1552 
1553  charToS(s, key);
1554  return(setIntSmallDict(self, s, value));
1555 }
1556 
1557 internal smallDictt* setSKCharSmallDict(smallDictt *self, char key, const char *string) {
1558 
1559  charToS(s, key);
1560  return(setSSmallDict(self, s, string));
1561 }
1562 
1563 internal smallDictt* setCharKCharSmallDict(smallDictt *self, char key, char c) {
1564 
1565  charToS(s, key);
1566  return(setCharSmallDict(self, s, c));
1567 }
1568 
1569 internal smallDictt* setDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict) {
1570 
1571  charToS(s, key);
1572  return(setDictSmallDict(self, s, dict));
1573 }
1574 
1576 
1577  charToS(s, key);
1578  return(setArraySmallDict(self, s, array));
1579 }
1580 
1581 internal smallDictt* setArraycKCharSmallDict(smallDictt *self, char key, char **array) {
1582 
1583  charToS(s, key);
1584  return(setArraycSmallDict(self, s, array));
1585 }
1586 
1587 internal smallDictt* setCArraycKCharSmallDict(smallDictt *self, char key, const char **array) {
1588 
1589  charToS(s, key);
1590  return(setCArraycSmallDict(self, s, array));
1591 }
1592 
1594 
1595  charToS(s, key);
1596  return(setSmallBoolSmallDict(self, s, value));
1597 }
1598 
1600 
1601  charToS(s, key);
1602  return(setSmallBytesSmallDict(self, s, value));
1603 }
1604 
1606 
1607  charToS(s, key);
1608  return(setSmallDoubleSmallDict(self, s, value));
1609 }
1610 
1612 
1613  charToS(s, key);
1614  return(setSmallIntSmallDict(self, s, value));
1615 }
1616 
1618 
1619  charToS(s, key);
1620  return(setSmallJsonSmallDict(self, s, value));
1621 }
1622 
1624 
1625  charToS(s, key);
1626  return(setSmallStringSmallDict(self, s, string));
1627 }
1628 
1630 
1631  charToS(s, key);
1632  return(setSmallContainerSmallDict(self, s, container));
1633 }
1634 
1635 
1636 internal smallDictt* setNFreeSmallDict(smallDictt *self, const char *key, baset *value) {
1637 
1638  if (!key) {
1639  // can't insert NULL in sDict
1640  return(NULL);
1641  }
1642  if (!value) {
1643  return(NULL);
1644  }
1645 
1646  smallt *o = toSmallt(value);
1647  if (!o) {
1648  return(NULL);
1649  }
1650  sDictSetTiny(&(self->d), key, o);
1651 
1652  if (!(o->type == CONTAINER && (((sContainert*)o)->dataType == SH_DT_BASET))) {
1653  finishO(value);
1654  }
1655  return(self);
1656 }
1657 
1658 internal smallDictt* setNFreeUndefinedSmallDict(smallDictt *self, const char *key, undefinedt *u) {
1659 
1660  if (!u) {
1661  return(NULL);
1662  }
1663  smallDictt *r = setUndefinedSmallDict(self, key);
1664  if (r) {
1665  terminateO(u);
1666  }
1667  return(r);
1668 }
1669 
1670 internal smallDictt* setNFreeSSmallDict(smallDictt *self, const char *key, char *string) {
1671 
1672  smallDictt *r = setSSmallDict(self, key, string);
1673  if (r) {
1674  free(string);
1675  }
1676  return(r);
1677 }
1678 
1679 internal smallDictt* setNFreeDictSmallDict(smallDictt *self, const char *key, smallDictt *dict) {
1680 
1681  smallDictt *r = setDictSmallDict(self, key, dict);
1682  if (r) {
1683  finishO(dict);
1684  }
1685  return(r);
1686 }
1687 
1688 internal smallDictt* setNFreeArraySmallDict(smallDictt *self, const char *key, smallArrayt *array) {
1689 
1690  smallDictt *r = setArraySmallDict(self, key, array);
1691  if (r) {
1692  finishO(array);
1693  }
1694  return(r);
1695 }
1696 
1697 internal smallDictt* setNFreeArraycSmallDict(smallDictt *self, const char *key, char **array) {
1698 
1699  smallDictt *r = setArraycSmallDict(self, key, array);
1700  if (r) {
1701  listFreeS(array);
1702  }
1703  return(r);
1704 }
1705 
1706 internal smallDictt* setNFreeSmallBoolSmallDict(smallDictt *self, const char *key, smallBoolt *value) {
1707 
1708  smallDictt *r = setSmallBoolSmallDict(self, key, value);
1709  if (r) {
1710  finishO(value);
1711  }
1712  return(r);
1713 }
1714 
1716 
1717  smallDictt *r = setSmallBytesSmallDict(self, key, value);
1718  if (r) {
1719  finishO(value);
1720  }
1721  return(r);
1722 }
1723 
1725 
1726  smallDictt *r = setSmallDoubleSmallDict(self, key, value);
1727  if (r) {
1728  finishO(value);
1729  }
1730  return(r);
1731 }
1732 
1733 internal smallDictt* setNFreeSmallIntSmallDict(smallDictt *self, const char *key, smallIntt *value) {
1734 
1735  smallDictt *r = setSmallIntSmallDict(self, key, value);
1736  if (r) {
1737  finishO(value);
1738  }
1739  return(r);
1740 }
1741 
1742 internal smallDictt* setNFreeSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *value) {
1743 
1744  smallDictt *r = setSmallJsonSmallDict(self, key, value);
1745  if (r) {
1746  finishO(value);
1747  }
1748  return(r);
1749 }
1750 
1751 internal smallDictt* setNFreeSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string) {
1752 
1753  smallDictt *r = setSmallStringSmallDict(self, key, string);
1754  if (r) {
1755  finishO(string);
1756  }
1757  return(r);
1758 }
1759 
1760 internal smallDictt* setNFreeSmallContainerSmallDict(smallDictt *self, const char *key, smallContainert *container) {
1761 
1762  smallDictt *r = setSmallContainerSmallDict(self, key, container);
1763  if (r) {
1764  finishO(container);
1765  }
1766  return(r);
1767 }
1768 
1770 
1771  charToS(s, key);
1772  return(setNFreeSmallDict(self, s, value));
1773 }
1774 
1776 
1777  charToS(s, key);
1778  return(setNFreeUndefinedSmallDict(self, s, u));
1779 }
1780 
1781 internal smallDictt* setNFreeSKCharSmallDict(smallDictt *self, char key, char *string) {
1782 
1783  charToS(s, key);
1784  return(setNFreeSSmallDict(self, s, string));
1785 }
1786 
1787 internal smallDictt* setNFreeDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict) {
1788 
1789  charToS(s, key);
1790  return(setNFreeDictSmallDict(self, s, dict));
1791 }
1792 
1794 
1795  charToS(s, key);
1796  return(setNFreeArraySmallDict(self, s, array));
1797 }
1798 
1799 internal smallDictt* setNFreeArraycKCharSmallDict(smallDictt *self, char key, char **array) {
1800 
1801  charToS(s, key);
1802  return(setNFreeArraycSmallDict(self, s, array));
1803 }
1804 
1806 
1807  charToS(s, key);
1808  return(setNFreeSmallBoolSmallDict(self, s, value));
1809 }
1810 
1812 
1813  charToS(s, key);
1814  return(setNFreeSmallBytesSmallDict(self, s, value));
1815 }
1816 
1818 
1819  charToS(s, key);
1820  return(setNFreeSmallDoubleSmallDict(self, s, value));
1821 }
1822 
1824 
1825  charToS(s, key);
1826  return(setNFreeSmallIntSmallDict(self, s, value));
1827 }
1828 
1830 
1831  charToS(s, key);
1832  return(setNFreeSmallJsonSmallDict(self, s, value));
1833 }
1834 
1836 
1837  charToS(s, key);
1838  return(setNFreeSmallStringSmallDict(self, s, string));
1839 }
1840 
1842 
1843  charToS(s, key);
1844  return(setNFreeSmallContainerSmallDict(self, s, container));
1845 }
1846 
1847 
1848 internal smallDictt* setPDictSmallDict(smallDictt *self, const char *key, smallDictt *dict) {
1849 
1850  if (!key || !dict) {
1851  return(NULL);
1852  }
1853 
1854  if (checkObjectTypes && dict && !isOSmallDict(dict)) {
1855  return(NULL);
1856  }
1857 
1858  if (!dict->d) {
1859  return(NULL);
1860  }
1861 
1862  sDictSetP(&(self->d), key, (smallt *)dict->d);
1863  return(self);
1864 }
1865 
1866 internal smallDictt* setPArraySmallDict(smallDictt *self, const char *key, smallArrayt *array) {
1867 
1868  if (!key || !array) {
1869  return(NULL);
1870  }
1871 
1872  if (checkObjectTypes && !isOSmallArray(array)) {
1873  return(NULL);
1874  }
1875 
1876  if (!array->a) {
1877  return(NULL);
1878  }
1879 
1880  sDictSetP(&(self->d), key, (smallt *)array->a);
1881  return(self);
1882 }
1883 
1884 internal smallDictt* setPSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *json) {
1885 
1886  if (!key || !json) {
1887  return(NULL);
1888  }
1889 
1890  if (checkObjectTypes && json && !isOSmallJson(json)) {
1891  return(NULL);
1892  }
1893 
1894  smallt *o;
1895  o = getsoO(json);
1896  if (!o) {
1897  return(NULL);
1898  }
1899  sDictSetP(&(self->d), key, (smallt *)o);
1900  return(self);
1901 }
1902 
1903 internal smallDictt* setPSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string) {
1904 
1905  if (!key || !string) {
1906  return(NULL);
1907  }
1908 
1909  if (checkObjectTypes && string && !isOSmallString(string)) {
1910  return(NULL);
1911  }
1912 
1913  if (!string->data) {
1914  return(NULL);
1915  }
1916  sDictSetP(&(self->d), key, (smallt *)string->data);
1917  return(self);
1918 }
1919 
1920 internal smallDictt* setNFreePDictSmallDict(smallDictt *self, const char *key, smallDictt *dict) {
1921 
1922  if (!key || !dict) {
1923  return(NULL);
1924  }
1925 
1926  if (checkObjectTypes && dict && !isOSmallDict(dict)) {
1927  return(NULL);
1928  }
1929 
1930  if (!dict->d) {
1931  return(NULL);
1932  }
1933 
1934  sDictSetP(&(self->d), key, (smallt *)dict->d);
1935  finishO(dict);
1936  return(self);
1937 }
1938 
1939 internal smallDictt* setNFreePArraySmallDict(smallDictt *self, const char *key, smallArrayt *array) {
1940 
1941  if (!key || !array) {
1942  return(NULL);
1943  }
1944 
1945  if (checkObjectTypes && array && !isOSmallArray(array)) {
1946  return(NULL);
1947  }
1948 
1949  if (!array->a) {
1950  return(NULL);
1951  }
1952 
1953  sDictSetP(&(self->d), key, (smallt *)array->a);
1954  finishO(array);
1955  return(self);
1956 }
1957 
1958 internal smallDictt* setNFreePSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *json) {
1959 
1960  if (!key || !json) {
1961  return(NULL);
1962  }
1963 
1964  if (checkObjectTypes && json && !isOSmallJson(json)) {
1965  return(NULL);
1966  }
1967 
1968  smallt *o = getsoO(json);
1969  if (!o) {
1970  return(NULL);
1971  }
1972 
1973  sDictSetP(&(self->d), key, o);
1974  finishO(json);
1975  return(self);
1976 }
1977 
1978 internal smallDictt* setNFreePSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string) {
1979 
1980  if (!key || !string) {
1981  return(NULL);
1982  }
1983 
1984  if (checkObjectTypes && string && !isOSmallString(string)) {
1985  return(NULL);
1986  }
1987 
1988  if (!string->data) {
1989  return(NULL);
1990  }
1991 
1992  sDictSetP(&(self->d), key, (smallt *)string->data);
1993  finishO(string);
1994  return(self);
1995 }
1996 
1998 
1999  charToS(s, key);
2000  return(setPArraySmallDict(self, s, array));
2001 }
2002 
2003 internal smallDictt* setPDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict) {
2004 
2005  charToS(s, key);
2006  return(setPDictSmallDict(self, s, dict));
2007 }
2008 
2010 
2011  charToS(s, key);
2012  return(setPSmallJsonSmallDict(self, s, json));
2013 }
2014 
2016 
2017  charToS(s, key);
2018  return(setPSmallStringSmallDict(self, s, string));
2019 }
2020 
2022 
2023  charToS(s, key);
2024  return(setNFreePArraySmallDict(self, s, array));
2025 }
2026 
2028 
2029  charToS(s, key);
2030  return(setNFreePDictSmallDict(self, s, dict));
2031 }
2032 
2034 
2035  charToS(s, key);
2036  return(setNFreePSmallJsonSmallDict(self, s, json));
2037 }
2038 
2040 
2041  charToS(s, key);
2042  return(setNFreePSmallStringSmallDict(self, s, string));
2043 }
2044 
2045 
2046 internal baset* getSmallDict(smallDictt *self, const char *key) {
2047 
2048  if (!key || !self->d) {
2049  return(NULL);
2050  }
2051 
2052  return(toBaset(sDictGetTiny(self->d, key)));
2053 }
2054 
2055 internal undefinedt* getUndefinedSmallDict(smallDictt *self, const char *key) {
2056 
2057  if (!key || !self->d) {
2058  return(NULL);
2059  }
2060 
2061  smallt *o = sDictGetTiny(self->d, key);
2062 
2063  if (!o) {
2064  return(NULL);
2065  }
2066 
2067  if (o->type != UNDEFINED) {
2068  return(NULL);
2069  }
2070  return(allocUndefined());
2071 }
2072 
2073 internal bool getBoolSmallDict(smallDictt *self, const char *key) {
2074  smallBoolt *e = NULL;
2075  bool r = false;;
2076 
2077  e = getSmallBoolSmallDict(self, key);
2078  if (e) {
2079  r = e->f->get(e);
2080  finishO(e);
2081  }
2082  return(r);
2083 }
2084 
2085 internal bool* getBoolPSmallDict(smallDictt *self, const char *key) {
2086  smallBoolt *e = NULL;
2087  bool* r = NULL;
2088 
2089  e = getSmallBoolSmallDict(self, key);
2090  if (e) {
2091  r = e->f->getP(e);
2092  finishO(e);
2093  }
2094  return(r);
2095 }
2096 
2097 internal double getDoubleSmallDict(smallDictt *self, const char *key) {
2098  smallDoublet *e = NULL;
2099  double r = 0;;
2100 
2101  e = getSmallDoubleSmallDict(self, key);
2102  if (e) {
2103  r = e->f->get(e);
2104  finishO(e);
2105  }
2106  return(r);
2107 }
2108 
2109 internal double* getDoublePSmallDict(smallDictt *self, const char *key) {
2110  smallDoublet *e = NULL;
2111  double* r = NULL;
2112 
2113  e = getSmallDoubleSmallDict(self, key);
2114  if (e) {
2115  r = e->f->getP(e);
2116  finishO(e);
2117  }
2118  return(r);
2119 }
2120 
2121 internal int64_t getIntSmallDict(smallDictt *self, const char *key) {
2122  smallIntt *e = NULL;
2123  int64_t r = 0;;
2124 
2125  e = getSmallIntSmallDict(self, key);
2126  if (e) {
2127  r = e->f->get(e);
2128  finishO(e);
2129  }
2130  return(r);
2131 }
2132 
2133 internal int64_t* getIntPSmallDict(smallDictt *self, const char *key) {
2134  smallIntt *e = NULL;
2135  int64_t* r = NULL;
2136 
2137  e = getSmallIntSmallDict(self, key);
2138  if (e) {
2139  r = e->f->getP(e);
2140  finishO(e);
2141  }
2142  return(r);
2143 }
2144 
2145 internal int32_t getInt32SmallDict(smallDictt *self, const char *key) {
2146  smallIntt *e = NULL;
2147  int32_t r = 0;;
2148 
2149  e = getSmallIntSmallDict(self, key);
2150  if (e) {
2151  r = (int32_t)e->f->get(e);
2152  finishO(e);
2153  }
2154  return(r);
2155 }
2156 
2157 internal int32_t* getInt32PSmallDict(smallDictt *self, const char *key) {
2158  smallIntt *e = NULL;
2159  int32_t* r = NULL;
2160 
2161  e = getSmallIntSmallDict(self, key);
2162  if (e) {
2163  r = (int32_t *)e->f->getP(e);
2164  finishO(e);
2165  }
2166  return(r);
2167 }
2168 
2169 internal uint64_t getUintSmallDict(smallDictt *self, const char *key) {
2170  smallIntt *e = NULL;
2171  uint64_t r = 0;;
2172 
2173  e = getSmallIntSmallDict(self, key);
2174  if (e) {
2175  r = (uint64_t)e->f->get(e);
2176  finishO(e);
2177  }
2178  return(r);
2179 }
2180 
2181 internal uint64_t* getUintPSmallDict(smallDictt *self, const char *key) {
2182  smallIntt *e = NULL;
2183  uint64_t* r = NULL;
2184 
2185  e = getSmallIntSmallDict(self, key);
2186  if (e) {
2187  r = (uint64_t *)e->f->getP(e);
2188  finishO(e);
2189  }
2190  return(r);
2191 }
2192 
2193 internal uint32_t getUint32SmallDict(smallDictt *self, const char *key) {
2194  smallIntt *e = NULL;
2195  uint32_t r = 0;;
2196 
2197  e = getSmallIntSmallDict(self, key);
2198  if (e) {
2199  r = (uint32_t)e->f->get(e);
2200  finishO(e);
2201  }
2202  return(r);
2203 }
2204 
2205 internal uint32_t* getUint32PSmallDict(smallDictt *self, const char *key) {
2206  smallIntt *e = NULL;
2207  uint32_t* r = NULL;
2208 
2209  e = getSmallIntSmallDict(self, key);
2210  if (e) {
2211  r = (uint32_t *)e->f->getP(e);
2212  finishO(e);
2213  }
2214  return(r);
2215 }
2216 
2217 internal char* getSSmallDict(smallDictt *self, const char *key) {
2218  smallStringt *e = NULL;
2219  char* r = NULL;
2220 
2221  e = getSmallStringSmallDict(self, key);
2222  if (e) {
2223  r = e->f->get(e);
2224  finishO(e);
2225  }
2226  return(r);
2227 }
2228 
2229 internal smallDictt* getDictSmallDict(smallDictt *self, const char *key) {
2230 
2231  if (!key || !self->d) {
2232  return(NULL);
2233  }
2234 
2235  smallt *o = sDictGetTiny(self->d, key);
2236 
2237  if (!o) {
2238  return(NULL);
2239  }
2240 
2241  if (o->type != DICT) {
2242  return(NULL);
2243  }
2244  return((smallDictt*) toBaset(o));
2245 }
2246 
2247 internal smallArrayt* getArraySmallDict(smallDictt *self, const char *key) {
2248 
2249  if (!key || !self->d) {
2250  return(NULL);
2251  }
2252 
2253  smallt *o = sDictGetTiny(self->d, key);
2254 
2255  if (!o) {
2256  return(NULL);
2257  }
2258 
2259  if (o->type != ARRAY) {
2260  return(NULL);
2261  }
2262  return((smallArrayt*) toBaset(o));
2263 }
2264 
2265 internal smallBoolt* getSmallBoolSmallDict(smallDictt *self, const char *key) {
2266 
2267  if (!key || !self->d) {
2268  return(NULL);
2269  }
2270 
2271  smallt *o = sDictGetTiny(self->d, key);
2272 
2273  if (!o) {
2274  return(NULL);
2275  }
2276 
2277  if (o->type != BOOL) {
2278  return(NULL);
2279  }
2280  return((smallBoolt*) toBaset(o));
2281 }
2282 
2283 internal smallBytest* getSmallBytesSmallDict(smallDictt *self, const char *key) {
2284 
2285  if (!key || !self->d) {
2286  return(NULL);
2287  }
2288 
2289  smallt *o = sDictGetTiny(self->d, key);
2290 
2291  if (!o) {
2292  return(NULL);
2293  }
2294 
2295  if (o->type != BYTES) {
2296  return(NULL);
2297  }
2298  return((smallBytest*) toBaset(o));
2299 }
2300 
2301 internal smallDoublet* getSmallDoubleSmallDict(smallDictt *self, const char *key) {
2302 
2303  if (!key || !self->d) {
2304  return(NULL);
2305  }
2306 
2307  smallt *o = sDictGetTiny(self->d, key);
2308 
2309  if (!o) {
2310  return(NULL);
2311  }
2312 
2313  if (o->type != DOUBLE) {
2314  return(NULL);
2315  }
2316  return((smallDoublet*) toBaset(o));
2317 }
2318 
2319 internal smallIntt* getSmallIntSmallDict(smallDictt *self, const char *key) {
2320 
2321  if (!key || !self->d) {
2322  return(NULL);
2323  }
2324 
2325  smallt *o = sDictGetTiny(self->d, key);
2326 
2327  if (!o) {
2328  return(NULL);
2329  }
2330 
2331  if (o->type != INT) {
2332  return(NULL);
2333  }
2334  return((smallIntt*) toBaset(o));
2335 }
2336 
2337 internal smallJsont* getSmallJsonSmallDict(smallDictt *self, const char *key) {
2338 
2339  if (!key || !self->d) {
2340  return(NULL);
2341  }
2342 
2343  smallt *o = sDictGetTiny(self->d, key);
2344 
2345  if (!o) {
2346  return(NULL);
2347  }
2348 
2349  if ((o->type == BYTES) || (o->type == CONTAINER)) {
2350  return(NULL);
2351  }
2352 
2353  baset *e = toBaset(o);
2355  if (!r) {
2356  finishO(e);
2357  return(NULL);
2358  }
2359  setTopNFreeO(r, e);
2360  return(r);
2361 }
2362 
2363 internal smallStringt* getSmallStringSmallDict(smallDictt *self, const char *key) {
2364 
2365  if (!key || !self->d) {
2366  return(NULL);
2367  }
2368 
2369  smallt *o = sDictGetTiny(self->d, key);
2370 
2371  if (!o) {
2372  return(NULL);
2373  }
2374 
2375  if (o->type != STRING) {
2376  return(NULL);
2377  }
2378  return((smallStringt*) toBaset(o));
2379 }
2380 
2381 internal void* getVoidSmallDict(smallDictt *self, const char *key) {
2382  smallContainert *e = NULL;
2383  void* r = NULL;
2384 
2385  e = getSmallContainerSmallDict(self, key);
2386  if (e) {
2387  r = e->f->get(e);
2388  finishO(e);
2389  }
2390  return(r);
2391 }
2392 
2393 internal smallContainert* getSmallContainerSmallDict(smallDictt *self, const char *key) {
2394 
2395  if (!key || !self->d) {
2396  return(NULL);
2397  }
2398 
2399  smallt *o = sDictGetTiny(self->d, key);
2400 
2401  if (!o) {
2402  return(NULL);
2403  }
2404 
2405  if (o->type != CONTAINER) {
2406  return(NULL);
2407  }
2408 
2409  if (((sContainert*)o)->dataType == SH_DT_BASET) {
2410  return(NULL);
2411  }
2412 
2413  return((smallContainert*) toBaset(o));
2414 }
2415 
2416 internal baset* getKCharSmallDict(smallDictt *self, char key) {
2417 
2418  charToS(s, key);
2419  return(getSmallDict(self, s));
2420 }
2421 
2423 
2424  charToS(s, key);
2425  return(getUndefinedSmallDict(self, s));
2426 }
2427 
2428 internal bool getBoolKCharSmallDict(smallDictt *self, char key) {
2429 
2430  charToS(s, key);
2431  return(getBoolSmallDict(self, s));
2432 }
2433 
2434 internal bool* getBoolPKCharSmallDict(smallDictt *self, char key) {
2435 
2436  charToS(s, key);
2437  return(getBoolPSmallDict(self, s));
2438 }
2439 
2440 internal double getDoubleKCharSmallDict(smallDictt *self, char key) {
2441 
2442  charToS(s, key);
2443  return(getDoubleSmallDict(self, s));
2444 }
2445 
2446 internal double* getDoublePKCharSmallDict(smallDictt *self, char key) {
2447 
2448  charToS(s, key);
2449  return(getDoublePSmallDict(self, s));
2450 }
2451 
2452 internal int64_t getIntKCharSmallDict(smallDictt *self, char key) {
2453 
2454  charToS(s, key);
2455  return(getIntSmallDict(self, s));
2456 }
2457 
2458 internal int64_t* getIntPKCharSmallDict(smallDictt *self, char key) {
2459 
2460  charToS(s, key);
2461  return(getIntPSmallDict(self, s));
2462 }
2463 
2464 internal int32_t getInt32KCharSmallDict(smallDictt *self, char key) {
2465 
2466  charToS(s, key);
2467  return(getInt32SmallDict(self, s));
2468 }
2469 
2470 internal int32_t* getInt32PKCharSmallDict(smallDictt *self, char key) {
2471 
2472  charToS(s, key);
2473  return(getInt32PSmallDict(self, s));
2474 }
2475 
2476 internal uint64_t getUintKCharSmallDict(smallDictt *self, char key) {
2477 
2478  charToS(s, key);
2479  return(getUintSmallDict(self, s));
2480 }
2481 
2482 internal uint64_t* getUintPKCharSmallDict(smallDictt *self, char key) {
2483 
2484  charToS(s, key);
2485  return(getUintPSmallDict(self, s));
2486 }
2487 
2488 internal uint32_t getUint32KCharSmallDict(smallDictt *self, char key) {
2489 
2490  charToS(s, key);
2491  return(getUint32SmallDict(self, s));
2492 }
2493 
2494 internal uint32_t* getUint32PKCharSmallDict(smallDictt *self, char key) {
2495 
2496  charToS(s, key);
2497  return(getUint32PSmallDict(self, s));
2498 }
2499 
2500 internal char* getSKCharSmallDict(smallDictt *self, char key) {
2501 
2502  charToS(s, key);
2503  return(getSSmallDict(self, s));
2504 }
2505 
2506 internal smallDictt* getDictKCharSmallDict(smallDictt *self, char key) {
2507 
2508  charToS(s, key);
2509  return(getDictSmallDict(self, s));
2510 }
2511 
2512 internal smallArrayt* getArrayKCharSmallDict(smallDictt *self, char key) {
2513 
2514  charToS(s, key);
2515  return(getArraySmallDict(self, s));
2516 }
2517 
2519 
2520  charToS(s, key);
2521  return(getSmallBoolSmallDict(self, s));
2522 }
2523 
2525 
2526  charToS(s, key);
2527  return(getSmallBytesSmallDict(self, s));
2528 }
2529 
2531 
2532  charToS(s, key);
2533  return(getSmallDoubleSmallDict(self, s));
2534 }
2535 
2536 internal smallIntt* getSmallIntKCharSmallDict(smallDictt *self, char key) {
2537 
2538  charToS(s, key);
2539  return(getSmallIntSmallDict(self, s));
2540 }
2541 
2543 
2544  charToS(s, key);
2545  return(getSmallJsonSmallDict(self, s));
2546 }
2547 
2549 
2550  charToS(s, key);
2551  return(getSmallStringSmallDict(self, s));
2552 }
2553 
2554 internal void* getVoidKCharSmallDict(smallDictt *self, char key) {
2555 
2556  charToS(s, key);
2557  return(getVoidSmallDict(self, s));
2558 }
2559 
2561 
2562  charToS(s, key);
2563  return(getSmallContainerSmallDict(self, s));
2564 }
2565 
2566 internal baset* getNDupSmallDict(smallDictt *self, const char *key) {
2567 
2568  if (!key || !self->d) {
2569  return(NULL);
2570  }
2571 
2572  smallt *o = sDictGetTiny(self->d, key);
2573 
2574  if (!o) {
2575  return(NULL);
2576  }
2577 
2578  if (o->type == CONTAINER && (((sContainert*)o)->dataType == SH_DT_BASET)) {
2579  baset *b = ((sContainert*)o)->data;
2580  return(duplicateO(b));
2581  }
2582  return(toBaset(sDuplicate(o)));
2583 }
2584 
2585 internal undefinedt* getNDupUndefinedSmallDict(smallDictt *self, const char *key) {
2586 
2587  if (!key || !self->d) {
2588  return(NULL);
2589  }
2590 
2591  smallt *o = sDictGetTiny(self->d, key);
2592 
2593  if (!o) {
2594  return(NULL);
2595  }
2596 
2597  if (o->type != UNDEFINED) {
2598  return(NULL);
2599  }
2600  return(allocUndefined());
2601 }
2602 
2603 internal bool getNDupBoolSmallDict(smallDictt *self, const char *key) {
2604  smallBoolt *e = NULL;
2605  bool r = false;;
2606 
2607  e = getSmallBoolSmallDict(self, key);
2608  if (e) {
2609  r = e->f->get(e);
2610  finishO(e);
2611  }
2612  return(r);
2613 }
2614 
2615 internal double getNDupDoubleSmallDict(smallDictt *self, const char *key) {
2616  smallDoublet *e = NULL;
2617  double r = 0;;
2618 
2619  e = getSmallDoubleSmallDict(self, key);
2620  if (e) {
2621  r = e->f->get(e);
2622  finishO(e);
2623  }
2624  return(r);
2625 }
2626 
2627 internal int64_t getNDupIntSmallDict(smallDictt *self, const char *key) {
2628  smallIntt *e = NULL;
2629  int64_t r = 0;;
2630 
2631  e = getSmallIntSmallDict(self, key);
2632  if (e) {
2633  r = e->f->get(e);
2634  finishO(e);
2635  }
2636  return(r);
2637 }
2638 
2639 internal int32_t getNDupInt32SmallDict(smallDictt *self, const char *key) {
2640  smallIntt *e = NULL;
2641  int32_t r = 0;;
2642 
2643  e = getSmallIntSmallDict(self, key);
2644  if (e) {
2645  r = (int32_t)e->f->get(e);
2646  finishO(e);
2647  }
2648  return(r);
2649 }
2650 
2651 internal uint64_t getNDupUintSmallDict(smallDictt *self, const char *key) {
2652  smallIntt *e = NULL;
2653  uint64_t r = 0;;
2654 
2655  e = getSmallIntSmallDict(self, key);
2656  if (e) {
2657  r = (uint64_t)e->f->get(e);
2658  finishO(e);
2659  }
2660  return(r);
2661 }
2662 
2663 internal uint32_t getNDupUint32SmallDict(smallDictt *self, const char *key) {
2664  smallIntt *e = NULL;
2665  uint32_t r = 0;;
2666 
2667  e = getSmallIntSmallDict(self, key);
2668  if (e) {
2669  r = (uint32_t)e->f->get(e);
2670  finishO(e);
2671  }
2672  return(r);
2673 }
2674 
2675 internal char* getNDupSSmallDict(smallDictt *self, const char *key) {
2676  smallStringt *e = NULL;
2677  char* r = NULL;
2678 
2679  e = getSmallStringSmallDict(self, key);
2680  if (e) {
2681  r = e->f->toString(e);
2682  finishO(e);
2683  }
2684  return(r);
2685 }
2686 
2687 internal smallDictt* getNDupDictSmallDict(smallDictt *self, const char *key) {
2688 
2689  if (!key || !self->d) {
2690  return(NULL);
2691  }
2692 
2693  smallt *o = sDictGetTiny(self->d, key);
2694 
2695  if (!o) {
2696  return(NULL);
2697  }
2698 
2699  if (o->type != DICT) {
2700  return(NULL);
2701  }
2702  return((smallDictt*) toBaset(sDuplicate(o)));
2703 }
2704 
2705 internal smallArrayt* getNDupArraySmallDict(smallDictt *self, const char *key) {
2706 
2707  if (!key || !self->d) {
2708  return(NULL);
2709  }
2710 
2711  smallt *o = sDictGetTiny(self->d, key);
2712 
2713  if (!o) {
2714  return(NULL);
2715  }
2716 
2717  if (o->type != ARRAY) {
2718  return(NULL);
2719  }
2720  return((smallArrayt*) toBaset(sDuplicate(o)));
2721 }
2722 
2723 internal smallBoolt* getNDupSmallBoolSmallDict(smallDictt *self, const char *key) {
2724 
2725  if (!key || !self->d) {
2726  return(NULL);
2727  }
2728 
2729  smallt *o = sDictGetTiny(self->d, key);
2730 
2731  if (!o) {
2732  return(NULL);
2733  }
2734 
2735  if (o->type != BOOL) {
2736  return(NULL);
2737  }
2738  return((smallBoolt*) toBaset(sDuplicate(o)));
2739 }
2740 
2741 internal smallBytest* getNDupSmallBytesSmallDict(smallDictt *self, const char *key) {
2742 
2743  if (!key || !self->d) {
2744  return(NULL);
2745  }
2746 
2747  smallt *o = sDictGetTiny(self->d, key);
2748 
2749  if (!o) {
2750  return(NULL);
2751  }
2752 
2753  if (o->type != BYTES) {
2754  return(NULL);
2755  }
2756  return((smallBytest*) toBaset(sDuplicate(o)));
2757 }
2758 
2759 internal smallDoublet* getNDupSmallDoubleSmallDict(smallDictt *self, const char *key) {
2760 
2761  if (!key || !self->d) {
2762  return(NULL);
2763  }
2764 
2765  smallt *o = sDictGetTiny(self->d, key);
2766 
2767  if (!o) {
2768  return(NULL);
2769  }
2770 
2771  if (o->type != DOUBLE) {
2772  return(NULL);
2773  }
2774  return((smallDoublet*) toBaset(sDuplicate(o)));
2775 }
2776 
2777 internal smallIntt* getNDupSmallIntSmallDict(smallDictt *self, const char *key) {
2778 
2779  if (!key || !self->d) {
2780  return(NULL);
2781  }
2782 
2783  smallt *o = sDictGetTiny(self->d, key);
2784 
2785  if (!o) {
2786  return(NULL);
2787  }
2788 
2789  if (o->type != INT) {
2790  return(NULL);
2791  }
2792  return((smallIntt*) toBaset(sDuplicate(o)));
2793 }
2794 
2795 internal smallJsont* getNDupSmallJsonSmallDict(smallDictt *self, const char *key) {
2796 
2797  if (!key || !self->d) {
2798  return(NULL);
2799  }
2800 
2801  smallt *o = sDictGetTiny(self->d, key);
2802 
2803  if (!o) {
2804  return(NULL);
2805  }
2806  if ((o->type == BYTES) || (o->type == CONTAINER)) {
2807  return(NULL);
2808  }
2809 
2810  baset *e = toBaset(sDuplicate(o));
2812  if (!r) {
2813  finishO(e);
2814  return(NULL);
2815  }
2816  setTopNFreeO(r, e);
2817  return(r);
2818 }
2819 
2820 internal smallStringt* getNDupSmallStringSmallDict(smallDictt *self, const char *key) {
2821 
2822  if (!key || !self->d) {
2823  return(NULL);
2824  }
2825 
2826  smallt *o = sDictGetTiny(self->d, key);
2827 
2828  if (!o) {
2829  return(NULL);
2830  }
2831 
2832  if (o->type != STRING) {
2833  return(NULL);
2834  }
2835  return((smallStringt*) toBaset(sDuplicate(o)));
2836 }
2837 
2838 internal void* getNDupVoidSmallDict(smallDictt *self, const char *key) {
2839  smallContainert *e = NULL;
2840  void* r = NULL;
2841 
2842  e = getNDupSmallContainerSmallDict(self, key);
2843  if (e) {
2844  r = e->f->get(e);
2845  smashO(e);
2846  }
2847  return(r);
2848 }
2849 
2850 internal smallContainert* getNDupSmallContainerSmallDict(smallDictt *self, const char *key) {
2851 
2852  if (!key || !self->d) {
2853  return(NULL);
2854  }
2855 
2856  smallt *o = sDictGetTiny(self->d, key);
2857 
2858  if (!o) {
2859  return(NULL);
2860  }
2861 
2862  if (o->type != CONTAINER) {
2863  return(NULL);
2864  }
2865  if (((sContainert*)o)->dataType == SH_DT_BASET) {
2866  return(NULL);
2867  }
2870  finishO(e);
2871  return(r);
2872 }
2873 
2874 
2875 internal baset* getNDupKCharSmallDict(smallDictt *self, char key) {
2876 
2877  charToS(s, key);
2878  return(getNDupSmallDict(self, s));
2879 }
2880 
2882 
2883  charToS(s, key);
2884  return(getNDupUndefinedSmallDict(self, s));
2885 }
2886 
2887 internal bool getNDupBoolKCharSmallDict(smallDictt *self, char key) {
2888 
2889  charToS(s, key);
2890  return(getNDupBoolSmallDict(self, s));
2891 }
2892 
2893 internal double getNDupDoubleKCharSmallDict(smallDictt *self, char key) {
2894 
2895  charToS(s, key);
2896  return(getNDupDoubleSmallDict(self, s));
2897 }
2898 
2899 internal int64_t getNDupIntKCharSmallDict(smallDictt *self, char key) {
2900 
2901  charToS(s, key);
2902  return(getNDupIntSmallDict(self, s));
2903 }
2904 
2905 internal int32_t getNDupInt32KCharSmallDict(smallDictt *self, char key) {
2906 
2907  charToS(s, key);
2908  return(getNDupInt32SmallDict(self, s));
2909 }
2910 
2911 internal uint64_t getNDupUintKCharSmallDict(smallDictt *self, char key) {
2912 
2913  charToS(s, key);
2914  return(getNDupUintSmallDict(self, s));
2915 }
2916 
2917 internal uint32_t getNDupUint32KCharSmallDict(smallDictt *self, char key) {
2918 
2919  charToS(s, key);
2920  return(getNDupUint32SmallDict(self, s));
2921 }
2922 
2923 internal char* getNDupSKCharSmallDict(smallDictt *self, char key) {
2924 
2925  charToS(s, key);
2926  return(getNDupSSmallDict(self, s));
2927 }
2928 
2930 
2931  charToS(s, key);
2932  return(getNDupDictSmallDict(self, s));
2933 }
2934 
2936 
2937  charToS(s, key);
2938  return(getNDupArraySmallDict(self, s));
2939 }
2940 
2942 
2943  charToS(s, key);
2944  return(getNDupSmallBoolSmallDict(self, s));
2945 }
2946 
2948 
2949  charToS(s, key);
2950  return(getNDupSmallBytesSmallDict(self, s));
2951 }
2952 
2954 
2955  charToS(s, key);
2956  return(getNDupSmallDoubleSmallDict(self, s));
2957 }
2958 
2960 
2961  charToS(s, key);
2962  return(getNDupSmallIntSmallDict(self, s));
2963 }
2964 
2966 
2967  charToS(s, key);
2968  return(getNDupSmallJsonSmallDict(self, s));
2969 }
2970 
2972 
2973  charToS(s, key);
2974  return(getNDupSmallStringSmallDict(self, s));
2975 }
2976 
2977 internal void* getNDupVoidKCharSmallDict(smallDictt *self, char key) {
2978 
2979  charToS(s, key);
2980  return(getNDupVoidSmallDict(self, s));
2981 }
2982 
2984 
2985  charToS(s, key);
2986  return(getNDupSmallContainerSmallDict(self, s));
2987 }
2988 
2989 
2990 internal double getNumSmallDict(smallDictt *self, const char *key) {
2991 
2992  if (!key || !self->d) {
2993  return(0);
2994  }
2995 
2996  smallt *o = sDictGetTiny(self->d, key);
2997 
2998  if (!o) {
2999  return(0);
3000  }
3001  if (o->type != INT && o->type != DOUBLE) {
3002  return(0);
3003  }
3004 
3005  baset *e = toBaset(o);
3006 
3007  double r = 0;
3008  if (isOSmallDouble(e)) {
3009  r = getValO((smallDoublet*)e);
3010  }
3011  elif (isOSmallInt(e)) {
3012  r = (double)getValO((smallIntt*)e);
3013  }
3014  finishO(e);
3015  return(r);
3016 }
3017 
3018 
3019 internal baset* cropElemSmallDict(smallDictt *self, const char* key) {
3020 
3021  if (!key || !self->d) {
3022  return(NULL);
3023  }
3024 
3025  smallt *sm = NULL;
3026  forEachSDict(self->d, e) {
3027  if (e->key && strEq(key, e->key)) {
3028  sm = e->data;
3029  free(e->key);
3030  e->key = NULL;
3031  break;
3032  }
3033  }
3034 
3035  if (!sm) {
3036  return(NULL);
3037  }
3038  if (sm->type == UNDEFINED) {
3039  free(sm);
3040  return((baset*) allocUndefined());
3041  }
3042  else if (sm->type == CONTAINER) {
3043  cast(sContainert*, sc, sm);
3044  if (sc->dataType == SH_DT_BASET) {
3045  // baset object in stored in the container, free the container since
3046  // it was allocated automatically in the toSmallt function in libsheepyObject.c
3047  baset *r = toBaset(sm);
3048  free(sm);
3049  return(r);
3050  }
3051  }
3052  return(toBaset(sm));
3053 }
3054 
3055 
3056 internal undefinedt* cropElemUndefinedSmallDict(smallDictt *self, const char* key) {
3057 
3058  if (!key || !self->d) {
3059  return(NULL);
3060  }
3061 
3062  smallt *sm = NULL;
3063  undefinedt *r = NULL;
3064  forEachSDict(self->d, e) {
3065  if (e->key && strEq(key, e->key)) {
3066  sm = e->data;
3067  if (sm->type != UNDEFINED) {
3068  return(NULL);
3069  }
3070  r = (undefinedt*)toBaset(sm);
3071  free(e->key);
3072  free(e->data);
3073  e->key = NULL;
3074  e->data = NULL;
3075  break;
3076  }
3077  }
3078 
3079  return(r);
3080 }
3081 
3082 internal bool cropElemBoolSmallDict(smallDictt *self, const char* key) {
3083 
3084  if (!key || !self->d) {
3085  return(false);
3086  }
3087 
3088  smallt *sm = NULL;
3089  smallBoolt *o = NULL;
3090  forEachSDict(self->d, e) {
3091  if (e->key && strEq(key, e->key)) {
3092  sm = e->data;
3093  o = (smallBoolt*)toBaset(sm);
3094  if (!o) {
3095  return(false);
3096  }
3097  if (checkObjectTypes && o && !isOSmallBool(o)) {
3098  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3099  return(false);
3100  }
3101  finishO(o);
3102  return(false);
3103  }
3104  free(e->key);
3105  e->key = NULL;
3106 
3107  bool r = o->f->get(o);
3108  terminateO(o);
3109  return(r);
3110  }
3111  }
3112 
3113  return(false);
3114 }
3115 
3116 internal double cropElemDoubleSmallDict(smallDictt *self, const char* key) {
3117 
3118  if (!key || !self->d) {
3119  return(0);
3120  }
3121 
3122  smallt *sm = NULL;
3123  smallDoublet *o = NULL;
3124  forEachSDict(self->d, e) {
3125  if (e->key && strEq(key, e->key)) {
3126  sm = e->data;
3127  o = (smallDoublet*)toBaset(sm);
3128  if (!o) {
3129  return(0);
3130  }
3131  if (checkObjectTypes && o && !isOSmallDouble(o)) {
3132  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3133  return(0);
3134  }
3135  finishO(o);
3136  return(0);
3137  }
3138  free(e->key);
3139  e->key = NULL;
3140 
3141  double r = o->f->get(o);
3142  terminateO(o);
3143  return(r);
3144  }
3145  }
3146 
3147  return(0);
3148 }
3149 
3150 internal int64_t cropElemIntSmallDict(smallDictt *self, const char* key) {
3151 
3152  if (!key || !self->d) {
3153  return(0);
3154  }
3155 
3156  smallt *sm = NULL;
3157  smallIntt *o = NULL;
3158  forEachSDict(self->d, e) {
3159  if (e->key && strEq(key, e->key)) {
3160  sm = e->data;
3161  o = (smallIntt*)toBaset(sm);
3162  if (!o) {
3163  return(0);
3164  }
3165  if (checkObjectTypes && o && !isOSmallInt(o)) {
3166  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3167  return(0);
3168  }
3169  finishO(o);
3170  return(0);
3171  }
3172  free(e->key);
3173  e->key = NULL;
3174 
3175  int64_t r = o->f->get(o);
3176  terminateO(o);
3177  return(r);
3178  }
3179  }
3180 
3181  return(0);
3182 }
3183 
3184 internal int32_t cropElemInt32SmallDict(smallDictt *self, const char* key) {
3185 
3186  if (!key || !self->d) {
3187  return(0);
3188  }
3189 
3190  smallt *sm = NULL;
3191  smallIntt *o = NULL;
3192  forEachSDict(self->d, e) {
3193  if (e->key && strEq(key, e->key)) {
3194  sm = e->data;
3195  o = (smallIntt*)toBaset(sm);
3196  if (!o) {
3197  return(0);
3198  }
3199  if (checkObjectTypes && o && !isOSmallInt(o)) {
3200  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3201  return(0);
3202  }
3203  finishO(o);
3204  return(0);
3205  }
3206  free(e->key);
3207  e->key = NULL;
3208 
3209  int32_t r = (int32_t)o->f->get(o);
3210  terminateO(o);
3211  return(r);
3212  }
3213  }
3214 
3215  return(0);
3216 }
3217 
3218 internal uint64_t cropElemUintSmallDict(smallDictt *self, const char* key) {
3219 
3220  if (!key || !self->d) {
3221  return(0);
3222  }
3223 
3224  smallt *sm = NULL;
3225  smallIntt *o = NULL;
3226  forEachSDict(self->d, e) {
3227  if (e->key && strEq(key, e->key)) {
3228  sm = e->data;
3229  o = (smallIntt*)toBaset(sm);
3230  if (!o) {
3231  return(0);
3232  }
3233  if (checkObjectTypes && o && !isOSmallInt(o)) {
3234  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3235  return(0);
3236  }
3237  finishO(o);
3238  return(0);
3239  }
3240  free(e->key);
3241  e->key = NULL;
3242 
3243  uint64_t r = (uint64_t)o->f->get(o);
3244  terminateO(o);
3245  return(r);
3246  }
3247  }
3248 
3249  return(0);
3250 }
3251 
3252 internal uint32_t cropElemUint32SmallDict(smallDictt *self, const char* key) {
3253 
3254  if (!key || !self->d) {
3255  return(0);
3256  }
3257 
3258  smallt *sm = NULL;
3259  smallIntt *o = NULL;
3260  forEachSDict(self->d, e) {
3261  if (e->key && strEq(key, e->key)) {
3262  sm = e->data;
3263  o = (smallIntt*)toBaset(sm);
3264  if (!o) {
3265  return(0);
3266  }
3267  if (checkObjectTypes && o && !isOSmallInt(o)) {
3268  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3269  return(0);
3270  }
3271  finishO(o);
3272  return(0);
3273  }
3274  free(e->key);
3275  e->key = NULL;
3276 
3277  uint32_t r = (uint32_t)o->f->get(o);
3278  terminateO(o);
3279  return(r);
3280  }
3281  }
3282 
3283  return(0);
3284 }
3285 
3286 internal char* cropElemSSmallDict(smallDictt *self, const char* key) {
3287 
3288  if (!key || !self->d) {
3289  return(NULL);
3290  }
3291 
3292  smallt *sm = NULL;
3293  smallStringt *o = NULL;
3294  forEachSDict(self->d, e) {
3295  if (e->key && strEq(key, e->key)) {
3296  sm = e->data;
3297  o = (smallStringt*)toBaset(sm);
3298  if (!o) {
3299  return(NULL);
3300  }
3301  if (checkObjectTypes && o && !isOSmallString(o)) {
3302  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3303  return(NULL);
3304  }
3305  finishO(o);
3306  return(NULL);
3307  }
3308  free(e->key);
3309  e->key = NULL;
3310 
3311  char *r = dupS(o->f->get(o));
3312  terminateO(o);
3313  return(r);
3314  }
3315  }
3316 
3317  return(NULL);
3318 }
3319 
3320 internal smallDictt* cropElemDictSmallDict(smallDictt *self, const char* key) {
3321 
3322  if (!key || !self->d) {
3323  return(NULL);
3324  }
3325 
3326  smallt *sm = NULL;
3327  smallDictt *r = NULL;
3328  forEachSDict(self->d, e) {
3329  if (e->key && strEq(key, e->key)) {
3330  sm = e->data;
3331  r = (smallDictt*)toBaset(sm);
3332  if (checkObjectTypes && r && !isOSmallDict(r)) {
3333  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3334  return(NULL);
3335  }
3336  finishO(r);
3337  return(NULL);
3338  }
3339  free(e->key);
3340  e->key = NULL;
3341  break;
3342  }
3343  }
3344 
3345  return(r);
3346 }
3347 
3348 internal smallArrayt* cropElemArraySmallDict(smallDictt *self, const char* key) {
3349 
3350  if (!key || !self->d) {
3351  return(NULL);
3352  }
3353 
3354  smallt *sm = NULL;
3355  smallArrayt *r = NULL;
3356  forEachSDict(self->d, e) {
3357  if (e->key && strEq(key, e->key)) {
3358  sm = e->data;
3359  r = (smallArrayt*)toBaset(sm);
3360  if (checkObjectTypes && r && !isOSmallArray(r)) {
3361  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3362  return(NULL);
3363  }
3364  finishO(r);
3365  return(NULL);
3366  }
3367  free(e->key);
3368  e->key = NULL;
3369  break;
3370  }
3371  }
3372 
3373  return(r);
3374 }
3375 
3376 internal smallBoolt* cropElemSmallBoolSmallDict(smallDictt *self, const char* key) {
3377 
3378  if (!key || !self->d) {
3379  return(NULL);
3380  }
3381 
3382  smallt *sm = NULL;
3383  smallBoolt *r = NULL;
3384  forEachSDict(self->d, e) {
3385  if (e->key && strEq(key, e->key)) {
3386  sm = e->data;
3387  r = (smallBoolt*)toBaset(sm);
3388  if (checkObjectTypes && r && !isOSmallBool(r)) {
3389  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3390  return(NULL);
3391  }
3392  finishO(r);
3393  return(NULL);
3394  }
3395  free(e->key);
3396  e->key = NULL;
3397  break;
3398  }
3399  }
3400 
3401  return(r);
3402 }
3403 
3404 internal smallBytest* cropElemSmallBytesSmallDict(smallDictt *self, const char* key) {
3405 
3406  if (!key || !self->d) {
3407  return(NULL);
3408  }
3409 
3410  smallt *sm = NULL;
3411  smallBytest *r = NULL;
3412  forEachSDict(self->d, e) {
3413  if (e->key && strEq(key, e->key)) {
3414  sm = e->data;
3415  r = (smallBytest*)toBaset(sm);
3416  if (checkObjectTypes && r && !isOSmallBytes(r)) {
3417  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3418  return(NULL);
3419  }
3420  finishO(r);
3421  return(NULL);
3422  }
3423  free(e->key);
3424  e->key = NULL;
3425  break;
3426  }
3427  }
3428 
3429  return(r);
3430 }
3431 
3432 internal smallDoublet* cropElemSmallDoubleSmallDict(smallDictt *self, const char* key) {
3433 
3434  if (!key || !self->d) {
3435  return(NULL);
3436  }
3437 
3438  smallt *sm = NULL;
3439  smallDoublet *r = NULL;
3440  forEachSDict(self->d, e) {
3441  if (e->key && strEq(key, e->key)) {
3442  sm = e->data;
3443  r = (smallDoublet*)toBaset(sm);
3444  if (checkObjectTypes && r && !isOSmallDouble(r)) {
3445  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3446  return(NULL);
3447  }
3448  finishO(r);
3449  return(NULL);
3450  }
3451  free(e->key);
3452  e->key = NULL;
3453  break;
3454  }
3455  }
3456 
3457  return(r);
3458 }
3459 
3460 internal smallIntt* cropElemSmallIntSmallDict(smallDictt *self, const char* key) {
3461 
3462  if (!key || !self->d) {
3463  return(NULL);
3464  }
3465 
3466  smallt *sm = NULL;
3467  smallIntt *r = NULL;
3468  forEachSDict(self->d, e) {
3469  if (e->key && strEq(key, e->key)) {
3470  sm = e->data;
3471  r = (smallIntt*)toBaset(sm);
3472  if (checkObjectTypes && r && !isOSmallInt(r)) {
3473  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3474  return(NULL);
3475  }
3476  finishO(r);
3477  return(NULL);
3478  }
3479  free(e->key);
3480  e->key = NULL;
3481  break;
3482  }
3483  }
3484 
3485  return(r);
3486 }
3487 
3488 internal smallJsont* cropElemSmallJsonSmallDict(smallDictt *self, const char* key) {
3489 
3490  if (!key || !self->d) {
3491  return(NULL);
3492  }
3493 
3494  smallt *sm = NULL;
3495  forEachSDict(self->d, e) {
3496  if (e->key && strEq(key, e->key)) {
3497  sm = e->data;
3498  if ((sm->type == BYTES) || (sm->type == CONTAINER)) {
3499  return(NULL);
3500  }
3501  baset *o = toBaset(sm);
3502  if (!o) {
3503  return(NULL);
3504  }
3505  free(e->key);
3506  e->key = NULL;
3508  if (!r) {
3509  finishO(o);
3510  return(NULL);
3511  }
3512  setTopNFreeO(r, o);
3513  return(r);
3514  }
3515  }
3516 
3517  return(NULL);
3518 }
3519 
3520 internal smallStringt* cropElemSmallStringSmallDict(smallDictt *self, const char* key) {
3521 
3522  if (!key || !self->d) {
3523  return(NULL);
3524  }
3525 
3526  smallt *sm = NULL;
3527  smallStringt *r = NULL;
3528  forEachSDict(self->d, e) {
3529  if (e->key && strEq(key, e->key)) {
3530  sm = e->data;
3531  r = (smallStringt*)toBaset(sm);
3532  if (checkObjectTypes && r && !isOSmallString(r)) {
3533  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3534  return(NULL);
3535  }
3536  finishO(r);
3537  return(NULL);
3538  }
3539  free(e->key);
3540  e->key = NULL;
3541  break;
3542  }
3543  }
3544 
3545  return(r);
3546 }
3547 
3548 internal void* cropElemVoidSmallDict(smallDictt *self, const char* key) {
3549 
3550  if (!key || !self->d) {
3551  return(NULL);
3552  }
3553 
3554  smallt *sm = NULL;
3555  smallContainert *o = NULL;
3556  forEachSDict(self->d, e) {
3557  if (e->key && strEq(key, e->key)) {
3558  sm = e->data;
3559  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3560  return(NULL);
3561  }
3562  o = (smallContainert*)toBaset(sm);
3563  if (!o) {
3564  return(NULL);
3565  }
3566  if (checkObjectTypes && o && !isOSmallContainer(o)) {
3567  finishO(o);
3568  return(NULL);
3569  }
3570  free(e->key);
3571  e->key = NULL;
3572 
3573  void *r = o->f->get(o);
3574  terminateO(o);
3575  return(r);
3576  }
3577  }
3578 
3579  return(NULL);
3580 }
3581 
3583 
3584  if (!key || !self->d) {
3585  return(NULL);
3586  }
3587 
3588  smallt *sm = NULL;
3589  smallContainert *r = NULL;
3590  forEachSDict(self->d, e) {
3591  if (e->key && strEq(key, e->key)) {
3592  sm = e->data;
3593  if ((sm->type == CONTAINER) && (((sContainert*)sm)->dataType == SH_DT_BASET)) {
3594  return(NULL);
3595  }
3596  r = (smallContainert*)toBaset(sm);
3597  if (checkObjectTypes && r && !isOSmallContainer(r)) {
3598  finishO(r);
3599  return(NULL);
3600  }
3601  free(e->key);
3602  e->key = NULL;
3603  break;
3604  }
3605  }
3606 
3607  return(r);
3608 }
3609 
3610 internal smallDictt* delSmallDict(smallDictt *self, const char *key) {
3611 
3612  if (key && self->d) {
3613  // TODO report error (null) when key is not found
3614  sDictDelTiny(self->d, key);
3615  return(self);
3616  }
3617  return(NULL);
3618 }
3619 
3620 internal smallDictt* delKCharSmallDict(smallDictt *self, char key) {
3621 
3622  charToS(s, key);
3623  return(delSmallDict(self, s));
3624 }
3625 
3626 internal smallDictt* removeSmallDict(smallDictt *self, const char *key) {
3627 
3628  if (key && self->d) {
3629  forEachSDict(self->d, e) {
3630  if (e->key && eqS(key, e->key)) {
3631  free(e->key);
3632  e->key = NULL;
3633  break;
3634  }
3635  }
3636  return(self);
3637  }
3638  return(NULL);
3639 }
3640 
3641 internal smallDictt* removeKCharSmallDict(smallDictt *self, char key) {
3642 
3643  charToS(s, key);
3644  return(removeSmallDict(self, s));
3645 }
3646 
3647 internal bool hasSmallDict(smallDictt *self, const char *key) {
3648 
3649  if (!key) {
3650  return(false);
3651  }
3652 
3653  if (!self->d) {
3654  return(false);
3655  }
3656 
3657  smallt *o = sDictGetTiny(self->d, key);
3658 
3659  if (!o) {
3660  return(false);
3661  }
3662 
3663  return(true);
3664 }
3665 
3666 internal bool hasKCharSmallDict(smallDictt *self, char key) {
3667 
3668  charToS(s, key);
3669  return(hasSmallDict(self, s));
3670 }
3671 
3672 internal char* keyBySmallDict(smallDictt *self, baset *value) {
3673 
3674  // sanity checks
3675  if (!lenSmallDict(self) || !value) {
3676  return(NULL);
3677  }
3678 
3679  // search string in elements
3680  char *s = toStringO(value);
3681  char *es = NULL;
3682 
3683  forEachSDict(self->d, e) {
3684  if (e->key) {
3685  es = sToString(e->data);
3686  if (strEq(es, s)) {
3687  free(es);
3688  free(s);
3689  return(e->key);
3690  }
3691  free(es);
3692  }
3693  }
3694  free(s);
3695  return(NULL);
3696 }
3697 
3699 
3700  // sanity checks
3701  if (!lenSmallDict(self) || !u) {
3702  return(NULL);
3703  }
3704 
3705  if (checkObjectTypes && !isOUndefined(u)) {
3706  return(NULL);
3707  }
3708 
3709  // search string in elements
3710  forEachSDict(self->d, e) {
3711  if (e->key && e->data->type == UNDEFINED) {
3712  return(e->key);
3713  }
3714  }
3715  return(NULL);
3716 }
3717 
3718 internal char* keyByBoolSmallDict(smallDictt *self, bool value) {
3719 
3720  // sanity checks
3721  if (!lenSmallDict(self)) {
3722  return(NULL);
3723  }
3724 
3725  // search value in elements
3726  forEachSDict(self->d, e) {
3727  if (e->key && e->data->type == BOOL && ((sBoolt*)(e->data))->value == value) {
3728  return(e->key);
3729  }
3730  }
3731  return(NULL);
3732 }
3733 
3734 internal char* keyByDoubleSmallDict(smallDictt *self, double value) {
3735 
3736  // sanity checks
3737  if (!lenSmallDict(self)) {
3738  return(NULL);
3739  }
3740 
3741  // search value in elements
3742  forEachSDict(self->d, e) {
3743  if (e->key && e->data->type == DOUBLE && ((sDoublet*)(e->data))->value == value) {
3744  return(e->key);
3745  }
3746  }
3747  return(NULL);
3748 }
3749 
3750 internal char* keyByIntSmallDict(smallDictt *self, int64_t value) {
3751 
3752  // sanity checks
3753  if (!lenSmallDict(self)) {
3754  return(NULL);
3755  }
3756 
3757  // search value in elements
3758  forEachSDict(self->d, e) {
3759  if (e->key && e->data->type == INT && ((sIntt*)(e->data))->value == value) {
3760  return(e->key);
3761  }
3762  }
3763  return(NULL);
3764 }
3765 
3766 internal char* keyBySSmallDict(smallDictt *self, const char *string) {
3767 
3768  // sanity checks
3769  if (!lenSmallDict(self) || !string) {
3770  return(NULL);
3771  }
3772  // search string in elements
3773  forEachSDict(self->d, e) {
3774  if (e->key && e->data->type == STRING && eqS(sStringGetTiny((sStringt*)(e->data)), string)) {
3775  return(e->key);
3776  }
3777  }
3778  return(NULL);
3779 }
3780 
3781 internal char* keyByCharSmallDict(smallDictt *self, char c) {
3782 
3783  charToS(s, c);
3784  return(keyBySSmallDict(self, s));
3785 }
3786 
3787 internal char* keyByDictSmallDict(smallDictt *self, smallDictt *dict) {
3788 
3789  // sanity checks
3790  if (!lenSmallDict(self) || !dict) {
3791  return(NULL);
3792  }
3793 
3794  if (checkObjectTypes && !isOSmallDict(dict)) {
3795  return(NULL);
3796  }
3797 
3798  // search object in elements
3799  char *s = toStringO(dict);
3800  char *es = NULL;
3801 
3802  forEachSDict(self->d, e) {
3803  if (e->key && e->data->type == DICT) {
3804  es = sToString(e->data);
3805  if (eqS(es, s)) {
3806  free(es);
3807  free(s);
3808  return(e->key);
3809  }
3810  free(es);
3811  }
3812  }
3813  free(s);
3814  return(NULL);
3815 }
3816 
3818 
3819  // sanity checks
3820  if (!lenSmallDict(self) || !array) {
3821  return(NULL);
3822  }
3823 
3824  if (checkObjectTypes && !isOSmallArray(array)) {
3825  return(NULL);
3826  }
3827 
3828  // search object in elements
3829  char *s = toStringO(array);
3830  char *es = NULL;
3831 
3832  forEachSDict(self->d, e) {
3833  if (e->key && e->data->type == ARRAY) {
3834  es = sToString(e->data);
3835  if (eqS(es, s)) {
3836  free(es);
3837  free(s);
3838  return(e->key);
3839  }
3840  free(es);
3841  }
3842  }
3843  free(s);
3844  return(NULL);
3845 }
3846 
3847 internal char* keyByArraycSmallDict(smallDictt *self, char **array) {
3848 
3849  // sanity checks
3850  if (!lenSmallDict(self) || !array) {
3851  return(NULL);
3852  }
3853 
3854  // search object in elements
3855  char *s = toStringListSGF(array);
3856  char *es = NULL;
3857 
3858  forEachSDict(self->d, e) {
3859  if (e->key && e->data->type == ARRAY) {
3860  es = sToString(e->data);
3861  if (eqS(es, s)) {
3862  free(es);
3863  free(s);
3864  return(e->key);
3865  }
3866  free(es);
3867  }
3868  }
3869  free(s);
3870  return(NULL);
3871 }
3872 
3873 internal char* keyByCArraycSmallDict(smallDictt *self, const char **array) {
3874 
3875  // sanity checks
3876  if (!lenSmallDict(self) || !array) {
3877  return(NULL);
3878  }
3879 
3880  // search object in elements
3881  char *s = toStringListCSGF(array);
3882  char *es = NULL;
3883 
3884  forEachSDict(self->d, e) {
3885  if (e->key && e->data->type == ARRAY) {
3886  es = sToString(e->data);
3887  if (eqS(es, s)) {
3888  free(es);
3889  free(s);
3890  return(e->key);
3891  }
3892  free(es);
3893  }
3894  }
3895  free(s);
3896  return(NULL);
3897 }
3898 
3900 
3901  // sanity checks
3902  if (!lenSmallDict(self) || !value) {
3903  return(NULL);
3904  }
3905 
3906  if (checkObjectTypes && !isOSmallBool(value)) {
3907  return(NULL);
3908  }
3909 
3910  // search object in elements
3911  bool b = value->f->get(value);
3912 
3913  forEachSDict(self->d, e) {
3914  if (e->key && e->data->type == BOOL && ((sBoolt*)(e->data))->value == b) {
3915  return(e->key);
3916  }
3917  }
3918  return(NULL);
3919 }
3920 
3922 
3923  // sanity checks
3924  if (!lenSmallDict(self) || !value || !value->B) {
3925  return(NULL);
3926  }
3927 
3928  if (checkObjectTypes && !isOSmallBytes(value)) {
3929  return(NULL);
3930  }
3931 
3932  // search object in elements
3933  void *b = sBytesGet(value->B);
3934  uint32_t count = value->B->count;
3935 
3936  forEachSDict(self->d, e) {
3937  if (e->key && e->data->type == BYTES && ((sBytest*)e->data)->count == count && !memcmp(&(((sBytest*)e->data)->data), b, count)) {
3938  return(e->key);
3939  }
3940  }
3941  return(NULL);
3942 }
3943 
3945 
3946  // sanity checks
3947  if (!lenSmallDict(self) || !value) {
3948  return(NULL);
3949  }
3950 
3951  if (checkObjectTypes && !isOSmallDouble(value)) {
3952  return(NULL);
3953  }
3954 
3955  // search object in elements
3956  double v = value->f->get(value);
3957 
3958  forEachSDict(self->d, e) {
3959  if (e->key && e->data->type == DOUBLE && ((sDoublet*)(e->data))->value == v) {
3960  return(e->key);
3961  }
3962  }
3963  return(NULL);
3964 }
3965 
3967 
3968  // sanity checks
3969  if (!lenSmallDict(self) || !value) {
3970  return(NULL);
3971  }
3972 
3973  if (checkObjectTypes && !isOSmallInt(value)) {
3974  return(NULL);
3975  }
3976 
3977  // search object in elements
3978  int64_t v = value->f->get(value);
3979 
3980  forEachSDict(self->d, e) {
3981  if (e->key && e->data->type == INT && ((sIntt*)(e->data))->value == v) {
3982  return(e->key);
3983  }
3984  }
3985  return(NULL);
3986 }
3987 
3988 internal char* keyBySmallJsonSmallDict(smallDictt *self, smallJsont *string) {
3989 
3990  // sanity checks
3991  if (!lenSmallDict(self) || !string) {
3992  return(NULL);
3993  }
3994 
3995  if (checkObjectTypes && !isOSmallJson(string)) {
3996  return(NULL);
3997  }
3998 
3999  const char *type = getTopTypeO(string);
4000 
4001  if (!type) {
4002  // smallJson is empty
4003  return(NULL);
4004  }
4005 
4006  baset *O = NULL;
4007  char *r = NULL;
4008  if (eqS(type, "undefined")) {
4009  O = getTopO(string);
4010  r = keyBySmallDict(self, O);
4011  finishO(O);
4012  }
4013  else if (eqS(type, "bool")) {
4014  O = getTopO(string);
4015  r = keyBySmallBoolSmallDict(self, (smallBoolt*)O);
4016  finishO(O);
4017  }
4018  else if (eqS(type, "double")) {
4019  O = getTopO(string);
4020  r = keyBySmallDoubleSmallDict(self, (smallDoublet*)O);
4021  finishO(O);
4022  }
4023  else if (eqS(type, "int")) {
4024  O = getTopO(string);
4025  r = keyBySmallIntSmallDict(self, (smallIntt*)O);
4026  finishO(O);
4027  }
4028  else if (eqS(type, "string")) {
4029  O = getTopO(string);
4030  r = keyBySmallStringSmallDict(self, (smallStringt*)O);
4031  finishO(O);
4032  }
4033  else if (eqS(type, "dict")) {
4034  O = getTopO(string);
4035  r = keyByDictSmallDict(self, (smallDictt*)O);
4036  finishO(O);
4037  }
4038  else if (eqS(type, "array")) {
4039  O = getTopO(string);
4040  r = keyByArraySmallDict(self, (smallArrayt*)O);
4041  finishO(O);
4042  }
4043  return(r);
4044 }
4045 
4046 internal char* keyBySmallStringSmallDict(smallDictt *self, smallStringt *string) {
4047 
4048  // sanity checks
4049  if (!lenSmallDict(self)) {
4050  return(NULL);
4051  }
4052 
4053  if (!string || !string->data) {
4054  return(NULL);
4055  }
4056 
4057  if (checkObjectTypes && !isOSmallString(string)) {
4058  return(NULL);
4059  }
4060 
4061  // search string in elements
4062  char *s = sStringGetTiny(string->data);
4063 
4064  forEachSDict(self->d, e) {
4065  if (e->key && e->data->type == STRING && strEq(sStringGetTiny((sStringt*)(e->data)), s)) {
4066  return(e->key);
4067  }
4068  }
4069  return(NULL);
4070 }
4071 
4072 internal char* keyBySmallContainerSmallDict(smallDictt *self, smallContainert *container) {
4073 
4074  if (!lenSmallDict(self) || !container) {
4075  return(NULL);
4076  }
4077 
4078  if (checkObjectTypes && !isOSmallContainer(container)) {
4079  return(NULL);
4080  }
4081 
4082  return(NULL);
4083 }
4084 
4085 internal char* icKeyBySmallDict(smallDictt *self, baset *value) {
4086 
4087  // sanity checks
4088  if (!lenSmallDict(self) || !value) {
4089  return(NULL);
4090  }
4091 
4092  // search string in elements
4093  char *s = toStringO(value);
4094  char *es = NULL;
4095 
4096  forEachSDict(self->d, e) {
4097  if (e->key) {
4098  es = sToString(e->data);
4099  if (icEqS(es, s)) {
4100  free(es);
4101  free(s);
4102  return(e->key);
4103  }
4104  free(es);
4105  }
4106  }
4107  free(s);
4108  return(NULL);
4109 }
4110 
4111 internal char* icKeyBySSmallDict(smallDictt *self, const char *string) {
4112 
4113  // sanity checks
4114  if (!lenSmallDict(self) || !string) {
4115  return(NULL);
4116  }
4117  // search string in elements
4118  forEachSDict(self->d, e) {
4119  if (e->key && e->data->type == STRING && icEqS(sStringGetTiny((sStringt*)(e->data)), string)) {
4120  return(e->key);
4121  }
4122  }
4123  return(NULL);
4124 }
4125 
4126 internal char* icKeyByCharSmallDict(smallDictt *self, char c) {
4127 
4128  charToS(s, c);
4129  return(icKeyBySSmallDict(self, s));
4130 }
4131 
4132 internal char* icKeyByDictSmallDict(smallDictt *self, smallDictt *dict) {
4133 
4134  // sanity checks
4135  if (!lenSmallDict(self) || !dict) {
4136  return(NULL);
4137  }
4138 
4139  if (checkObjectTypes && !isOSmallDict(dict)) {
4140  return(NULL);
4141  }
4142 
4143  // search object in elements
4144  char *s = toStringO(dict);
4145  char *es = NULL;
4146 
4147  forEachSDict(self->d, e) {
4148  if (e->key && e->data->type == DICT) {
4149  es = sToString(e->data);
4150  if (icEqS(es, s)) {
4151  free(es);
4152  free(s);
4153  return(e->key);
4154  }
4155  free(es);
4156  }
4157  }
4158  free(s);
4159  return(NULL);
4160 }
4161 
4163 
4164  // sanity checks
4165  if (!lenSmallDict(self) || !array) {
4166  return(NULL);
4167  }
4168 
4169  if (checkObjectTypes && !isOSmallArray(array)) {
4170  return(NULL);
4171  }
4172 
4173  // search object in elements
4174  char *s = toStringO(array);
4175  char *es = NULL;
4176 
4177  forEachSDict(self->d, e) {
4178  if (e->key && e->data->type == ARRAY) {
4179  es = sToString(e->data);
4180  if (icEqS(es, s)) {
4181  free(es);
4182  free(s);
4183  return(e->key);
4184  }
4185  free(es);
4186  }
4187  }
4188  free(s);
4189  return(NULL);
4190 }
4191 
4192 internal char* icKeyByArraycSmallDict(smallDictt *self, char **array) {
4193 
4194  // sanity checks
4195  if (!lenSmallDict(self) || !array) {
4196  return(NULL);
4197  }
4198 
4199  // search object in elements
4200  char *s = toStringListSGF(array);
4201  char *es = NULL;
4202 
4203  forEachSDict(self->d, e) {
4204  if (e->key && e->data->type == ARRAY) {
4205  es = sToString(e->data);
4206  if (icEqS(es, s)) {
4207  free(es);
4208  free(s);
4209  return(e->key);
4210  }
4211  free(es);
4212  }
4213  }
4214  free(s);
4215  return(NULL);
4216 }
4217 
4218 internal char* icKeyByCArraycSmallDict(smallDictt *self, const char **array) {
4219 
4220  // sanity checks
4221  if (!lenSmallDict(self) || !array) {
4222  return(NULL);
4223  }
4224 
4225  // search object in elements
4226  char *s = toStringListCSGF(array);
4227  char *es = NULL;
4228 
4229  forEachSDict(self->d, e) {
4230  if (e->key && e->data->type == ARRAY) {
4231  es = sToString(e->data);
4232  if (icEqS(es, s)) {
4233  free(es);
4234  free(s);
4235  return(e->key);
4236  }
4237  free(es);
4238  }
4239  }
4240  free(s);
4241  return(NULL);
4242 }
4243 
4244 internal char* icKeyBySmallJsonSmallDict(smallDictt *self, smallJsont *string) {
4245 
4246  // sanity checks
4247  if (!lenSmallDict(self) || !string) {
4248  return(NULL);
4249  }
4250 
4251  if (checkObjectTypes && !isOSmallJson(string)) {
4252  return(NULL);
4253  }
4254 
4255  const char *type = getTopTypeO(string);
4256 
4257  if (!type) {
4258  // smallJson is empty
4259  return(NULL);
4260  }
4261 
4262  baset *O = NULL;
4263  char *r = NULL;
4264  if (eqS(type, "undefined")) {
4265  O = getTopO(string);
4266  r = keyBySmallDict(self, O);
4267  finishO(O);
4268  }
4269  else if (eqS(type, "bool")) {
4270  O = getTopO(string);
4271  r = keyBySmallBoolSmallDict(self, (smallBoolt*)O);
4272  finishO(O);
4273  }
4274  else if (eqS(type, "double")) {
4275  O = getTopO(string);
4276  r = keyBySmallDoubleSmallDict(self, (smallDoublet*)O);
4277  finishO(O);
4278  }
4279  else if (eqS(type, "int")) {
4280  O = getTopO(string);
4281  r = keyBySmallIntSmallDict(self, (smallIntt*)O);
4282  finishO(O);
4283  }
4284  else if (eqS(type, "string")) {
4285  O = getTopO(string);
4287  finishO(O);
4288  }
4289  else if (eqS(type, "dict")) {
4290  O = getTopO(string);
4291  r = icKeyByDictSmallDict(self, (smallDictt*)O);
4292  finishO(O);
4293  }
4294  else if (eqS(type, "array")) {
4295  O = getTopO(string);
4296  r = icKeyByArraySmallDict(self, (smallArrayt*)O);
4297  finishO(O);
4298  }
4299  return(r);
4300 }
4301 
4302 internal char* icKeyBySmallStringSmallDict(smallDictt *self, smallStringt *string) {
4303 
4304  // sanity checks
4305  if (!lenSmallDict(self)) {
4306  return(NULL);
4307  }
4308 
4309  if (!string || !string->data) {
4310  return(NULL);
4311  }
4312 
4313  if (checkObjectTypes && !isOSmallString(string)) {
4314  return(NULL);
4315  }
4316 
4317  // search string in elements
4318  char *s = sStringGetTiny(string->data);
4319 
4320  forEachSDict(self->d, e) {
4321  if (e->key && e->data->type == STRING && icEqS(sStringGetTiny((sStringt*)(e->data)), s)) {
4322  return(e->key);
4323  }
4324  }
4325  return(NULL);
4326 }
4327 
4328 
4330  sDictt *d = NULL;
4331 
4332  if (!lenSmallDict(self)) {
4333  return(self);
4334  }
4335 
4336  isError(d, allocSDict()) return(NULL);
4337 
4338  forEachSDict(self->d, e) {
4339  if (e->key) {
4340  sDictSetTiny(&d, e->key, e->data);
4341  free(e->key);
4342  }
4343  }
4344 
4345  free(self->d);
4346  self->d = d;
4347  return(self);
4348 }
4349 
4350 internal char** keysSmallDict(smallDictt *self) {
4351  char **r = NULL;
4352 
4353  if (!lenSmallDict(self)) {
4354  // empty
4355  return(NULL);
4356  }
4357 
4358  forEachSDict(self->d, e) {
4359  if (e->key) {
4360  pErrorNULL(listPushS(&r, e->key));
4361  }
4362  }
4363  return(r);
4364 }
4365 
4367 
4368  char** r = keysSmallDict(self);
4370  if (!a) {
4371  listFreeS(r);
4372  return(NULL);
4373  }
4374  fromArrayNFreeO(a, r, 0);
4375  return(a);
4376 }
4377 
4379 
4380  if (!lenSmallDict(self)) {
4381  // empty
4382  return(NULL);
4383  }
4384 
4386  if (!a) {
4387  return(NULL);
4388  }
4389 
4390  forEachSDict(self->d, e) {
4391  if (e->key) {
4392  sArrayPushTiny(&(a->a), e->data);
4393  }
4394  }
4395 
4396  return(a);
4397 }
4398 
4400 
4401  // sanity checks
4402  if (!smallDict) {
4403  return(NULL);
4404  }
4405 
4406  if (checkObjectTypes && !isOSmallDict(smallDict)) {
4407  return(NULL);
4408  }
4409 
4410  if (!smallDict->f->len(smallDict)) {
4411  return(self);
4412  }
4413 
4414  forEachSDict(smallDict->d, e) {
4415  if (e->key) {
4416  sDictSetTiny(&(self->d), e->key, e->data);
4417  }
4418  }
4419  return(self);
4420 }
4421 
4423 
4424  // sanity checks
4425  if (!json) {
4426  return(NULL);
4427  }
4428 
4429  if (checkObjectTypes && !isOSmallJson(json)) {
4430  return(NULL);
4431  }
4432 
4433  const char *type = getTopTypeO(json);
4434 
4435  if (!eqS(type,"dict")) {
4436  return(NULL);
4437  }
4438 
4439  if (!json->f->len(json)) {
4440  return(self);
4441  }
4442 
4443  forEachSDict(json->top, e) {
4444  if (e->key) {
4445  sDictSetTiny(&(self->d), e->key, e->data);
4446  }
4447  }
4448  return(self);
4449 }
4450 
4452  smallDictt *r = NULL;
4453 
4454  r = mergeSmallDict(self, smallDict);
4455  if (r) {
4456  smashO(smallDict);
4457  }
4458  return(r);
4459 }
4460 
4462  smallDictt *r = NULL;
4463 
4464  r = mergeSmallJsonSmallDict(self, json);
4465  if (r) {
4466  smashO(json);
4467  }
4468  return(r);
4469 }
4470 
4471 
4473 
4474  // sanity checks
4475  if (!smallDict) {
4476  return(NULL);
4477  }
4478 
4479  if (checkObjectTypes && !isOSmallDict(smallDict)) {
4480  return(NULL);
4481  }
4482 
4483  if (!smallDict->f->len(smallDict)) {
4484  return(self);
4485  }
4486 
4487  forEachSDict(smallDict->d, e) {
4488  if (e->key) {
4489  if (self->d && sDictGetTiny(self->d, e->key)) {
4490  // keep existing value
4491  continue;
4492  }
4493  sDictSetTiny(&(self->d), e->key, e->data);
4494  }
4495  }
4496  return(self);
4497 }
4498 
4500  smallDictt *r = NULL;
4501 
4502  r = appendSmallDict(self, smallDict);
4503  if (r) {
4504  smashO(smallDict);
4505  }
4506  return(r);
4507 }
4508 
4509 internal bool equalSmallDictBase(smallDictt* self, baset* p2) {
4510 
4511  if (!p2) {
4512  return(false);
4513  }
4514 
4515  if (!isOType(p2, "smallDict")) {
4516  return(false);
4517  }
4518  return(equalSmallDict(self, (smallDictt *) p2));
4519 }
4520 
4521 internal bool equalSmallDictSmallJson(smallDictt* self, smallJsont* p2) {
4522 
4523  // sanity checks
4524  if (!p2) {
4525  return(false);
4526  }
4527 
4528  if (checkObjectTypes && !isOSmallJson(p2)) {
4529  return(false);
4530  }
4531 
4532  const char *type = getTopTypeO(p2);
4533 
4534  if (!eqS(type,"dict")) {
4535  return(false);
4536  }
4537 
4538  return(p2->f->equalSmallDict(p2, self));
4539 }
4540 
4541 internal bool equalSmallDict(smallDictt* self, smallDictt* p2) {
4542 
4543  if (!self->d || !p2) {
4544  return(false);
4545  }
4546 
4547  if (checkObjectTypes && !isOSmallDict(p2)) {
4548  return(false);
4549  }
4550 
4551  if (!p2->d) {
4552  return(false);
4553  }
4554 
4555  if (lenSmallDict(self) != lenSmallDict(p2)) {
4556  // different key counts in self and p2
4557  return(false);
4558  }
4559 
4560 
4561  //TODO - sort keys, use binary search
4562  forEachSDict(self->d, e) {
4563  if (e->key) {
4564  bool foundK = false;
4565  forEachSDict(p2->d, E) {
4566  if (E->key) {
4567  if (strEq(e->key, E->key)) {
4568  foundK = true;
4569  char *s = sToString(e->data);
4570  char *S = sToString(E->data);
4571  if (!strEq(s, S)) {
4572  freeManyS(s, S);
4573  return(false);
4574  }
4575  freeManyS(s, S);
4576  break;
4577  }
4578  }
4579  }
4580  if (!foundK) {
4581  return(false);
4582  }
4583  }
4584  }
4585  return(true);
4586 }
4587 
4588 internal bool icEqualSmallDictBase(smallDictt* self, baset* p2) {
4589 
4590  if (!p2) {
4591  return(false);
4592  }
4593 
4594  if (!isOType(p2, "smallDict")) {
4595  return(false);
4596  }
4597  return(icEqualSmallDict(self, (smallDictt *) p2));
4598 }
4599 
4601 
4602  // sanity checks
4603  if (!p2) {
4604  return(false);
4605  }
4606 
4607  if (checkObjectTypes && !isOSmallJson(p2)) {
4608  return(false);
4609  }
4610 
4611  const char *type = getTopTypeO(p2);
4612 
4613  if (!eqS(type,"dict")) {
4614  return(false);
4615  }
4616 
4617  return(p2->f->icEqualSmallDict(p2, self));
4618 }
4619 
4620 internal bool icEqualSmallDict(smallDictt* self, smallDictt* p2) {
4621 
4622  if (!self->d || !p2) {
4623  return(false);
4624  }
4625 
4626  if (checkObjectTypes && !isOSmallDict(p2)) {
4627  return(false);
4628  }
4629 
4630  if (!p2->d) {
4631  return(false);
4632  }
4633 
4634  if (lenSmallDict(self) != lenSmallDict(p2)) {
4635  // different key counts in self and p2
4636  return(false);
4637  }
4638 
4639 
4640  //TODO - sort keys, use binary search
4641  forEachSDict(self->d, e) {
4642  if (e->key) {
4643  bool foundK = false;
4644  forEachSDict(p2->d, E) {
4645  if (E->key) {
4646  if (eqS(e->key, E->key)) {
4647  foundK = true;
4648  char *s = sToString(e->data);
4649  char *S = sToString(E->data);
4650  if (!icEqS(s, S)) {
4651  freeManyS(s, S);
4652  return(false);
4653  }
4654  freeManyS(s, S);
4655  break;
4656  }
4657  }
4658  }
4659  if (!foundK) {
4660  return(false);
4661  }
4662  }
4663  }
4664  return(true);
4665 }
4666 
4667 
4668 internal size_t lenSmallDict(smallDictt *self) {
4669  size_t len;
4670 
4671  if (!self->d || !self->d->count) {
4672  return(0);
4673  }
4674 
4675  len = 0;
4676  forEachSDict(self->d, e) {
4677  if (e->key) {
4678  len++;
4679  }
4680  }
4681 
4682  return(len);
4683 }
4684 
4686 
4687  freeSmallDict(self);
4688  return(self);
4689 }
4690 
4691 internal bool isEmptySmallDict(smallDictt *self) {
4692  size_t len;
4693 
4694  len = lenSmallDict(self);
4695 
4696  if (!len) {
4697  return(true);
4698  }
4699 
4700  forEachSDict(self->d, e) {
4701  if (e->key) {
4702  return(false);
4703  }
4704  }
4705 
4706  // should not be reached, make sure a value is returned
4707  return(true);
4708 }
4709 
4710 internal void enumerateSmallDictF(smallDictt *self, void *closure, enumerateElementSmallDictFt funcElem) {
4711 
4712  if (!lenSmallDict(self)) {
4713  return;
4714  }
4715 
4716  forEachSDict(self->d, e) {
4717  if (e->key) {
4718  baset *E = toBaset(e->data);
4719  if (!funcElem(closure, e->key, E)) {
4720  if (e->data->type == CONTAINER && ((sContainert*)e->data)->dataType == SH_DT_BASET) {
4721  break;
4722  }
4723  finishO(E);
4724  break;
4725  }
4726  if (e->data->type == CONTAINER && ((sContainert*)e->data)->dataType == SH_DT_BASET) {
4727  continue;
4728  }
4729  finishO(E);
4730 }
4731  }
4732  }
4733 
4735 
4736  // reset iterIndex to a known value
4737  self->iterIndex = -1;
4738  if (isEmptySmallDict(self)) {
4739  // no iteration on empty arrays
4740  return(NULL);
4741  }
4742 
4743  // get first element
4744  range(i, self->d->count)
4745  if ((&((self->d)->elements) + i)->key) {
4746  self->iterIndex = (ssize_t)i;
4747  break;
4748  }
4749  if (self->iterElementDataType != SH_DT_BASET) {
4750  // free already created base object
4751  finishO(self->iterElement);
4752  }
4753  self->iterKey = (&((self->d)->elements) + self->iterIndex)->key;
4754  smallt *o = (&((self->d)->elements) + self->iterIndex)->data;
4755  if ((o->type == CONTAINER) && (((sContainert*)o)->dataType == SH_DT_BASET)) {
4756  self->iterElementDataType = SH_DT_BASET;
4757  }
4758  else {
4759  self->iterElementDataType = SH_DT_UNKNOWN;
4760  }
4761  self->iterElement = toBaset(o);
4762  return(self->iterElement);
4763 }
4764 
4765 internal const char* iterStartKeySmallDict(smallDictt *self) {
4766 
4767  // reset iterIndex to a known value
4768  self->iterIndex = -1;
4769  if (isEmptySmallDict(self)) {
4770  // no iteration on empty arrays
4771  return(NULL);
4772  }
4773 
4774  // get first element
4775  range(i, self->d->count)
4776  if ((&((self->d)->elements) + i)->key) {
4777  self->iterIndex = (ssize_t)i;
4778  break;
4779  }
4780  if (self->iterElementDataType != SH_DT_BASET) {
4781  // free already created base object
4782  finishO(self->iterElement);
4783  }
4784  self->iterKey = (&((self->d)->elements) + self->iterIndex)->key;
4785  smallt *o = (&((self->d)->elements) + self->iterIndex)->data;
4786  if ((o->type == CONTAINER) && (((sContainert*)o)->dataType == SH_DT_BASET)) {
4787  self->iterElementDataType = SH_DT_BASET;
4788  }
4789  else {
4790  self->iterElementDataType = SH_DT_UNKNOWN;
4791  }
4792  self->iterElement = toBaset(o);
4793  return(self->iterKey);
4794 }
4795 
4797 
4798  if (self->iterIndex == -1) {
4799  // the iteration hasn't started
4800  return(NULL);
4801  }
4802  // get next element
4803  self->iterIndex++;
4804  if (self->iterElementDataType != SH_DT_BASET) {
4805  // free already created base object
4806  finishO(self->iterElement);
4807  }
4808  rangeFrom(i, (size_t)self->iterIndex, self->d->count) {
4809  if ((&((self->d)->elements) + i)->key) {
4810  self->iterIndex = (ssize_t)i;
4811  break;
4812  }
4813  if (!(&((self->d)->elements) + i)->key && (i == (self->d->count -1))) {
4814  // last element is null, finish iteration
4815  self->iterIndex = self->d->count;
4816  }
4817  }
4818  if ((self->iterIndex >= self->d->count)) {
4819  // the index is outside the array, the iteration is finished
4820  self->iterIndex = -1;
4821  return(NULL);
4822  }
4823  self->iterKey = (&((self->d)->elements) + self->iterIndex)->key;
4824  smallt *o = (&((self->d)->elements) + self->iterIndex)->data;
4825  if ((o->type == CONTAINER) && (((sContainert*)o)->dataType == SH_DT_BASET)) {
4826  self->iterElementDataType = SH_DT_BASET;
4827  }
4828  else {
4829  self->iterElementDataType = SH_DT_UNKNOWN;
4830  }
4831  self->iterElement = toBaset(o);
4832  return(self->iterElement);
4833 }
4834 
4835 internal const char* iterNextKeySmallDict(smallDictt *self) {
4836 
4837  if (self->iterIndex == -1) {
4838  // the iteration hasn't started
4839  return(NULL);
4840  }
4841  // get next element
4842  self->iterIndex++;
4843  if (self->iterElementDataType != SH_DT_BASET) {
4844  // free already created base object
4845  finishO(self->iterElement);
4846  }
4847  rangeFrom(i, (size_t)self->iterIndex, self->d->count) {
4848  if ((&((self->d)->elements) + i)->key) {
4849  self->iterIndex = (ssize_t)i;
4850  break;
4851  }
4852  if (!(&((self->d)->elements) + i)->key && (i == (self->d->count -1))) {
4853  // last element is null, finish iteration
4854  self->iterIndex = self->d->count;
4855  }
4856  }
4857  if ((self->iterIndex >= self->d->count)) {
4858  // the index is outside the array, the iteration is finished
4859  self->iterIndex = -1;
4860  return(NULL);
4861  }
4862  self->iterKey = (&((self->d)->elements) + self->iterIndex)->key;
4863  smallt *o = (&((self->d)->elements) + self->iterIndex)->data;
4864  if ((o->type == CONTAINER) && (((sContainert*)o)->dataType == SH_DT_BASET)) {
4865  self->iterElementDataType = SH_DT_BASET;
4866  }
4867  else {
4868  self->iterElementDataType = SH_DT_UNKNOWN;
4869  }
4870  self->iterElement = toBaset(o);
4871  return(self->iterKey);
4872 }
4873 
4875 
4876  return(self->iterElement);
4877 }
4878 
4879 internal const char* iterKeySmallDict(smallDictt *self) {
4880 
4881  return(self->iterKey);
4882 }
4883 
4885  size_t len;
4886  uint32_t count;
4887 
4888  if (!keys || !values) {
4889  return(NULL);
4890  }
4891 
4892  if (checkObjectTypes && (!isOSmallArray(keys) || !isOSmallArray(values))) {
4893  return(NULL);
4894  }
4895 
4896  if (!keys->f->len(keys) || !values->f->len(values)) {
4897  return(self);
4898  }
4899 
4900  len = MIN(keys->f->len(keys), values->f->len(values));
4901 
4902  count = 0;
4903 
4904  forEachSmallArray(keys, K) {
4905  if (!isOSmallString(K)) {
4906  finishO(K);
4907  return(NULL);
4908  }
4909  sDictSetTiny(&(self->d), ssGet(K), sArrayGetTiny(values->a, count));
4910  finishO(K);
4911  count++;
4912  if (count == len) {
4913  break;
4914  }
4915  }
4916 
4917  //if keys->f->len(keys) != values->f->len(values)
4918  // return 0
4919  //else
4920  // return 1
4921  return(self);
4922 }
4923 
4925 
4926  if (!keys || !values) {
4927  return(NULL);
4928  }
4929 
4930  if (checkObjectTypes && !isOSmallArray(keys)) {
4931  return(NULL);
4932  }
4933 
4934  if (checkObjectTypes && !isOSmallJson(values)) {
4935  return(NULL);
4936  }
4937 
4938  const char *type = getTopTypeO(values);
4939 
4940  if (!eqS(type,"array")) {
4941  return(NULL);
4942  }
4943 
4945  if (!a.f) {
4946  return(NULL);
4947  }
4948  setsoO(&a, (sArrayt*)getsoO(values));
4949  return(zipSmallDict(self, keys, &a));
4950 }
4951 
4953 
4954  if (!keys || !values) {
4955  return(NULL);
4956  }
4957 
4958  if (checkObjectTypes && !isOSmallJson(keys)) {
4959  return(NULL);
4960  }
4961 
4962  if (checkObjectTypes && !isOSmallArray(values)) {
4963  return(NULL);
4964  }
4965 
4966  const char *type = getTopTypeO(keys);
4967 
4968  if (!eqS(type,"array")) {
4969  return(NULL);
4970  }
4971 
4973  if (!a.f) {
4974  return(NULL);
4975  }
4976  setsoO(&a, (sArrayt*)getsoO(keys));
4977  return(zipSmallDict(self, &a, values));
4978 }
4979 
4981 
4982  if (!keys || !values) {
4983  return(NULL);
4984  }
4985 
4986  if (checkObjectTypes && !isOSmallJson(keys)) {
4987  return(NULL);
4988  }
4989 
4990  if (checkObjectTypes && !isOSmallJson(values)) {
4991  return(NULL);
4992  }
4993 
4994  const char *type = getTopTypeO(keys);
4995 
4996  if (!eqS(type,"array")) {
4997  return(NULL);
4998  }
4999 
5000  type = getTopTypeO(values);
5001 
5002  if (!eqS(type,"array")) {
5003  return(NULL);
5004  }
5005 
5007  if (!a.f) {
5008  return(NULL);
5009  }
5011  if (!b.f) {
5012  return(NULL);
5013  }
5014  setsoO(&a, (sArrayt*)getsoO(keys));
5015  setsoO(&b, (sArrayt*)getsoO(values));
5016  return(zipSmallDict(self, &a, &b));
5017 }
5018 
5020 
5021  if (!keys || !values) {
5022  return(NULL);
5023  }
5024 
5025  if (checkObjectTypes && !isOSmallJson(keys)) {
5026  return(NULL);
5027  }
5028 
5029  const char *type = getTopTypeO(keys);
5030 
5031  if (!eqS(type,"array")) {
5032  return(NULL);
5033  }
5034 
5036  if (!a.f) {
5037  return(NULL);
5038  }
5039  setsoO(&a, (sArrayt*)getsoO(keys));
5040  return(zipVArraySmallDict(self, &a, values));
5041 }
5042 
5044 
5045  if (!keys || !values) {
5046  return(NULL);
5047  }
5048 
5049  if (checkObjectTypes && !isOSmallJson(keys)) {
5050  return(NULL);
5051  }
5052 
5053  const char *type = getTopTypeO(keys);
5054 
5055  if (!eqS(type,"array")) {
5056  return(NULL);
5057  }
5058 
5060  if (!a.f) {
5061  return(NULL);
5062  }
5063  setsoO(&a, (sArrayt*)getsoO(keys));
5064  return(zipVCArraySmallDict(self, &a, values));
5065 }
5066 
5068  size_t len;
5069  uint32_t count;
5070 
5071  if (!keys || !values) {
5072  return(NULL);
5073  }
5074 
5075  if (checkObjectTypes && !isOSmallArray(values)) {
5076  return(NULL);
5077  }
5078 
5079  if (!listLengthS(keys) || !values->f->len(values)) {
5080  return(self);
5081  }
5082 
5083  len = MIN(listLengthS(keys), values->f->len(values));
5084 
5085  count = 0;
5086 
5087  forEachS(keys, k) {
5088  sDictSetTiny(&(self->d), k, sArrayGetTiny(values->a, count));
5089  count++;
5090  if (count == len) {
5091  break;
5092  }
5093  }
5094 
5095  //if keys->f->len(keys) != values->f->len(values)
5096  // return 0
5097  //else
5098  // return 1
5099  return(self);
5100 }
5101 
5103  size_t len;
5104  uint32_t count;
5105 
5106  if (!keys || !values) {
5107  return(NULL);
5108  }
5109 
5110  if (checkObjectTypes && !isOSmallArray(values)) {
5111  return(NULL);
5112  }
5113 
5114  if (!listLengthCS(keys) || !values->f->len(values)) {
5115  return(self);
5116  }
5117 
5118  len = MIN(listLengthCS(keys), values->f->len(values));
5119 
5120  count = 0;
5121 
5122  forEachCS(keys, k) {
5123  sDictSetTiny(&(self->d), k, sArrayGetTiny(values->a, count));
5124  count++;
5125  if (count == len) {
5126  break;
5127  }
5128  }
5129 
5130  //if keys->f->len(keys) != values->f->len(values)
5131  // return 0
5132  //else
5133  // return 1
5134  return(self);
5135 }
5136 
5138 
5139  if (!keys || !values) {
5140  return(NULL);
5141  }
5142 
5143  if (checkObjectTypes && !isOSmallJson(values)) {
5144  return(NULL);
5145  }
5146 
5147  const char *type = getTopTypeO(values);
5148 
5149  if (!eqS(type,"array")) {
5150  return(NULL);
5151  }
5152 
5154  if (!a.f) {
5155  return(NULL);
5156  }
5157  setsoO(&a, (sArrayt*)getsoO(values));
5158  return(zipArraySmallDict(self, keys, &a));
5159 }
5160 
5162 
5163  if (!keys || !values) {
5164  return(NULL);
5165  }
5166 
5167  if (checkObjectTypes && !isOSmallJson(values)) {
5168  return(NULL);
5169  }
5170 
5171  const char *type = getTopTypeO(values);
5172 
5173  if (!eqS(type,"array")) {
5174  return(NULL);
5175  }
5176 
5178  if (!a.f) {
5179  return(NULL);
5180  }
5181  setsoO(&a, (sArrayt*)getsoO(values));
5182  return(zipCArraySmallDict(self, keys, &a));
5183 }
5184 
5185 internal smallDictt* zipArrayArraySmallDict(smallDictt *self, char** keys, char** values) {
5186  size_t len;
5187  size_t count;
5188 
5189  if (!keys || !values) {
5190  return(NULL);
5191  }
5192 
5193  if (!listLengthS(keys) || !listLengthS(values)) {
5194  return(self);
5195  }
5196 
5197  len = MIN(listLengthS(keys), listLengthS(values));
5198 
5199  count = 0;
5200 
5201  smallt *e;
5202  forEachS(keys, k) {
5203  e = (smallt *) allocSStringTiny(values[count]);
5204  if (!e) {
5205  return(NULL);
5206  }
5207  sDictSetTiny(&(self->d), k, e);
5208  count++;
5209  if (count == len) {
5210  break;
5211  }
5212  }
5213 
5214  //if keys->f->len(keys) != values->f->len(values)
5215  // return 0
5216  //else
5217  // return 1
5218  return(self);
5219 }
5220 
5221 internal smallDictt* zipCArrayArraySmallDict(smallDictt *self, const char** keys, char** values) {
5222  size_t len;
5223  size_t count;
5224 
5225  if (!keys || !values) {
5226  return(NULL);
5227  }
5228 
5229  if (!listLengthCS(keys) || !listLengthS(values)) {
5230  return(self);
5231  }
5232 
5233  len = MIN(listLengthCS(keys), listLengthS(values));
5234 
5235  count = 0;
5236 
5237  smallt *e;
5238  forEachCS(keys, k) {
5239  e = (smallt *) allocSStringTiny(values[count]);
5240  if (!e) {
5241  return(NULL);
5242  }
5243  sDictSetTiny(&(self->d), k, e);
5244  count++;
5245  if (count == len) {
5246  break;
5247  }
5248  }
5249 
5250  //if keys->f->len(keys) != values->f->len(values)
5251  // return 0
5252  //else
5253  // return 1
5254  return(self);
5255 }
5256 
5257 internal smallDictt* zipArrayCArraySmallDict(smallDictt *self, char** keys, const char** values) {
5258  size_t len;
5259  size_t count;
5260 
5261  if (!keys || !values) {
5262  return(NULL);
5263  }
5264 
5265  if (!listLengthS(keys) || !listLengthCS(values)) {
5266  return(self);
5267  }
5268 
5269  len = MIN(listLengthS(keys), listLengthCS(values));
5270 
5271  count = 0;
5272 
5273  smallt *e;
5274  forEachS(keys, k) {
5275  e = (smallt *) allocSStringTiny(values[count]);
5276  if (!e) {
5277  return(NULL);
5278  }
5279  sDictSetTiny(&(self->d), k, e);
5280  count++;
5281  if (count == len) {
5282  break;
5283  }
5284  }
5285 
5286  //if keys->f->len(keys) != values->f->len(values)
5287  // return 0
5288  //else
5289  // return 1
5290  return(self);
5291 }
5292 
5293 internal smallDictt* zipCArrayCArraySmallDict(smallDictt *self, const char** keys, const char** values) {
5294  size_t len;
5295  size_t count;
5296 
5297  if (!keys || !values) {
5298  return(NULL);
5299  }
5300 
5301  if (!listLengthCS(keys) || !listLengthCS(values)) {
5302  return(self);
5303  }
5304 
5305  len = MIN(listLengthCS(keys), listLengthCS(values));
5306 
5307  count = 0;
5308 
5309  smallt *e;
5310  forEachCS(keys, k) {
5311  e = (smallt *) allocSStringTiny(values[count]);
5312  if (!e) {
5313  return(NULL);
5314  }
5315  sDictSetTiny(&(self->d), k, e);
5316  count++;
5317  if (count == len) {
5318  break;
5319  }
5320  }
5321 
5322  //if keys->f->len(keys) != values->f->len(values)
5323  // return 0
5324  //else
5325  // return 1
5326  return(self);
5327 }
5328 
5330  size_t len;
5331  size_t count;
5332 
5333  if (!keys || !values) {
5334  return(NULL);
5335  }
5336 
5337  if (checkObjectTypes && !isOSmallArray(keys)) {
5338  return(NULL);
5339  }
5340 
5341  if (!keys->f->len(keys) || !listLengthS(values)) {
5342  return(self);
5343  }
5344 
5345  len = MIN(keys->f->len(keys), listLengthS(values));
5346 
5347  count = 0;
5348 
5349  smallt *e;
5350  forEachSmallArray(keys, K) {
5351  if (!isOSmallString(K)) {
5352  finishO(K);
5353  return(NULL);
5354  }
5355  e = (smallt *) allocSStringTiny(values[count]);
5356  if (!e) {
5357  return(NULL);
5358  }
5359  sDictSetTiny(&(self->d), ssGet(K), e);
5360  finishO(K);
5361  count++;
5362  if (count == len) {
5363  break;
5364  }
5365  }
5366 
5367  //if keys->f->len(keys) != values->f->len(values)
5368  // return 0
5369  //else
5370  // return 1
5371  return(self);
5372 }
5373 
5375  size_t len;
5376  size_t count;
5377 
5378  if (!keys || !values) {
5379  return(NULL);
5380  }
5381 
5382  if (checkObjectTypes && !isOSmallArray(keys)) {
5383  return(NULL);
5384  }
5385 
5386  if (!keys->f->len(keys) || !listLengthCS(values)) {
5387  return(self);
5388  }
5389 
5390  len = MIN(keys->f->len(keys), listLengthCS(values));
5391 
5392  count = 0;
5393 
5394  smallt *e;
5395  forEachSmallArray(keys, K) {
5396  if (!isOSmallString(K)) {
5397  finishO(K);
5398  return(NULL);
5399  }
5400  e = (smallt *) allocSStringTiny(values[count]);
5401  if (!e) {
5402  return(NULL);
5403  }
5404  sDictSetTiny(&(self->d), ssGet(K), e);
5405  finishO(K);
5406  count++;
5407  if (count == len) {
5408  break;
5409  }
5410  }
5411 
5412  //if keys->f->len(keys) != values->f->len(values)
5413  // return 0
5414  //else
5415  // return 1
5416  return(self);
5417 }
5418 
5420 
5421  if (!items) {
5422  return(NULL);
5423  }
5424 
5425  if (checkObjectTypes && !isOSmallArray(items)) {
5426  return(NULL);
5427  }
5428 
5429  enumerateSmallArray(items, E, i) {
5430  if (!isOType(E, "smallArray")) {
5431  goto cont;
5432  }
5433  cast(smallArrayt*, a, E);
5434  if (lenO(a) != 2) {
5435  goto cont;
5436  }
5437  smallStringt *s = a->f->getAtSmallString(a, 0);
5438  if (!isOType(s, "smallString")) {
5439  finishO(s);
5440  goto cont;
5441  }
5442  setNFreeSmallDict(self, ssGet(s), a->f->get(a, 1));
5443  finishO(s);
5444  removeElemO(a, 1);
5445  delElemO(items, (int64_t)i);
5446  cont:
5447  finishO(E);
5448  }
5449  return(self);
5450 }
5451 
5453 
5454  if (!lenSmallDict(self)) {
5455  return(NULL);
5456  }
5457 
5459  if (!r) {
5460  return(NULL);
5461  }
5462 
5463  forEachSDict(self->d, e) {
5464  if (e->key) {
5466  if (!a) {
5467  terminateO(r);
5468  return(NULL);
5469  }
5470  a->f->pushS(a, e->key);
5471  pushNFreeO(a, toBaset(e->data));
5472  r->f->pushNFreeArray(r, a);
5473  }
5474  }
5475  return(r);
5476 }
5477 
5478 internal bool writeFileSmallDict(smallDictt *self, const char *filePath) {
5479 
5480  if (!filePath || isBlankS(filePath)) {
5481  return(false);
5482  }
5483  char *s = toStringSmallDict(self);
5484  bool r = writeFileS(filePath, s);
5485  free(s);
5486  return(r);
5487 }
5488 
5489 internal bool writeFileSmallJsonSmallDict(smallDictt *self, smallJsont *filePath) {
5490 
5491  if (!filePath) {
5492  return(false);
5493  }
5494 
5495  if (checkObjectTypes && !isOSmallJson(filePath)) {
5496  return(false);
5497  }
5498 
5499  const char *type = getTopTypeO(filePath);
5500 
5501  if (!eqS(type,"string")) {
5502  return(false);
5503  }
5504 
5505  return(writeFileSmallDict(self, getTopSO(filePath)));
5506 }
5507 
5508 internal bool writeFileSmallStringSmallDict(smallDictt *self, smallStringt *filePath) {
5509 
5510  if (!filePath) {
5511  return(false);
5512  }
5513 
5514  if (checkObjectTypes && !isOSmallString(filePath)) {
5515  return(false);
5516  }
5517 
5518  return(writeFileSmallDict(self, ssGet(filePath)));
5519 }
5520 
5521 internal bool writeStreamSmallDict(smallDictt *self, FILE *fp) {
5522 
5523  if (!fp) {
5524  return(false);
5525  }
5526  char *s = toStringSmallDict(self);
5527  bool r = writeStreamS(fp, s);
5528  free(s);
5529  return(r);
5530 }
5531 
5532 internal bool appendFileSmallDict(smallDictt *self, const char *filePath) {
5533 
5534  if (!filePath || isBlankS(filePath)) {
5535  return(false);
5536  }
5537  char *s = toStringSmallDict(self);
5538  bool r = appendFileS(filePath, s);
5539  free(s);
5540  return(r);
5541 }
5542 
5543 internal bool appendFileSmallStringSmallDict(smallDictt *self, smallStringt *filePath) {
5544 
5545  if (!filePath) {
5546  return(false);
5547  }
5548 
5549  if (checkObjectTypes && !isOSmallString(filePath)) {
5550  return(false);
5551  }
5552 
5553  return(appendFileSmallDict(self, ssGet(filePath)));
5554 }
5555 
5556 internal void logSmallDict(smallDictt *self) {
5557 
5558  if (!lenSmallDict(self)) {
5559  return;
5560  }
5561 
5562  forEachSDict(self->d, e) {
5563  if (e->key) {
5564  char *s = sToString(e->data);
5565  printf("%s: %s", e->key, s);
5566  printf("\n");
5567  free(s);
5568 }
5569  }
5570  }
5571 
5572 
5573 internal const char* typeStringSmallDict(smallDictt *self, const char *key) {
5574 
5575  if (!self->d) {
5576  return(NULL);
5577  }
5578 
5579  smallt *o = sDictGet(self->d, key);
5580 
5581  if (!o) {
5582  return(NULL);
5583  }
5584 
5585  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5586  return(NULL);
5587  }
5588  return(SMALL_TYPE_NAMES[(size_t)o->type]);
5589 }
5590 
5591 internal smallStringt* typeSmallStringSmallDict(smallDictt *self, const char *key) {
5592 
5593  const char *r = typeStringSmallDict(self, key);
5594  if (!r) {
5595  return(NULL);
5596  }
5597  return(allocSmallString(r));
5598 }
5599 
5600 internal const char* typeStringKCharSmallDict(smallDictt *self, char key) {
5601 
5602  charToS(s, key);
5603  return(typeStringSmallDict(self, s));
5604 }
5605 
5607 
5608  charToS(s, key);
5609  return(typeSmallStringSmallDict(self, s));
5610 }
5611 
5612 
5613 internal char typeSmallDict(smallDictt *self, const char *key) {
5614 
5615  if (!self->d) {
5616  return(0);
5617  }
5618 
5619  smallt *o = sDictGet(self->d, key);
5620 
5621  if (!o) {
5622  return(0);
5623  }
5624 
5625  return(o->type);
5626 }
5627 
5628 internal char typeKCharSmallDict(smallDictt *self, char key) {
5629 
5630  charToS(s, key);
5631  return(typeSmallDict(self, s));
5632 }
5633 
5634 
5636 
5637  if (!self->d) {
5638  return(NULL);
5639  }
5640 
5642  if (!r) {
5643  return(NULL);
5644  }
5645 
5646  forEachSDict(self->d, e) {
5647  if (e->key) {
5648  if ((size_t)e->data->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5649  terminateO(r);
5650  return(NULL);
5651  }
5652  smallt *s = (smallt *)allocSStringTiny(SMALL_TYPE_NAMES[(size_t)e->data->type]);
5653  if (!s) {
5654  terminateO(r);
5655  return(NULL);
5656  }
5657  sDictPushTiny(&(r->d), e->key, s);
5658  }
5659  }
5660 
5661  return(r);
5662 }
5663 
5664 
5665 internal bool isETypeSmallDict(smallDictt *self, const char *key, const char *type) {
5666 
5667  if (!self->d or !type) {
5668  return(false);
5669  }
5670 
5671  smallt *o = sDictGet(self->d, key);
5672 
5673  if (!o) {
5674  return(false);
5675  }
5676 
5677  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5678  return(false);
5679  }
5680  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], type));
5681 }
5682 
5683 
5684 internal bool isEUndefinedSmallDict(smallDictt *self, const char *key) {
5685 
5686  if (!self->d) {
5687  return(false);
5688  }
5689 
5690  smallt *o = sDictGet(self->d, key);
5691 
5692  if (!o) {
5693  return(false);
5694  }
5695 
5696  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5697  return(false);
5698  }
5699  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], "undefined"));
5700 }
5701 
5702 
5703 internal bool isEBoolSmallDict(smallDictt *self, const char *key) {
5704 
5705  if (!self->d) {
5706  return(false);
5707  }
5708 
5709  smallt *o = sDictGet(self->d, key);
5710 
5711  if (!o) {
5712  return(false);
5713  }
5714 
5715  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5716  return(false);
5717  }
5718  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], "bool"));
5719 }
5720 
5721 
5722 internal bool isEContainerSmallDict(smallDictt *self, const char *key) {
5723 
5724  if (!self->d) {
5725  return(false);
5726  }
5727 
5728  smallt *o = sDictGet(self->d, key);
5729 
5730  if (!o) {
5731  return(false);
5732  }
5733 
5734  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5735  return(false);
5736  }
5737  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], "container"));
5738 }
5739 
5740 
5741 internal bool isEDictSmallDict(smallDictt *self, const char *key) {
5742 
5743  if (!self->d) {
5744  return(false);
5745  }
5746 
5747  smallt *o = sDictGet(self->d, key);
5748 
5749  if (!o) {
5750  return(false);
5751  }
5752 
5753  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5754  return(false);
5755  }
5756  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], "dict"));
5757 }
5758 
5759 
5760 internal bool isEDoubleSmallDict(smallDictt *self, const char *key) {
5761 
5762  if (!self->d) {
5763  return(false);
5764  }
5765 
5766  smallt *o = sDictGet(self->d, key);
5767 
5768  if (!o) {
5769  return(false);
5770  }
5771 
5772  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5773  return(false);
5774  }
5775  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], "double"));
5776 }
5777 
5778 
5779 internal bool isEIntSmallDict(smallDictt *self, const char *key) {
5780 
5781  if (!self->d) {
5782  return(false);
5783  }
5784 
5785  smallt *o = sDictGet(self->d, key);
5786 
5787  if (!o) {
5788  return(false);
5789  }
5790 
5791  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5792  return(false);
5793  }
5794  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], "int"));
5795 }
5796 
5797 
5798 internal bool isEStringSmallDict(smallDictt *self, const char *key) {
5799 
5800  if (!self->d) {
5801  return(false);
5802  }
5803 
5804  smallt *o = sDictGet(self->d, key);
5805 
5806  if (!o) {
5807  return(false);
5808  }
5809 
5810  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5811  return(false);
5812  }
5813  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], "string"));
5814 }
5815 
5816 
5817 internal bool isEFaststringSmallDict(smallDictt *self, const char *key) {
5818 
5819  if (!self->d) {
5820  return(false);
5821  }
5822 
5823  smallt *o = sDictGet(self->d, key);
5824 
5825  if (!o) {
5826  return(false);
5827  }
5828 
5829  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5830  return(false);
5831  }
5832  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], "faststring"));
5833 }
5834 
5835 
5836 internal bool isEArraySmallDict(smallDictt *self, const char *key) {
5837 
5838  if (!self->d) {
5839  return(false);
5840  }
5841 
5842  smallt *o = sDictGet(self->d, key);
5843 
5844  if (!o) {
5845  return(false);
5846  }
5847 
5848  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5849  return(false);
5850  }
5851  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], "array"));
5852 }
5853 
5854 
5855 internal bool isEBytesSmallDict(smallDictt *self, const char *key) {
5856 
5857  if (!self->d) {
5858  return(false);
5859  }
5860 
5861  smallt *o = sDictGet(self->d, key);
5862 
5863  if (!o) {
5864  return(false);
5865  }
5866 
5867  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5868  return(false);
5869  }
5870  return(eqS(SMALL_TYPE_NAMES[(size_t)o->type], "bytes"));
5871 }
5872 
5873 internal bool areAllETypeSmallDict(smallDictt *self, const char *type) {
5874 
5875  if (!self->d or !type) {
5876  return(false);
5877  }
5878 
5879  size_t len = lenSmallDict(self);
5880 
5881  if (!len) {
5882  return(false);
5883  }
5884 
5885  bool r = true;
5886  forEachSDict(self->d, e) {
5887  if (e->key) {
5888  smallt *o = sDictGetTiny(self->d, e->key);
5889 
5890  if (!o) {
5891  r = false;
5892  break;
5893  }
5894  if ((size_t)o->type >= ARRAY_SIZE(SMALL_TYPE_NAMES)) {
5895  r = false;
5896  break;
5897  }
5898  if (!eqS(SMALL_TYPE_NAMES[(size_t)o->type], type)) {
5899  r = false;
5900  break;
5901  }
5902  }
5903  }
5904 
5905  return(r);
5906 }
5907 
5908 
5910 
5911  return(areAllETypeSmallDict(self, "undefined"));
5912 }
5913 
5914 
5915 internal bool areAllEBoolSmallDict(smallDictt *self) {
5916 
5917  return(areAllETypeSmallDict(self, "bool"));
5918 }
5919 
5920 
5922 
5923  return(areAllETypeSmallDict(self, "container"));
5924 }
5925 
5926 
5927 internal bool areAllEDictSmallDict(smallDictt *self) {
5928 
5929  return(areAllETypeSmallDict(self, "dict"));
5930 }
5931 
5932 
5933 internal bool areAllEDoubleSmallDict(smallDictt *self) {
5934 
5935  return(areAllETypeSmallDict(self, "double"));
5936 }
5937 
5938 
5939 internal bool areAllEIntSmallDict(smallDictt *self) {
5940 
5941  return(areAllETypeSmallDict(self, "int"));
5942 }
5943 
5944 
5945 internal bool areAllEStringSmallDict(smallDictt *self) {
5946 
5947  return(areAllETypeSmallDict(self, "string"));
5948 }
5949 
5950 
5952 
5953  return(areAllETypeSmallDict(self, "faststring"));
5954 }
5955 
5956 
5957 internal bool areAllEArraySmallDict(smallDictt *self) {
5958 
5959  return(areAllETypeSmallDict(self, "array"));
5960 }
5961 
5962 
5963 internal bool areAllEBytesSmallDict(smallDictt *self) {
5964 
5965  return(areAllETypeSmallDict(self, "bytes"));
5966 }
5967 
5968 
5970 
5971  return(allocSmallDict());
5972 }
5973 
5975 
5976  return(self->f->duplicate(self));
5977 }
5978 
5979 void freeSmallDictG (smallDictt *self) {self->f->free(self);}
5980 
5981 smallDictt* setSmallDictG (smallDictt *self, const char *key, baset *value) {
5982 
5983  return(self->f->set(self, key, value));
5984 }
5985 
5986 
5987 baset* getSmallDictG (smallDictt *self, baset* retType UNUSED, const char *key) {
5988 
5989  return(self->f->get(self,key));
5990 }
5991 
5992 undefinedt* getUndefinedSmallDictG (smallDictt *self, undefinedt* retType UNUSED, const char *key) {
5993 
5994  return(self->f->getUndefined(self,key));
5995 }
5996 
5997 bool getBoolSmallDictG (smallDictt *self, bool retType UNUSED, const char *key) {
5998 
5999  return(self->f->getBool(self,key));
6000 }
6001 
6002 bool* getBoolPSmallDictG (smallDictt *self, bool* retType UNUSED, const char *key) {
6003 
6004  return(self->f->getBoolP(self,key));
6005 }
6006 
6007 double getDoubleSmallDictG (smallDictt *self, double retType UNUSED, const char *key) {
6008 
6009  return(self->f->getDouble(self,key));
6010 }
6011 
6012 double* getDoublePSmallDictG (smallDictt *self, double* retType UNUSED, const char *key) {
6013 
6014  return(self->f->getDoubleP(self,key));
6015 }
6016 
6017 int64_t getIntSmallDictG (smallDictt *self, int64_t retType UNUSED, const char *key) {
6018 
6019  return(self->f->getInt(self,key));
6020 }
6021 
6022 int64_t* getIntPSmallDictG (smallDictt *self, int64_t* retType UNUSED, const char *key) {
6023 
6024  return(self->f->getIntP(self,key));
6025 }
6026 
6027 int32_t getInt32SmallDictG (smallDictt *self, int32_t retType UNUSED, const char *key) {
6028 
6029  return(self->f->getInt32(self,key));
6030 }
6031 
6032 int32_t* getInt32PSmallDictG (smallDictt *self, int32_t* retType UNUSED, const char *key) {
6033 
6034  return(self->f->getInt32P(self,key));
6035 }
6036 
6037 uint64_t getUintSmallDictG (smallDictt *self, uint64_t retType UNUSED, const char *key) {
6038 
6039  return(self->f->getUint(self,key));
6040 }
6041 
6042 uint64_t* getUintPSmallDictG (smallDictt *self, uint64_t* retType UNUSED, const char *key) {
6043 
6044  return(self->f->getUintP(self,key));
6045 }
6046 
6047 uint32_t getUint32SmallDictG (smallDictt *self, uint32_t retType UNUSED, const char *key) {
6048 
6049  return(self->f->getUint32(self,key));
6050 }
6051 
6052 uint32_t* getUint32PSmallDictG (smallDictt *self, uint32_t* retType UNUSED, const char *key) {
6053 
6054  return(self->f->getUint32P(self,key));
6055 }
6056 
6057 char* getSSmallDictG (smallDictt *self, char* retType UNUSED, const char *key) {
6058 
6059  return(self->f->getS(self,key));
6060 }
6061 
6062 smallDictt* getDictSmallDictG (smallDictt *self, smallDictt* retType UNUSED, const char *key) {
6063 
6064  return(self->f->getDict(self,key));
6065 }
6066 
6067 smallArrayt* getArraySmallDictG (smallDictt *self, smallArrayt* retType UNUSED, const char *key) {
6068 
6069  return(self->f->getArray(self,key));
6070 }
6071 
6072 smallBoolt* getSmallBoolSmallDictG (smallDictt *self, smallBoolt* retType UNUSED, const char *key) {
6073 
6074  return(self->f->getSmallBool(self,key));
6075 }
6076 
6077 smallBytest* getSmallBytesSmallDictG (smallDictt *self, smallBytest* retType UNUSED, const char *key) {
6078 
6079  return(self->f->getSmallBytes(self,key));
6080 }
6081 
6083 
6084  return(self->f->getSmallDouble(self,key));
6085 }
6086 
6087 smallIntt* getSmallIntSmallDictG (smallDictt *self, smallIntt* retType UNUSED, const char *key) {
6088 
6089  return(self->f->getSmallInt(self,key));
6090 }
6091 
6092 smallJsont* getSmallJsonSmallDictG(smallDictt *self, smallJsont* retType UNUSED, const char *key) {
6093 
6094  return(self->f->getSmallJson(self,key));
6095 }
6096 
6098 
6099  return(self->f->getSmallString(self,key));
6100 }
6101 
6102 void* getVoidSmallDictG (smallDictt *self, void* retType UNUSED, const char *key) {
6103 
6104  return(self->f->getVoid(self,key));
6105 }
6106 
6108 
6109  return(self->f->getSmallContainer(self,key));
6110 }
6111 
6112 baset* getKCharSmallDictG (smallDictt *self, baset* retType UNUSED, char key) {
6113 
6114  return(self->f->getKChar(self, key));
6115 }
6116 
6118 
6119  return(self->f->getUndefinedKChar(self, key));
6120 }
6121 
6122 bool getBoolKCharSmallDictG (smallDictt *self, bool retType UNUSED, char key) {
6123 
6124  return(self->f->getBoolKChar(self, key));
6125 }
6126 
6127 bool* getBoolPKCharSmallDictG (smallDictt *self, bool* retType UNUSED, char key) {
6128 
6129  return(self->f->getBoolPKChar(self, key));
6130 }
6131 
6132 double getDoubleKCharSmallDictG (smallDictt *self, double retType UNUSED, char key) {
6133 
6134  return(self->f->getDoubleKChar(self, key));
6135 }
6136 
6137 double* getDoublePKCharSmallDictG (smallDictt *self, double* retType UNUSED, char key) {
6138 
6139  return(self->f->getDoublePKChar(self, key));
6140 }
6141 
6142 int64_t getIntKCharSmallDictG (smallDictt *self, int64_t retType UNUSED, char key) {
6143 
6144  return(self->f->getIntKChar(self, key));
6145 }
6146 
6147 int64_t* getIntPKCharSmallDictG (smallDictt *self, int64_t* retType UNUSED, char key) {
6148 
6149  return(self->f->getIntPKChar(self, key));
6150 }
6151 
6152 int32_t getInt32KCharSmallDictG (smallDictt *self, int32_t retType UNUSED, char key) {
6153 
6154  return(self->f->getInt32KChar(self, key));
6155 }
6156 
6157 int32_t* getInt32PKCharSmallDictG (smallDictt *self, int32_t* retType UNUSED, char key) {
6158 
6159  return(self->f->getInt32PKChar(self, key));
6160 }
6161 
6162 uint64_t getUintKCharSmallDictG (smallDictt *self, uint64_t retType UNUSED, char key) {
6163 
6164  return(self->f->getUintKChar(self, key));
6165 }
6166 
6167 uint64_t* getUintPKCharSmallDictG (smallDictt *self, uint64_t* retType UNUSED, char key) {
6168 
6169  return(self->f->getUintPKChar(self, key));
6170 }
6171 
6172 uint32_t getUint32KCharSmallDictG (smallDictt *self, uint32_t retType UNUSED, char key) {
6173 
6174  return(self->f->getUint32KChar(self, key));
6175 }
6176 
6177 uint32_t* getUint32PKCharSmallDictG (smallDictt *self, uint32_t* retType UNUSED, char key) {
6178 
6179  return(self->f->getUint32PKChar(self, key));
6180 }
6181 
6182 char* getSKCharSmallDictG (smallDictt *self, char* retType UNUSED, char key) {
6183 
6184  return(self->f->getSKChar(self, key));
6185 }
6186 
6188 
6189  return(self->f->getDictKChar(self, key));
6190 }
6191 
6193 
6194  return(self->f->getArrayKChar(self, key));
6195 }
6196 
6198 
6199  return(self->f->getSmallBoolKChar(self, key));
6200 }
6201 
6203 
6204  return(self->f->getSmallBytesKChar(self, key));
6205 }
6206 
6208 
6209  return(self->f->getSmallDoubleKChar(self, key));
6210 }
6211 
6213 
6214  return(self->f->getSmallIntKChar(self, key));
6215 }
6216 
6218 
6219  return(self->f->getSmallJsonKChar(self, key));
6220 }
6221 
6223 
6224  return(self->f->getSmallStringKChar(self, key));
6225 }
6226 
6227 void* getVoidKCharSmallDictG (smallDictt *self, void* retType UNUSED, char key) {
6228 
6229  return(self->f->getVoidKChar(self, key));
6230 }
6231 
6233 
6234  return(self->f->getSmallContainerKChar(self, key));
6235 }
6236 
6237 
6238 baset* getNDupSmallDictG (smallDictt *self, baset* retType UNUSED, const char *key) {
6239 
6240  return(self->f->getNDup(self,key));
6241 }
6242 
6244 
6245  return(self->f->getNDupUndefined(self,key));
6246 }
6247 
6248 bool getNDupBoolSmallDictG (smallDictt *self, bool retType UNUSED, const char *key) {
6249 
6250  return(self->f->getNDupBool(self,key));
6251 }
6252 
6253 double getNDupDoubleSmallDictG (smallDictt *self, double retType UNUSED, const char *key) {
6254 
6255  return(self->f->getNDupDouble(self,key));
6256 }
6257 
6258 int64_t getNDupIntSmallDictG (smallDictt *self, int64_t retType UNUSED, const char *key) {
6259 
6260  return(self->f->getNDupInt(self,key));
6261 }
6262 
6263 int32_t getNDupInt32SmallDictG (smallDictt *self, int32_t retType UNUSED, const char *key) {
6264 
6265  return(self->f->getNDupInt32(self,key));
6266 }
6267 
6268 uint64_t getNDupUintSmallDictG (smallDictt *self, uint64_t retType UNUSED, const char *key) {
6269 
6270  return(self->f->getNDupUint(self,key));
6271 }
6272 
6273 uint32_t getNDupUint32SmallDictG (smallDictt *self, uint32_t retType UNUSED, const char *key) {
6274 
6275  return(self->f->getNDupUint32(self,key));
6276 }
6277 
6278 char* getNDupSSmallDictG (smallDictt *self, char* retType UNUSED, const char *key) {
6279 
6280  return(self->f->getNDupS(self,key));
6281 }
6282 
6283 smallDictt* getNDupDictSmallDictG (smallDictt *self, smallDictt* retType UNUSED, const char *key) {
6284 
6285  return(self->f->getNDupDict(self,key));
6286 }
6287 
6288 smallArrayt* getNDupArraySmallDictG (smallDictt *self, smallArrayt* retType UNUSED, const char *key) {
6289 
6290  return(self->f->getNDupArray(self,key));
6291 }
6292 
6294 
6295  return(self->f->getNDupSmallBool(self,key));
6296 }
6297 
6299 
6300  return(self->f->getNDupSmallBytes(self,key));
6301 }
6302 
6304 
6305  return(self->f->getNDupSmallDouble(self,key));
6306 }
6307 
6308 smallIntt* getNDupSmallIntSmallDictG (smallDictt *self, smallIntt* retType UNUSED, const char *key) {
6309 
6310  return(self->f->getNDupSmallInt(self,key));
6311 }
6312 
6314 
6315  return(self->f->getNDupSmallJson(self,key));
6316 }
6317 
6319 
6320  return(self->f->getNDupSmallString(self,key));
6321 }
6322 
6323 void* getNDupVoidSmallDictG (smallDictt *self, void* retType UNUSED, const char *key) {
6324 
6325  return(self->f->getNDupVoid(self,key));
6326 }
6327 
6329 
6330  return(self->f->getNDupSmallContainer(self,key));
6331 }
6332 
6333 baset* getNDupKCharSmallDictG (smallDictt *self, baset* retType UNUSED, char key) {
6334 
6335  return(self->f->getNDupKChar(self, key));
6336 }
6337 
6339 
6340  return(self->f->getNDupUndefinedKChar(self, key));
6341 }
6342 
6343 bool getNDupBoolKCharSmallDictG (smallDictt *self, bool retType UNUSED, char key) {
6344 
6345  return(self->f->getNDupBoolKChar(self, key));
6346 }
6347 
6348 double getNDupDoubleKCharSmallDictG (smallDictt *self, double retType UNUSED, char key) {
6349 
6350  return(self->f->getNDupDoubleKChar(self, key));
6351 }
6352 
6353 int64_t getNDupIntKCharSmallDictG (smallDictt *self, int64_t retType UNUSED, char key) {
6354 
6355  return(self->f->getNDupIntKChar(self, key));
6356 }
6357 
6358 int32_t getNDupInt32KCharSmallDictG (smallDictt *self, int32_t retType UNUSED, char key) {
6359 
6360  return(self->f->getNDupInt32KChar(self, key));
6361 }
6362 
6363 uint64_t getNDupUintKCharSmallDictG (smallDictt *self, uint64_t retType UNUSED, char key) {
6364 
6365  return(self->f->getNDupUintKChar(self, key));
6366 }
6367 
6368 uint32_t getNDupUint32KCharSmallDictG (smallDictt *self, uint32_t retType UNUSED, char key) {
6369 
6370  return(self->f->getNDupUint32KChar(self, key));
6371 }
6372 
6373 char* getNDupSKCharSmallDictG (smallDictt *self, char* retType UNUSED, char key) {
6374 
6375  return(self->f->getNDupSKChar(self, key));
6376 }
6377 
6379 
6380  return(self->f->getNDupDictKChar(self, key));
6381 }
6382 
6384 
6385  return(self->f->getNDupArrayKChar(self, key));
6386 }
6387 
6389 
6390  return(self->f->getNDupSmallBoolKChar(self, key));
6391 }
6392 
6394 
6395  return(self->f->getNDupSmallBytesKChar(self, key));
6396 }
6397 
6399 
6400  return(self->f->getNDupSmallDoubleKChar(self, key));
6401 }
6402 
6404 
6405  return(self->f->getNDupSmallIntKChar(self, key));
6406 }
6407 
6409 
6410  return(self->f->getNDupSmallJsonKChar(self, key));
6411 }
6412 
6414 
6415  return(self->f->getNDupSmallStringKChar(self, key));
6416 }
6417 
6418 void* getNDupVoidKCharSmallDictG (smallDictt *self, void* retType UNUSED, char key) {
6419 
6420  return(self->f->getNDupVoidKChar(self, key));
6421 }
6422 
6424 
6425  return(self->f->getNDupSmallContainerKChar(self, key));
6426 }
6427 
6428 
6429 smallDictt* setUndefinedSmallDictG(smallDictt *self, const char *key, void *value UNUSED) {
6430 
6431  return(self->f->setUndefined(self,key));
6432 }
6433 
6434 smallDictt* setBoolSmallDictG (smallDictt *self, const char *key, bool value) {
6435 
6436  return(self->f->setBool(self,key,value));
6437 }
6438 
6439 smallDictt* setDoubleSmallDictG (smallDictt *self, const char *key, double value) {
6440 
6441  return(self->f->setDouble(self,key,value));
6442 }
6443 
6444 smallDictt* setIntSmallDictG (smallDictt *self, const char *key, int64_t value) {
6445 
6446  return(self->f->setInt(self,key,value));
6447 }
6448 
6449 smallDictt* setSSmallDictG (smallDictt *self, const char *key, const char *string) {
6450 
6451  return(self->f->setS(self,key,string));
6452 }
6453 
6454 smallDictt* setCharSmallDictG (smallDictt *self, const char *key, char c) {
6455 
6456  return(self->f->setChar(self,key,c));
6457 }
6458 
6459 smallDictt* setDictSmallDictG (smallDictt *self, const char *key, smallDictt *dict) {
6460 
6461  return(self->f->setDict(self,key,dict));
6462 }
6463 
6465 
6466  return(self->f->setArray(self,key,array));
6467 }
6468 
6469 smallDictt* setArraycSmallDictG (smallDictt *self, const char *key, char **array) {
6470 
6471  return(self->f->setArrayc(self,key,array));
6472 }
6473 
6474 smallDictt* setCArraycSmallDictG (smallDictt *self, const char *key, const char **array) {
6475 
6476  return(self->f->setCArrayc(self,key,array));
6477 }
6478 
6479 smallDictt* setVoidSmallDictG (smallDictt *self, const char *key, void *value) {
6480  smallDictt *r = NULL;
6481 
6482  if (key && value) {
6484  if (!c) {
6485  return(NULL);
6486  }
6487  r = self->f->setNFreeSmallContainer(self, key, c);;
6488  return(r);
6489  }
6490  r = self->f->setUndefined(self,key);;
6491  return(r);
6492 }
6493 
6495 
6496  return(self->f->setSmallBool(self,key,value));
6497 }
6498 
6500 
6501  return(self->f->setSmallBytes(self,key,value));
6502 }
6503 
6505 
6506  return(self->f->setSmallDouble(self,key,value));
6507 }
6508 
6510 
6511  return(self->f->setSmallInt(self,key,value));
6512 }
6513 
6515 
6516  return(self->f->setSmallJson(self,key,value));
6517 }
6518 
6519 smallDictt* setSmallStringSmallDictG (smallDictt *self, const char *key, smallStringt *string) {
6520 
6521  return(self->f->setSmallString(self,key,string));
6522 }
6523 
6525 
6526  return(self->f->setSmallContainer(self,key,container));
6527 }
6528 
6530 
6531  return(self->f->setKChar(self, key, value));
6532 }
6533 
6535 
6536  return(self->f->setUndefinedKChar(self, key));
6537 }
6538 
6540 
6541  return(self->f->setBoolKChar(self, key, value));
6542 }
6543 
6545 
6546  return(self->f->setDoubleKChar(self, key, value));
6547 }
6548 
6549 smallDictt* setIntKCharSmallDictG (smallDictt *self, char key, int64_t value) {
6550 
6551  return(self->f->setIntKChar(self, key, value));
6552 }
6553 
6554 smallDictt* setSKCharSmallDictG (smallDictt *self, char key, const char *string) {
6555 
6556  return(self->f->setSKChar(self, key, string));
6557 }
6558 
6559 smallDictt* setCharKCharSmallDictG (smallDictt *self, char key, char c) {
6560 
6561  return(self->f->setCharKChar(self, key, c));
6562 }
6563 
6565 
6566  return(self->f->setDictKChar(self, key, dict));
6567 }
6568 
6570 
6571  return(self->f->setArrayKChar(self, key, array));
6572 }
6573 
6575 
6576  return(self->f->setArraycKChar(self, key, array));
6577 }
6578 
6579 smallDictt* setCArraycKCharSmallDictG (smallDictt *self, char key, const char **array) {
6580 
6581  return(self->f->setCArraycKChar(self, key, array));
6582 }
6583 
6585 
6586  charToS(s, key);
6587  return(setVoidSmallDictG(self, s, value));
6588 }
6589 
6591 
6592  return(self->f->setSmallBoolKChar(self, key, value));
6593 }
6594 
6596 
6597  return(self->f->setSmallBytesKChar(self, key, value));
6598 }
6599 
6601 
6602  return(self->f->setSmallDoubleKChar(self, key, value));
6603 }
6604 
6606 
6607  return(self->f->setSmallIntKChar(self, key, value));
6608 }
6609 
6611 
6612  return(self->f->setSmallJsonKChar(self, key, value));
6613 }
6614 
6616 
6617  return(self->f->setSmallStringKChar(self, key, string));
6618 }
6619 
6621 
6622  return(self->f->setSmallContainerKChar(self, key, container));
6623 }
6624 
6625 smallDictt* setNFreeSmallDictG (smallDictt *self, const char *key, baset *value) {
6626 
6627  return(self->f->setNFree(self,key,value));
6628 }
6629 
6631 
6632  return(self->f->setNFreeUndefined(self,key,value));
6633 }
6634 
6635 smallDictt* setNFreeSSmallDictG (smallDictt *self, const char *key, char *string) {
6636 
6637  return(self->f->setNFreeS(self,key,string));
6638 }
6639 
6640 smallDictt* setNFreeDictSmallDictG (smallDictt *self, const char *key, smallDictt *dict) {
6641 
6642  return(self->f->setNFreeDict(self,key,dict));
6643 }
6644 
6646 
6647  return(self->f->setNFreeArray(self,key,array));
6648 }
6649 
6650 smallDictt* setNFreeArraycSmallDictG (smallDictt *self, const char *key, char **array) {
6651 
6652  return(self->f->setNFreeArrayc(self,key,array));
6653 }
6654 
6656 
6657  return(self->f->setNFreeSmallBool(self,key,value));
6658 }
6659 
6661 
6662  return(self->f->setNFreeSmallBytes(self,key,value));
6663 }
6664 
6666 
6667  return(self->f->setNFreeSmallDouble(self,key,value));
6668 }
6669 
6671 
6672  return(self->f->setNFreeSmallInt(self,key,value));
6673 }
6674 
6676 
6677  return(self->f->setNFreeSmallJson(self,key,value));
6678 }
6679 
6681 
6682  return(self->f->setNFreeSmallString(self,key,string));
6683 }
6684 
6686 
6687  return(self->f->setNFreeSmallContainer(self,key,container));
6688 }
6689 
6691 
6692  return(self->f->setNFreeKChar(self, key, value));
6693 }
6694 
6696 
6697  return(self->f->setNFreeUndefinedKChar(self, key, u));
6698 }
6699 
6700 smallDictt* setNFreeSKCharSmallDictG (smallDictt *self, char key, char *string) {
6701 
6702  return(self->f->setNFreeSKChar(self, key, string));
6703 }
6704 
6706 
6707  return(self->f->setNFreeDictKChar(self, key, dict));
6708 }
6709 
6711 
6712  return(self->f->setNFreeArrayKChar(self, key, array));
6713 }
6714 
6716 
6717  return(self->f->setNFreeArraycKChar(self, key, array));
6718 }
6719 
6721 
6722  return(self->f->setNFreeSmallBoolKChar(self, key, value));
6723 }
6724 
6726 
6727  return(self->f->setNFreeSmallBytesKChar(self, key, value));
6728 }
6729 
6731 
6732  return(self->f->setNFreeSmallDoubleKChar(self, key, value));
6733 }
6734 
6736 
6737  return(self->f->setNFreeSmallIntKChar(self, key, value));
6738 }
6739 
6741 
6742  return(self->f->setNFreeSmallJsonKChar(self, key, value));
6743 }
6744 
6746 
6747  return(self->f->setNFreeSmallStringKChar(self, key, string));
6748 }
6749 
6751 
6752  return(self->f->setNFreeSmallContainerKChar(self, key, container));
6753 }
6754 
6755 
6756 smallDictt* setPDictSmallDictG (smallDictt *self, const char *key, smallDictt *dict) {
6757 
6758  return(self->f->setPDict(self,key,dict));
6759 }
6760 
6762 
6763  return(self->f->setPArray(self,key,array));
6764 }
6765 
6767 
6768  return(self->f->setPSmallJson(self,key,json));
6769 }
6770 
6772 
6773  return(self->f->setPSmallString(self,key,string));
6774 }
6775 
6776 smallDictt* setNFreePDictSmallDictG (smallDictt *self, const char *key, smallDictt *dict) {
6777 
6778  return(self->f->setNFreePDict(self,key,dict));
6779 }
6780 
6782 
6783  return(self->f->setNFreePArray(self,key,array));
6784 }
6785 
6787 
6788  return(self->f->setNFreePSmallJson(self,key,json));
6789 }
6790 
6792 
6793  return(self->f->setNFreePSmallString(self,key,string));
6794 }
6795 
6797 
6798  return(self->f->setPArrayKChar(self, key, array));
6799 }
6800 
6802 
6803  return(self->f->setPDictKChar(self, key, dict));
6804 }
6805 
6807 
6808  return(self->f->setPSmallJsonKChar(self, key, json));
6809 }
6810 
6812 
6813  return(self->f->setPSmallStringKChar(self, key, string));
6814 }
6815 
6817 
6818  return(self->f->setNFreePArrayKChar(self, key, array));
6819 }
6820 
6822 
6823  return(self->f->setNFreePDictKChar(self, key, dict));
6824 }
6825 
6827 
6828  return(self->f->setNFreePSmallJsonKChar(self, key, json));
6829 }
6830 
6832 
6833  return(self->f->setNFreePSmallStringKChar(self, key, string));
6834 }
6835 
6836 
6838 
6839  return(self->f->merge(self,smallDict));
6840 }
6841 
6843 
6844  return(self->f->mergeSmallJson(self,json));
6845 }
6846 
6848 
6849  return(self->f->mergeNSmash(self,smallDict));
6850 }
6851 
6853 
6854  return(self->f->mergeNSmashSmallJson(self,json));
6855 }
6856 
6858 
6859  return(self->f->equalBase(self, p2));
6860 }
6861 
6863 
6864  return(self->f->equalSmallJson(self, p2));
6865 }
6866 
6868 
6869  return(self->f->equal(self, p2));
6870 }
6871 
6873 
6874  return(self->f->icEqualBase(self, p2));
6875 }
6876 
6878 
6879  return(self->f->icEqualSmallJson(self, p2));
6880 }
6881 
6883 
6884  return(self->f->icEqual(self, p2));
6885 }
6886 
6887 double getNumSmallDictG(smallDictt *self, const char *key) {
6888 
6889  return(self->f->getNum(self, key));
6890 }
6891 
6892 baset* cropElemSmallDictG (smallDictt *self, const char* key) {
6893 
6894  return(self->f->cropElem(self, key));
6895 }
6896 
6898 
6899  return(self->f->cropElemUndefined(self, key));
6900 }
6901 
6902 bool cropElemBoolSmallDictG (smallDictt *self, const char* key) {
6903 
6904  return(self->f->cropElemBool(self, key));
6905 }
6906 
6907 double cropElemDoubleSmallDictG (smallDictt *self, const char* key) {
6908 
6909  return(self->f->cropElemDouble(self, key));
6910 }
6911 
6912 int64_t cropElemIntSmallDictG (smallDictt *self, const char* key) {
6913 
6914  return(self->f->cropElemInt(self, key));
6915 }
6916 
6917 int32_t cropElemInt32SmallDictG (smallDictt *self, const char* key) {
6918 
6919  return(self->f->cropElemInt32(self, key));
6920 }
6921 
6922 uint64_t cropElemUintSmallDictG (smallDictt *self, const char* key) {
6923 
6924  return(self->f->cropElemUint(self, key));
6925 }
6926 
6927 uint32_t cropElemUint32SmallDictG (smallDictt *self, const char* key) {
6928 
6929  return(self->f->cropElemUint32(self, key));
6930 }
6931 
6932 char* cropElemSSmallDictG (smallDictt *self, const char* key) {
6933 
6934  return(self->f->cropElemS(self, key));
6935 }
6936 
6937 smallDictt* cropElemDictSmallDictG (smallDictt *self, const char* key) {
6938 
6939  return(self->f->cropElemDict(self, key));
6940 }
6941 
6943 
6944  return(self->f->cropElemArray(self, key));
6945 }
6946 
6948 
6949  return(self->f->cropElemSmallBool(self, key));
6950 }
6951 
6953 
6954  return(self->f->cropElemSmallBytes(self, key));
6955 }
6956 
6958 
6959  return(self->f->cropElemSmallDouble(self, key));
6960 }
6961 
6963 
6964  return(self->f->cropElemSmallInt(self, key));
6965 }
6966 
6968 
6969  return(self->f->cropElemSmallJson(self, key));
6970 }
6971 
6973 
6974  return(self->f->cropElemSmallString(self, key));
6975 }
6976 
6977 void* cropElemVoidSmallDictG (smallDictt *self, const char* key) {
6978 
6979  return(self->f->cropElemVoid(self, key));
6980 }
6981 
6983 
6984  return(self->f->cropElemSmallContainer(self, key));
6985 }
6986 
6987 smallDictt* delSmallDictG (smallDictt *self, const char *key, int unused UNUSED) {
6988 
6989  return(self->f->del(self,key));
6990 }
6991 
6992 smallDictt* delKCharSmallDictG (smallDictt *self, char key, int unused UNUSED) {
6993 
6994  return(self->f->delKChar(self, key));
6995 }
6996 
6997 smallDictt* delElemSmallDictG (smallDictt *self, const char *key) {
6998 
6999  return(self->f->del(self,key));
7000 }
7001 
7003 
7004  return(self->f->delKChar(self, key));
7005 }
7006 
7007 smallDictt* removeSmallDictG (smallDictt *self, const char *key, int unused UNUSED) {
7008 
7009  return(self->f->remove(self,key));
7010 }
7011 
7012 smallDictt* removeKCharSmallDictG (smallDictt *self, char key, int unused UNUSED) {
7013 
7014  return(self->f->removeKChar(self, key));
7015 }
7016 
7017 smallDictt* removeElemSmallDictG (smallDictt *self, const char *key) {
7018 
7019  return(self->f->remove(self,key));
7020 }
7021 
7023 
7024  return(self->f->removeKChar(self, key));
7025 }
7026 
7027 bool hasSmallDictG (smallDictt *self, const char *key) {
7028 
7029  return(self->f->has(self, key));
7030 }
7031 
7032 bool hasKCharSmallDictG (smallDictt *self, char key) {
7033 
7034  return(self->f->hasKChar(self, key));
7035 }
7036 
7038 
7039  return(self->f->keyBy(self,value));
7040 }
7041 
7043 
7044  return(self->f->keyByUndefined(self,u));
7045 }
7046 
7048 
7049  return(self->f->keyByBool(self,value));
7050 }
7051 
7053 
7054  return(self->f->keyByDouble(self,value));
7055 }
7056 
7057 char* keyByIntSmallDictG(smallDictt *self, int64_t value) {
7058 
7059  return(self->f->keyByInt(self,value));
7060 }
7061 
7062 char* keyBySSmallDictG(smallDictt *self, const char *string) {
7063 
7064  return(self->f->keyByS(self,string));
7065 }
7066 
7067 char* keyByCharSmallDictG(smallDictt *self, char c) {
7068 
7069  return(self->f->keyByChar(self,c));
7070 }
7071 
7073 
7074  return(self->f->keyByDict(self,dict));
7075 }
7076 
7078 
7079  return(self->f->keyByArray(self,array));
7080 }
7081 
7083 
7084  return(self->f->keyByArrayc(self,array));
7085 }
7086 
7087 char* keyByCArraycSmallDictG(smallDictt *self, const char **array) {
7088 
7089  return(self->f->keyByCArrayc(self,array));
7090 }
7091 
7093 
7094  return(self->f->keyBySmallBool(self,value));
7095 }
7096 
7098 
7099  return(self->f->keyBySmallBytes(self,value));
7100 }
7101 
7103 
7104  return(self->f->keyBySmallDouble(self,value));
7105 }
7106 
7108 
7109  return(self->f->keyBySmallInt(self,value));
7110 }
7111 
7113 
7114  return(self->f->keyBySmallJson(self,string));
7115 }
7116 
7118 
7119  return(self->f->keyBySmallString(self,string));
7120 }
7121 
7123 
7124  return(self->f->keyBySmallContainer(self,container));
7125 }
7126 
7128 
7129  return(self->f->icKeyBy(self,value));
7130 }
7131 
7132 char* icKeyBySSmallDictG(smallDictt *self, const char *string) {
7133 
7134  return(self->f->icKeyByS(self,string));
7135 }
7136 
7137 char* icKeyByCharSmallDictG(smallDictt *self, char c) {
7138 
7139  return(self->f->icKeyByChar(self,c));
7140 }
7141 
7143 
7144  return(self->f->icKeyByDict(self,dict));
7145 }
7146 
7148 
7149  return(self->f->icKeyByArray(self,array));
7150 }
7151 
7153 
7154  return(self->f->icKeyByArrayc(self,array));
7155 }
7156 
7157 char* icKeyByCArraycSmallDictG(smallDictt *self, const char **array) {
7158 
7159  return(self->f->icKeyByCArrayc(self,array));
7160 }
7161 
7163 
7164  return(self->f->icKeyBySmallJson(self,string));
7165 }
7166 
7168 
7169  return(self->f->icKeyBySmallString(self,string));
7170 }
7171 
7173 
7174  return(self->f->trim(self));
7175 }
7176 
7178 
7179  return(self->f->keysSmallString(self));
7180 }
7181 
7182 size_t lenSmallDictG (smallDictt *self) {
7183 
7184  return(self->f->len(self));
7185 }
7186 
7188 
7189  return(self->f->empty(self));
7190 }
7191 
7193 
7194  return(self->f->isEmpty(self));
7195 }
7196 
7198 
7199  return(self->f->zip(self,keys,values));
7200 }
7201 
7203 
7204  return(self->f->zipSmallJson(self,keys,values));
7205 }
7206 
7208 
7209  return(self->f->zipSmallJsonSmallArray(self,keys,values));
7210 }
7211 
7213 
7214  return(self->f->zipSmallJsonSmallJson(self,keys,values));
7215 }
7216 
7218 
7219  return(self->f->zipSmallJsonVArray(self,keys,values));
7220 }
7221 
7223 
7224  return(self->f->zipSmallJsonVCArray(self,keys,values));
7225 }
7226 
7228 
7229  return(self->f->zipArray(self,keys,values));
7230 }
7231 
7233 
7234  return(self->f->zipArraySmallJson(self,keys,values));
7235 }
7236 
7238 
7239  return(self->f->zipCArray(self,keys,values));
7240 }
7241 
7243 
7244  return(self->f->zipCArraySmallJson(self,keys,values));
7245 }
7246 
7248 
7249  return(self->f->zipArrayArray(self,keys,values));
7250 }
7251 
7253 
7254  return(self->f->zipCArrayArray(self,keys,values));
7255 }
7256 
7258 
7259  return(self->f->zipArrayCArray(self,keys,values));
7260 }
7261 
7262 smallDictt* zipCArrayCArraySmallDictG(smallDictt *self, const char** keys, const char** values) {
7263 
7264  return(self->f->zipCArrayCArray(self,keys,values));
7265 }
7266 
7268 
7269  return(self->f->zipVArray(self,keys,values));
7270 }
7271 
7273 
7274  return(self->f->zipVCArray(self,keys,values));
7275 }
7276 
7278 
7279  return(self->f->fromArray(self, items));
7280 }
7281 
7283 
7284  return(self->f->toArray(self));
7285 }
7286 
7287 bool writeFileSmallDictG (smallDictt *self, const char *filePath) {
7288 
7289  return(self->f->writeFile(self, filePath));
7290 }
7291 
7293 
7294  return(self->f->writeFileSmallJson(self, filePath));
7295 }
7296 
7298 
7299  return(self->f->writeFileSmallString(self, filePath));
7300 }
7301 
7302 bool writeStreamSmallDictG (smallDictt *self, FILE *fp) {
7303 
7304  return(self->f->writeStream(self, fp));
7305 }
7306 
7307 bool appendFileSmallDictG (smallDictt *self, const char *filePath) {
7308 
7309  return(self->f->appendFile(self, filePath));
7310 }
7311 
7313 
7314  return(self->f->appendFileSmallString(self, filePath));
7315 }
7316 
7318 
7319  self->f->log(self);
7320 }
7321 
7323 
7324  return(self->f->typeSmallString(self,key));
7325 }
7326 
7327 const char* typeStringKCharSmallDictG (smallDictt *self, char key) {
7328 
7329  return(self->f->typeStringKChar(self, key));
7330 }
7331 
7333 
7334  return(self->f->typeSmallStringKChar(self, key));
7335 }
7336 
char * sEscapeTiny(smallt *obj)
stringify a small object
#define forEachCS(list, element)
forEach for const char** lists
Definition: libsheepy.h:3001
internal uint32_t cropElemUint32SmallDict(smallDictt *self, const char *key)
internal bool areAllEArraySmallDict(smallDictt *self)
internal smallBytest * getSmallBytesSmallDict(smallDictt *self, const char *key)
char * icKeyByArraycSmallDictG(smallDictt *self, char **array)
void listFreeS(char **list)
list Free String
Definition: libsheepy.c:50780
internal void freeSmallDict(smallDictt *self)
char * keyBySmallDictG(smallDictt *self, baset *value)
internal smallArrayt * getNDupArrayKCharSmallDict(smallDictt *self, char key)
internal smallIntt * getSmallIntSmallDict(smallDictt *self, const char *key)
internal smallDoublet * getSmallDoubleSmallDict(smallDictt *self, const char *key)
internal void finishSmallDict(smallDictt **self)
internal smallDictt * getNDupDictKCharSmallDict(smallDictt *self, char key)
int64_t getIntSmallDictG(smallDictt *self, int64_t retType UNUSED, const char *key)
internal smallDictt * setSmallBytesKCharSmallDict(smallDictt *self, char key, smallBytest *value)
char * s
#define charToS(dst, c)
Definition: libsheepy.h:1862
smallDictt * setUndefinedSmallDictG(smallDictt *self, const char *key, void *value UNUSED)
internal bool isEmptySmallDict(smallDictt *self)
smallt * so
void cleanUpSmallDictFinishG(smallDictt **val)
internal bool appendFileSmallStringSmallDict(smallDictt *self, smallStringt *filePath)
#define O(obj, method)
O calls an object method without parameters O(obj,toString) calls the toString method in the obj obje...
size_t len
char * getSSmallDictG(smallDictt *self, char *retType UNUSED, const char *key)
void sDictSetP(sDictt **dict, const char *key, smallt *data)
dictionary set pointer
internal smallDictt * setNFreePSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *json)
bool eqS(const char *string1, const char *string2)
string Equal compare string1 to string2
Definition: libsheepy.c:9067
internal bool areAllEStringSmallDict(smallDictt *self)
internal bool isEFaststringSmallDict(smallDictt *self, const char *key)
smallt * sDictGet(sDictt *dict, const char *key)
get object stored at key
bool isBlankS(const char *string)
is Blank String
Definition: libsheepy.c:50246
internal smallDictt * getNDupDictSmallDict(smallDictt *self, const char *key)
char * icKeyByCharSmallDictG(smallDictt *self, char c)
internal smallDictt * setDoubleKCharSmallDict(smallDictt *self, char key, double value)
int32_t getInt32KCharSmallDictG(smallDictt *self, int32_t retType UNUSED, char key)
internal bool writeFileSmallDict(smallDictt *self, const char *filePath)
bool hasSmallDictG(smallDictt *self, const char *key)
internal char * toStringSmallDict(smallDictt *self)
#define getTopSO(self)
char * icKeyBySmallJsonSmallDictG(smallDictt *self, smallJsont *string)
char * icKeyByDictSmallDictG(smallDictt *self, smallDictt *dict)
internal smallDictt * setCharSmallDict(smallDictt *self, const char *key, char c)
internal smallDictt * delKCharSmallDict(smallDictt *self, char key)
internal char * icKeyBySSmallDict(smallDictt *self, const char *string)
smallDictt * setNFreeSmallIntSmallDictG(smallDictt *self, const char *key, smallIntt *value)
internal int64_t getNDupIntSmallDict(smallDictt *self, const char *key)
internal bool isEDictSmallDict(smallDictt *self, const char *key)
char * sToString(smallt *obj)
stringify object
internal smallDictt * zipArrayArraySmallDict(smallDictt *self, char **keys, char **values)
smallArrayt * values
int64_t cropElemIntSmallDictG(smallDictt *self, const char *key)
#define MIN(a, b)
Definition: libsheepy.h:467
bool appendFileSmallDictG(smallDictt *self, const char *filePath)
internal smallDictt * setNFreeSmallDoubleSmallDict(smallDictt *self, const char *key, smallDoublet *value)
void * getVoidSmallDictG(smallDictt *self, void *retType UNUSED, const char *key)
internal smallDictt * setDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict)
internal smallContainert * getSmallContainerKCharSmallDict(smallDictt *self, char key)
smallDictt * setSSmallDictG(smallDictt *self, const char *key, const char *string)
internal smallDictt * setNFreePSmallStringKCharSmallDict(smallDictt *self, char key, smallStringt *string)
smallDictt * setNFreeSmallBoolKCharSmallDictG(smallDictt *self, char key, smallBoolt *value)
internal bool areAllEDoubleSmallDict(smallDictt *self)
internal char typeSmallDict(smallDictt *self, const char *key)
smallDictt * cropElemDictSmallDictG(smallDictt *self, const char *key)
free(s)
internal char * keyBySmallJsonSmallDict(smallDictt *self, smallJsont *string)
smallDictt * setNFreeArrayKCharSmallDictG(smallDictt *self, char key, smallArrayt *array)
sStringt * allocSStringTiny(const char *data)
allocate a small string
internal bool getBoolSmallDict(smallDictt *self, const char *key)
internal smallDictt * zipCArraySmallJsonSmallDict(smallDictt *self, const char **keys, smallJsont *values)
internal smallStringt * getNDupSmallStringKCharSmallDict(smallDictt *self, char key)
#define ssGet(obj)
get a pointer to the string in the smallString object
internal smallDictt * setUndefinedSmallDict(smallDictt *self, const char *key)
uint32_t getUint32KCharSmallDictG(smallDictt *self, uint32_t retType UNUSED, char key)
internal char * keyByDictSmallDict(smallDictt *self, smallDictt *dict)
smallDictt * delElemKCharSmallDictG(smallDictt *self, char key)
char * toStringListCSGF(const char **object)
baset * getNDupSmallDictG(smallDictt *self, baset *retType UNUSED, const char *key)
sIntt * allocSInt(int64_t value)
allocate a small int
sContainert * sc
char * keyByBoolSmallDictG(smallDictt *self, bool value)
internal bool areAllEFaststringSmallDict(smallDictt *self)
undefinedt * getNDupUndefinedSmallDictG(smallDictt *self, undefinedt *retType UNUSED, const char *key)
internal smallDictt * setNFreePSmallJsonKCharSmallDict(smallDictt *self, char key, smallJsont *json)
smallDictt * setSmallStringSmallDictG(smallDictt *self, const char *key, smallStringt *string)
smallDictt * zipArraySmallDictG(smallDictt *self, char **keys, smallArrayt *values)
internal smallArrayt * cropElemArraySmallDict(smallDictt *self, const char *key)
smallStringt * typeSmallStringSmallDictG(smallDictt *self, const char *key)
internal bool hasKCharSmallDict(smallDictt *self, char key)
char * keyBySmallJsonSmallDictG(smallDictt *self, smallJsont *string)
#define enumerateSmallArray(array, element, index)
enumerate non NULL elements in list skip deleted elements
internal int32_t getNDupInt32SmallDict(smallDictt *self, const char *key)
internal smallDictt * setSSmallDict(smallDictt *self, const char *key, const char *string)
internal smallDictt * setNFreePArraySmallDict(smallDictt *self, const char *key, smallArrayt *array)
internal smallDictt * mergeNSmashSmallDict(smallDictt *self, smallDictt *smallDict)
#define RST
reset for color function
Definition: libsheepy.h:763
internal smallStringt * typeSmallStringSmallDict(smallDictt *self, const char *key)
smallDictt * setNFreePSmallStringSmallDictG(smallDictt *self, const char *key, smallStringt *string)
internal smallDictt * zipSmallJsonVCArraySmallDict(smallDictt *self, smallJsont *keys, const char **values)
internal smallArrayt * getArrayKCharSmallDict(smallDictt *self, char key)
smallDictt * setNFreeSmallStringSmallDictG(smallDictt *self, const char *key, smallStringt *string)
internal bool equalSmallDictBase(smallDictt *self, baset *p2)
smallDictt * zipCArrayArraySmallDictG(smallDictt *self, const char **keys, char **values)
smallDictt * setArraycSmallDictG(smallDictt *self, const char *key, char **array)
internal smallDictt * setSmallBoolKCharSmallDict(smallDictt *self, char key, smallBoolt *value)
internal smallDictt * zipSmallJsonSmallArraySmallDict(smallDictt *self, smallJsont *keys, smallArrayt *values)
internal char * escapeSmallDict(smallDictt *self)
internal smallDictt * zipVCArraySmallDict(smallDictt *self, smallArrayt *keys, const char **values)
smallDictt * setNFreeSmallJsonKCharSmallDictG(smallDictt *self, char key, smallJsont *value)
internal smallBytest * getNDupSmallBytesSmallDict(smallDictt *self, const char *key)
internal smallDictt * mergeNSmashSmallJsonSmallDict(smallDictt *self, smallJsont *json)
smallDictt * setSmallBoolSmallDictG(smallDictt *self, const char *key, smallBoolt *value)
char * keyByArraycSmallDictG(smallDictt *self, char **array)
internal smallDictt * setArraySmallDict(smallDictt *self, const char *key, smallArrayt *array)
smallContainert * allocSmallContainer(void *data)
char * keyBySmallContainerSmallDictG(smallDictt *self, smallContainert *container)
smallDictt * getDictSmallDictG(smallDictt *self, smallDictt *retType UNUSED, const char *key)
internal smallDictt * setCharKCharSmallDict(smallDictt *self, char key, char c)
#define u64
Definition: libsheepy.h:448
internal uint64_t getUintSmallDict(smallDictt *self, const char *key)
smallDictt * setArraycKCharSmallDictG(smallDictt *self, char key, char **array)
char * keyBySmallDoubleSmallDictG(smallDictt *self, smallDoublet *value)
smallIntt * cropElemSmallIntSmallDictG(smallDictt *self, const char *key)
smallArrayFunctionst * f
uint32_t getNDupUint32SmallDictG(smallDictt *self, uint32_t retType UNUSED, const char *key)
internal smallDictt * setSmallDoubleKCharSmallDict(smallDictt *self, char key, smallDoublet *value)
char * getSKCharSmallDictG(smallDictt *self, char *retType UNUSED, char key)
smallDictt * setIntKCharSmallDictG(smallDictt *self, char key, int64_t value)
uint64_t getUintKCharSmallDictG(smallDictt *self, uint64_t retType UNUSED, char key)
internal const char * iterNextKeySmallDict(smallDictt *self)
internal smallDictt * setBoolKCharSmallDict(smallDictt *self, char key, bool value)
#define isOSmallInt(obj)
test if obj type is smallInt
smallArrayt * toArraySmallDictG(smallDictt *self)
smallt * i
smallDictt * trimSmallDictG(smallDictt *self)
internal char * keyByCArraycSmallDict(smallDictt *self, const char **array)
internal smallDictt * setDoubleSmallDict(smallDictt *self, const char *key, double value)
internal smallDictt * mergeSmallJsonSmallDict(smallDictt *self, smallJsont *json)
bool icEqS(const char *string1, const char *string2)
ignore case string Equal compare string1 to string2
Definition: libsheepy.c:9283
internal smallDictt * setNFreePArrayKCharSmallDict(smallDictt *self, char key, smallArrayt *array)
smallDictt * setSKCharSmallDictG(smallDictt *self, char key, const char *string)
internal bool * getBoolPKCharSmallDict(smallDictt *self, char key)
internal char * keyBySSmallDict(smallDictt *self, const char *string)
internal void * getVoidSmallDict(smallDictt *self, const char *key)
smallArrayt * cropElemArraySmallDictG(smallDictt *self, const char *key)
double getNumSmallDictG(smallDictt *self, const char *key)
array
void initiateSmallDict(smallDictt *self)
smallDictt * getNDupDictKCharSmallDictG(smallDictt *self, smallDictt *retType UNUSED, char key)
internal smallBoolt * cropElemSmallBoolSmallDict(smallDictt *self, const char *key)
smallDictt * setNFreeArraySmallDictG(smallDictt *self, const char *key, smallArrayt *array)
char * keyBySmallBoolSmallDictG(smallDictt *self, smallBoolt *value)
internal smallDictt * setDictSmallDict(smallDictt *self, const char *key, smallDictt *dict)
char * icKeyBySmallStringSmallDictG(smallDictt *self, smallStringt *string)
internal sDictt * getsoSmallDict(smallDictt *self)
smallDictt * zipSmallJsonSmallJsonSmallDictG(smallDictt *self, smallJsont *keys, smallJsont *values)
smallDictt * allocSmallDictG(smallDictt *self UNUSED)
bool writeFileSmallDictG(smallDictt *self, const char *filePath)
internal smallArrayt * toArraySmallDict(smallDictt *self)
internal bool areAllEBoolSmallDict(smallDictt *self)
internal smallDictt * setNFreeSmallBytesKCharSmallDict(smallDictt *self, char key, smallBytest *value)
terminateSmallDictFt terminate
smallDictt * setNFreeSmallDictG(smallDictt *self, const char *key, baset *value)
internal bool areAllEUndefinedSmallDict(smallDictt *self)
char * keyByArraySmallDictG(smallDictt *self, smallArrayt *array)
smallDictt * setNFreePSmallJsonKCharSmallDictG(smallDictt *self, char key, smallJsont *json)
int writeStreamS(FILE *fp, const char *string)
write string to file
Definition: libsheepy.c:4963
int64_t getNDupIntSmallDictG(smallDictt *self, int64_t retType UNUSED, const char *key)
internal smallContainert * cropElemSmallContainerSmallDict(smallDictt *self, const char *key)
internal smallDictt * typeStringsSmallDict(smallDictt *self)
smallDictt * setSmallStringKCharSmallDictG(smallDictt *self, char key, smallStringt *string)
internal char ** keysSmallDict(smallDictt *self)
#define lenO(self)
smallDictt * fromArraySmallDictG(smallDictt *self, smallArrayt *items)
base class for the small objects all small objects have a type
internal char typeKCharSmallDict(smallDictt *self, char key)
baseFunctionst * f
smallDictt * d
smallArrayt * getArraySmallDictG(smallDictt *self, smallArrayt *retType UNUSED, const char *key)
smallDictt * zipCArrayCArraySmallDictG(smallDictt *self, const char **keys, const char **values)
internal double cropElemDoubleSmallDict(smallDictt *self, const char *key)
internal smallDictt * setPArrayKCharSmallDict(smallDictt *self, char key, smallArrayt *array)
smallDictt * mergeNSmashSmallJsonSmallDictG(smallDictt *self, smallJsont *json)
internal char * keyByUndefinedSmallDict(smallDictt *self, undefinedt *u)
internal bool areAllEDictSmallDict(smallDictt *self)
char * keyByCArraycSmallDictG(smallDictt *self, const char **array)
internal int32_t getInt32SmallDict(smallDictt *self, const char *key)
internal char * icKeyBySmallJsonSmallDict(smallDictt *self, smallJsont *string)
internal smallArrayt * getArraySmallDict(smallDictt *self, const char *key)
#define createAllocateSmallDict(obj)
char data[7]
Definition: libsheepy.c:19690
sBytest * allocSBytes(void)
allocate a small bytes object
internal smallDictt * emptySmallDict(smallDictt *self)
#define forEachCCharP(list, element)
forEach for const char** lists
Definition: libsheepy.h:2985
smallIntt * getSmallIntSmallDictG(smallDictt *self, smallIntt *retType UNUSED, const char *key)
smallDictt * setBoolSmallDictG(smallDictt *self, const char *key, bool value)
smallDictt * setKCharSmallDictG(smallDictt *self, char key, baset *value)
internal smallDictt * setNFreeArrayKCharSmallDict(smallDictt *self, char key, smallArrayt *array)
baset * b
smallDictt * setIntSmallDictG(smallDictt *self, const char *key, int64_t value)
smallDictt * setCharKCharSmallDictG(smallDictt *self, char key, char c)
internal smallDictt * delSmallDict(smallDictt *self, const char *key)
smallDictt * setNFreeSmallContainerSmallDictG(smallDictt *self, const char *key, smallContainert *container)
int32_t * getInt32PSmallDictG(smallDictt *self, int32_t *retType UNUSED, const char *key)
internal smallDictt * mirrorSmallDict(smallDictt *self)
#define isError(assigned, left)
is Assigment Error catch error when assigned is false, 0 or NULL after being assigned with left ...
Definition: libsheepy.h:386
#define forEachS(list, element)
forEach - loop macro on list indexes to access the element in the loop, use element ;size_t UNIQVAR n...
Definition: libsheepy.h:2994
#define forEachSmallArray(array, element)
forEach - loop macro on list non NULL elements skip deleted elements
small bytes
uint64_t * getUintPKCharSmallDictG(smallDictt *self, uint64_t *retType UNUSED, char key)
internal char * icKeyByDictSmallDict(smallDictt *self, smallDictt *dict)
internal smallJsont * getNDupSmallJsonKCharSmallDict(smallDictt *self, char key)
smallJsont * getNDupSmallJsonKCharSmallDictG(smallDictt *self, smallJsont *retType UNUSED, char key)
internal smallStringt * getSmallStringSmallDict(smallDictt *self, const char *key)
internal smallDictt * setSmallDoubleSmallDict(smallDictt *self, const char *key, smallDoublet *value)
internal smallBytest * cropElemSmallBytesSmallDict(smallDictt *self, const char *key)
internal smallDictt * setNFreeSmallIntKCharSmallDict(smallDictt *self, char key, smallIntt *value)
internal smallDictt * setArraycKCharSmallDict(smallDictt *self, char key, char **array)
char * icKeyByCArraycSmallDictG(smallDictt *self, const char **array)
internal bool isEUndefinedSmallDict(smallDictt *self, const char *key)
char * sStringGetTiny(sStringt *string)
get string in a small string object
internal undefinedt * cropElemUndefinedSmallDict(smallDictt *self, const char *key)
smallStringt * typeSmallStringKCharSmallDictG(smallDictt *self, char key)
internal bool cropElemBoolSmallDict(smallDictt *self, const char *key)
internal double getNumSmallDict(smallDictt *self, const char *key)
sBoolt * value
bool value
internal double getDoubleKCharSmallDict(smallDictt *self, char key)
internal double getNDupDoubleSmallDict(smallDictt *self, const char *key)
internal smallDictt * setSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string)
internal smallDictt * setNFreePDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict)
internal const char * iterKeySmallDict(smallDictt *self)
smallDictt * setNFreeArraycSmallDictG(smallDictt *self, const char *key, char **array)
internal smallDictt * removeKCharSmallDict(smallDictt *self, char key)
internal undefinedt * getNDupUndefinedSmallDict(smallDictt *self, const char *key)
bool * getBoolPSmallDictG(smallDictt *self, bool *retType UNUSED, const char *key)
char * icKeyByArraySmallDictG(smallDictt *self, smallArrayt *array)
smallDictt * mergeNSmashSmallDictG(smallDictt *self, smallDictt *smallDict)
smallStringt * cropElemSmallStringSmallDictG(smallDictt *self, const char *key)
internal smallDictt * setPSmallJsonKCharSmallDict(smallDictt *self, char key, smallJsont *json)
#define getTopTypeO(self)
internal void * getVoidKCharSmallDict(smallDictt *self, char key)
internal smallBoolt * getNDupSmallBoolSmallDict(smallDictt *self, const char *key)
internal bool areAllETypeSmallDict(smallDictt *self, const char *type)
smallDictt * setSmallBytesKCharSmallDictG(smallDictt *self, char key, smallBytest *value)
#define isOSmallJson(obj)
test if obj type is smallJson
void sArrayPushTiny(sArrayt **array, smallt *data)
push data to array
small int
internal void resetSmallDict(smallDictt *self)
#define isOType(obj, className)
test obj type
internal smallDictt * zipSmallDict(smallDictt *self, smallArrayt *keys, smallArrayt *values)
internal bool icEqualSmallDictSmallJson(smallDictt *self, smallJsont *p2)
smallStringFunctionst * f
internal smallDictt * setKCharSmallDict(smallDictt *self, char key, baset *value)
internal smallDictt * setSmallContainerSmallDict(smallDictt *self, const char *key, smallContainert *container)
#define isOSmallContainer(obj)
test if obj type is smallContainer
smallContainert * cropElemSmallContainerSmallDictG(smallDictt *self, const char *key)
smallDictt * zipSmallJsonVArraySmallDictG(smallDictt *self, smallJsont *keys, char **values)
char * array[]
internal smallDictt * setPSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string)
void finalizeRecycleSmallDict(void *arg UNUSED)
#define elif
elif definition as alternative to else if
Definition: libsheepy.h:589
internal smallDictt * setPDictSmallDict(smallDictt *self, const char *key, smallDictt *dict)
smallJsont * getSmallJsonSmallDictG(smallDictt *self, smallJsont *retType UNUSED, const char *key)
smallDictt * zipSmallJsonSmallDictG(smallDictt *self, smallArrayt *keys, smallJsont *values)
#define isOUndefined(obj)
test if obj type is undefined
smallt * sDuplicateTiny(smallt *obj)
duplicate small object
#define createAllocateSmallJson(obj)
smallDictt * setNFreeSmallBytesSmallDictG(smallDictt *self, const char *key, smallBytest *value)
bool hasKCharSmallDictG(smallDictt *self, char key)
internal smallDictt * removeSmallDict(smallDictt *self, const char *key)
#define terminateO(obj)
free buffers and obj itself
internal bool writeStreamSmallDict(smallDictt *self, FILE *fp)
internal smallDictt * setPSmallStringKCharSmallDict(smallDictt *self, char key, smallStringt *string)
smallDictt * setBoolKCharSmallDictG(smallDictt *self, char key, bool value)
bool * getBoolPKCharSmallDictG(smallDictt *self, bool *retType UNUSED, char key)
internal smallBoolt * getSmallBoolKCharSmallDict(smallDictt *self, char key)
smallDictt * setNFreeSmallBoolSmallDictG(smallDictt *self, const char *key, smallBoolt *value)
smallDictt * removeElemSmallDictG(smallDictt *self, const char *key)
#define range(index, maxCount)
range loop ;size_t UNIQVAR needed to avoid: error: a label can only be part of a statement and a decl...
Definition: libsheepy.h:2772
smallIntt * getSmallIntKCharSmallDictG(smallDictt *self, smallIntt *retType UNUSED, char key)
internal bool * getBoolPSmallDict(smallDictt *self, const char *key)
pErrorNULL(iPrependS(&ks, "[1]"))
internal smallDictt * zipCArrayArraySmallDict(smallDictt *self, const char **keys, char **values)
internal smallDictt * setNFreeDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict)
internal smallDictt * setNFreeSmallBoolSmallDict(smallDictt *self, const char *key, smallBoolt *value)
bool equalSmallDictBaseG(smallDictt *self, baset *p2)
#define isOSmallBytes(obj)
test if obj type is smallBytes
internal smallBoolt * getSmallBoolSmallDict(smallDictt *self, const char *key)
uint32_t * getUint32PKCharSmallDictG(smallDictt *self, uint32_t *retType UNUSED, char key)
sContainert * allocSContainer(void *data)
allocate a small container The container holds a pointer to a user buffer
smallDictt * setSmallJsonKCharSmallDictG(smallDictt *self, char key, smallJsont *value)
bool cropElemBoolSmallDictG(smallDictt *self, const char *key)
smallDictt * zipSmallJsonVCArraySmallDictG(smallDictt *self, smallJsont *keys, const char **values)
smallBytest * cropElemSmallBytesSmallDictG(smallDictt *self, const char *key)
smallDictt * setNFreeSmallContainerKCharSmallDictG(smallDictt *self, char key, smallContainert *container)
#define logBtrace
Definition: libsheepy.h:3249
internal const char * typeStringSmallDict(smallDictt *self, const char *key)
internal bool areAllEContainerSmallDict(smallDictt *self)
int writeFileS(const char *filePath, const char *string)
write string to file
Definition: libsheepy.c:4883
double * getDoublePKCharSmallDictG(smallDictt *self, double *retType UNUSED, char key)
sUndefinedt * allocSUndefined(void)
allocate a small undefined object
internal smallDictt * setPDictKCharSmallDict(smallDictt *self, char key, smallDictt *dict)
smallDictt * setNFreeDictKCharSmallDictG(smallDictt *self, char key, smallDictt *dict)
char type
#define setTopNFreeO(self, value)
smallDictt * setSmallIntSmallDictG(smallDictt *self, const char *key, smallIntt *value)
internal smallDoublet * getSmallDoubleKCharSmallDict(smallDictt *self, char key)
uint32_t count
internal smallDictt * getDictKCharSmallDict(smallDictt *self, char key)
internal baset * getKCharSmallDict(smallDictt *self, char key)
smallDictt * getDictKCharSmallDictG(smallDictt *self, smallDictt *retType UNUSED, char key)
internal smallDoublet * getNDupSmallDoubleKCharSmallDict(smallDictt *self, char key)
smallDictt * setPDictSmallDictG(smallDictt *self, const char *key, smallDictt *dict)
smallDictt * setDoubleSmallDictG(smallDictt *self, const char *key, double value)
smallDictt * setNFreeArraycKCharSmallDictG(smallDictt *self, char key, char **array)
internal smallDictt * setNFreeSmallDoubleKCharSmallDict(smallDictt *self, char key, smallDoublet *value)
internal char * icKeyByArraycSmallDict(smallDictt *self, char **array)
smallDictt * setArrayKCharSmallDictG(smallDictt *self, char key, smallArrayt *array)
smallDictt * setSmallContainerSmallDictG(smallDictt *self, const char *key, smallContainert *container)
int64_t getIntKCharSmallDictG(smallDictt *self, int64_t retType UNUSED, char key)
smallDictt * setNFreeUndefinedKCharSmallDictG(smallDictt *self, char key, undefinedt *u)
internal const char * helpSmallDict(smallDictt UNUSED *self)
smallArrayt * getArrayKCharSmallDictG(smallDictt *self, smallArrayt *retType UNUSED, char key)
smallDictt * removeElemKCharSmallDictG(smallDictt *self, char key)
internal smallJsont * cropElemSmallJsonSmallDict(smallDictt *self, const char *key)
smallDictt * zipCArraySmallDictG(smallDictt *self, const char **keys, smallArrayt *values)
internal bool isEDoubleSmallDict(smallDictt *self, const char *key)
internal double getDoubleSmallDict(smallDictt *self, const char *key)
internal smallContainert * getNDupSmallContainerKCharSmallDict(smallDictt *self, char key)
internal char * icKeyByCharSmallDict(smallDictt *self, char c)
internal smallDictt * setSmallDict(smallDictt *self, const char *key, baset *value)
internal smallDictt * mergeSmallDict(smallDictt *self, smallDictt *smallDict)
char * keyBySmallIntSmallDictG(smallDictt *self, smallIntt *value)
internal smallDictt * fromArraySmallDict(smallDictt *self, smallArrayt *items)
toStringSmallStringFt toString
internal smallDictt * setSmallIntKCharSmallDict(smallDictt *self, char key, smallIntt *value)
internal baset * iterStartSmallDict(smallDictt *self)
smallDictt * setDoubleKCharSmallDictG(smallDictt *self, char key, double value)
bool appendFileSmallStringSmallDictG(smallDictt *self, smallStringt *filePath)
internal bool equalSmallDict(smallDictt *self, smallDictt *p2)
internal const char * typeStringKCharSmallDict(smallDictt *self, char key)
double getNDupDoubleKCharSmallDictG(smallDictt *self, double retType UNUSED, char key)
internal char * getNDupSSmallDict(smallDictt *self, const char *key)
internal smallDictt * getDictSmallDict(smallDictt *self, const char *key)
int32_t getNDupInt32SmallDictG(smallDictt *self, int32_t retType UNUSED, const char *key)
char * icKeyBySmallDictG(smallDictt *self, baset *value)
void logSmallDictG(smallDictt *self)
END_TEST FILE * fp
internal void setsoSmallDict(smallDictt *self, sDictt *so)
smallDictt * setSmallDoubleSmallDictG(smallDictt *self, const char *key, smallDoublet *value)
bool getBoolSmallDictG(smallDictt *self, bool retType UNUSED, const char *key)
internal smallDictt * setNFreePSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string)
double getDoubleKCharSmallDictG(smallDictt *self, double retType UNUSED, char key)
internal smallDictt * setNFreeSmallContainerKCharSmallDict(smallDictt *self, char key, smallContainert *container)
internal smallDictt * setBoolSmallDict(smallDictt *self, const char *key, bool value)
smallContainert * getSmallContainerKCharSmallDictG(smallDictt *self, smallContainert *retType UNUSED, char key)
void finalizeSmallDict(void)
internal smallJsont * getNDupSmallJsonSmallDict(smallDictt *self, const char *key)
internal smallDoublet * cropElemSmallDoubleSmallDict(smallDictt *self, const char *key)
internal char * icKeyByArraySmallDict(smallDictt *self, smallArrayt *array)
internal smallStringt * getSmallStringKCharSmallDict(smallDictt *self, char key)
#define cast(type, casted, toCast)
define variable and cast pointer
Definition: libsheepy.h:617
internal smallDictt * zipArraySmallDict(smallDictt *self, char **keys, smallArrayt *values)
internal bool isEArraySmallDict(smallDictt *self, const char *key)
smallDictt * setCArraycSmallDictG(smallDictt *self, const char *key, const char **array)
internal uint64_t getNDupUintKCharSmallDict(smallDictt *self, char key)
smallDictt * setNFreeSmallBytesKCharSmallDictG(smallDictt *self, char key, smallBytest *value)
void initiateAllocateSmallDict(smallDictt **self)
char c
internal smallDictt * setNFreeSmallBoolKCharSmallDict(smallDictt *self, char key, smallBoolt *value)
internal smallArrayt * valuesSmallDict(smallDictt *self)
smallDictt * delKCharSmallDictG(smallDictt *self, char key, int unused UNUSED)
internal smallDictt * setNFreeKCharSmallDict(smallDictt *self, char key, baset *value)
internal smallDictt * zipCArrayCArraySmallDict(smallDictt *self, const char **keys, const char **values)
internal smallDictt * setNFreeSmallContainerSmallDict(smallDictt *self, const char *key, smallContainert *container)
smallDictt * zipArrayCArraySmallDictG(smallDictt *self, char **keys, const char **values)
#define toStringO(obj)
convert data in obj to string
smallDictt * setDictSmallDictG(smallDictt *self, const char *key, smallDictt *dict)
bool writeStreamSmallDictG(smallDictt *self, FILE *fp)
internal smallDictt * setNFreeArraycKCharSmallDict(smallDictt *self, char key, char **array)
void freeSmallDictG(smallDictt *self)
smallDictt * getNDupDictSmallDictG(smallDictt *self, smallDictt *retType UNUSED, const char *key)
internal bool isETypeSmallDict(smallDictt *self, const char *key, const char *type)
smallDictt * setNFreeSmallStringKCharSmallDictG(smallDictt *self, char key, smallStringt *string)
undefinedt * getNDupUndefinedKCharSmallDictG(smallDictt *self, undefinedt *retType UNUSED, char key)
internal undefinedt * getUndefinedSmallDict(smallDictt *self, const char *key)
#define removeElemO(self, index)
internal char * keyBySmallDict(smallDictt *self, baset *value)
internal void * cropElemVoidSmallDict(smallDictt *self, const char *key)
internal char * keyByArraycSmallDict(smallDictt *self, char **array)
internal smallDictt * setArraycSmallDict(smallDictt *self, const char *key, char **array)
baset * getSmallDictG(smallDictt *self, baset *retType UNUSED, const char *key)
internal smallIntt * cropElemSmallIntSmallDict(smallDictt *self, const char *key)
internal smallDictt * setNFreeArraycSmallDict(smallDictt *self, const char *key, char **array)
smallIntt * getNDupSmallIntKCharSmallDictG(smallDictt *self, smallIntt *retType UNUSED, char key)
smallDictt * setCArraycKCharSmallDictG(smallDictt *self, char key, const char **array)
smallContainert * getNDupSmallContainerKCharSmallDictG(smallDictt *self, smallContainert *retType UNUSED, char key)
smallDictt * zipSmallDictG(smallDictt *self, smallArrayt *keys, smallArrayt *values)
smallStringt * getSmallStringSmallDictG(smallDictt *self, smallStringt *retType UNUSED, const char *key)
smallDictt * setVoidKCharSmallDictG(smallDictt *self, char key, void *value)
internal smallDictt * setSmallIntSmallDict(smallDictt *self, const char *key, smallIntt *value)
sDictt * allocSDict(void)
allocate a small dict
smallBytest * getSmallBytesSmallDictG(smallDictt *self, smallBytest *retType UNUSED, const char *key)
internal char * getSSmallDict(smallDictt *self, const char *key)
smallDictt * setUndefinedKCharSmallDictG(smallDictt *self, char key, undefinedt *value UNUSED)
char * getNDupSSmallDictG(smallDictt *self, char *retType UNUSED, const char *key)
sContainert * data
pointer to data in smallContainer
internal bool icEqualSmallDictBase(smallDictt *self, baset *p2)
char * keyByDoubleSmallDictG(smallDictt *self, double value)
void cleanUpSmallDictFreeLocalG(smallDictt *val)
internal smallDoublet * getNDupSmallDoubleSmallDict(smallDictt *self, const char *key)
smallDictt * setPSmallJsonSmallDictG(smallDictt *self, const char *key, smallJsont *json)
smallStringt * getSmallStringKCharSmallDictG(smallDictt *self, smallStringt *retType UNUSED, char key)
internal smallDictt * setNFreeSmallIntSmallDict(smallDictt *self, const char *key, smallIntt *value)
internal smallDictt * setNFreePDictSmallDict(smallDictt *self, const char *key, smallDictt *dict)
internal char * keyByArraySmallDict(smallDictt *self, smallArrayt *array)
smallDictt * setNFreeKCharSmallDictG(smallDictt *self, char key, baset *value)
smallDictt * emptySmallDictG(smallDictt *self)
internal smallContainert * getSmallContainerSmallDict(smallDictt *self, const char *key)
smallStringt * getNDupSmallStringKCharSmallDictG(smallDictt *self, smallStringt *retType UNUSED, char key)
smallStringt * S
internal int32_t getNDupInt32KCharSmallDict(smallDictt *self, char key)
internal char * keyByCharSmallDict(smallDictt *self, char c)
internal smallDictt * zipSmallJsonSmallJsonSmallDict(smallDictt *self, smallJsont *keys, smallJsont *values)
smallt * sDictGetTiny(sDictt *dict, const char *key)
get object stored at key
internal double * getDoublePKCharSmallDict(smallDictt *self, char key)
internal smallDictt * setSmallStringKCharSmallDict(smallDictt *self, char key, smallStringt *string)
void cleanUpSmallDictSmashG(smallDictt **val)
smallDictt * o
internal int64_t * getIntPKCharSmallDict(smallDictt *self, char key)
internal smallArrayt * getNDupArraySmallDict(smallDictt *self, const char *key)
char * icKeyBySSmallDictG(smallDictt *self, const char *string)
internal undefinedt * getNDupUndefinedKCharSmallDict(smallDictt *self, char key)
internal uint32_t getNDupUint32SmallDict(smallDictt *self, const char *key)
smallContainerFunctionst * f
double getDoubleSmallDictG(smallDictt *self, double retType UNUSED, const char *key)
smallJsont * getNDupSmallJsonSmallDictG(smallDictt *self, smallJsont *retType UNUSED, const char *key)
smallBytest * getSmallBytesKCharSmallDictG(smallDictt *self, smallBytest *retType UNUSED, char key)
baset * getNDupKCharSmallDictG(smallDictt *self, baset *retType UNUSED, char key)
char * toStringListSGF(char **object)
bool getBoolKCharSmallDictG(smallDictt *self, bool retType UNUSED, char key)
smallDictt * duplicateSmallDictG(smallDictt *self)
baset * toBaset(smallt *obj)
convert smallt object to baset
internal int64_t getNDupIntKCharSmallDict(smallDictt *self, char key)
internal uint32_t getUint32KCharSmallDict(smallDictt *self, char key)
internal smallContainert * getNDupSmallContainerSmallDict(smallDictt *self, const char *key)
internal smallDictt * setSmallBytesSmallDict(smallDictt *self, const char *key, smallBytest *value)
#define disposeO(self)
smallDictt * setNFreeDictSmallDictG(smallDictt *self, const char *key, smallDictt *dict)
internal bool areAllEBytesSmallDict(smallDictt *self)
internal smallDictt * setNFreeSSmallDict(smallDictt *self, const char *key, char *string)
#define isOSmallDouble(obj)
test if obj type is smallDouble
void sDictPushTiny(sDictt **dict, const char *key, smallt *data)
push new key-value
internal smallDictt * setNFreeSmallBytesSmallDict(smallDictt *self, const char *key, smallBytest *value)
internal uint64_t getNDupUintSmallDict(smallDictt *self, const char *key)
void * sBytesGet(sBytest *bytes)
get buffer in small bytes
bool equalSmallDictG(smallDictt *self, smallDictt *p2)
smallDictt * delElemSmallDictG(smallDictt *self, const char *key)
void * getNDupVoidKCharSmallDictG(smallDictt *self, void *retType UNUSED, char key)
internal smallArrayt * keysSmallStringSmallDict(smallDictt *self)
internal uint64_t cropElemUintSmallDict(smallDictt *self, const char *key)
internal void * getNDupVoidKCharSmallDict(smallDictt *self, char key)
internal char * keyBySmallContainerSmallDict(smallDictt *self, smallContainert *container)
internal smallIntt * getNDupSmallIntSmallDict(smallDictt *self, const char *key)
internal smallDictt * setIntSmallDict(smallDictt *self, const char *key, int64_t value)
sDoublet * allocSDouble(double value)
allocate a small double
internal char * keyBySmallStringSmallDict(smallDictt *self, smallStringt *string)
internal uint32_t * getUint32PSmallDict(smallDictt *self, const char *key)
#define isOSmallDict(obj)
test if obj type is smallDictt
internal smallBytest * getSmallBytesKCharSmallDict(smallDictt *self, char key)
const char * typeStringKCharSmallDictG(smallDictt *self, char key)
internal void * getNDupVoidSmallDict(smallDictt *self, const char *key)
internal smallDictt * zipCArraySmallDict(smallDictt *self, const char **keys, smallArrayt *values)
#define BLD
bold for color function
Definition: libsheepy.h:765
smallDictt * zipSmallJsonSmallArraySmallDictG(smallDictt *self, smallJsont *keys, smallArrayt *values)
internal uint64_t * getUintPKCharSmallDict(smallDictt *self, char key)
internal char * icKeyBySmallStringSmallDict(smallDictt *self, smallStringt *string)
smallDoublet * getSmallDoubleKCharSmallDictG(smallDictt *self, smallDoublet *retType UNUSED, char key)
char * dupS(const char *string)
duplicate string
Definition: libsheepy.c:6548
smallDictt * setPArraySmallDictG(smallDictt *self, const char *key, smallArrayt *array)
smallJsont * cropElemSmallJsonSmallDictG(smallDictt *self, const char *key)
#define setsoO(self, so)
smallDictt * setSmallContainerKCharSmallDictG(smallDictt *self, char key, smallContainert *container)
smallDictt * zipArrayArraySmallDictG(smallDictt *self, char **keys, char **values)
toStringSmallDictFt toString
smallDictt * allocSmallDict(void)
int32_t cropElemInt32SmallDictG(smallDictt *self, const char *key)
smallBytest * getNDupSmallBytesKCharSmallDictG(smallDictt *self, smallBytest *retType UNUSED, char key)
bool icEqualSmallDictBaseG(smallDictt *self, baset *p2)
smallDictt * setPArrayKCharSmallDictG(smallDictt *self, char key, smallArrayt *array)
END_TEST createSmallArray(obj)
smallContainert * getNDupSmallContainerSmallDictG(smallDictt *self, smallContainert *retType UNUSED, const char *key)
internal bool isEContainerSmallDict(smallDictt *self, const char *key)
smallDictt * removeSmallDictG(smallDictt *self, const char *key, int unused UNUSED)
internal smallDictt * appendNSmashSmallDict(smallDictt *self, smallDictt *smallDict)
size_t listLengthCS(const char **list)
const list Length String return number of elements until the first NULL element
Definition: libsheepy.c:50843
uint32_t * getUint32PSmallDictG(smallDictt *self, uint32_t *retType UNUSED, const char *key)
#define strEq
Definition: libsheepy.h:2018
smallDictt * setNFreePDictSmallDictG(smallDictt *self, const char *key, smallDictt *dict)
bool icEqualSmallDictG(smallDictt *self, smallDictt *p2)
internal char * keyBySmallBytesSmallDict(smallDictt *self, smallBytest *value)
smallArrayt * getNDupArrayKCharSmallDictG(smallDictt *self, smallArrayt *retType UNUSED, char key)
uint64_t * getUintPSmallDictG(smallDictt *self, uint64_t *retType UNUSED, const char *key)
initiateAllocateSmallJson & json
internal void disposeSmallDict(smallDictt *self)
internal smallDictt * setNFreeDictSmallDict(smallDictt *self, const char *key, smallDictt *dict)
internal void enumerateSmallDictF(smallDictt *self, void *closure, enumerateElementSmallDictFt funcElem)
uint32_t getNDupUint32KCharSmallDictG(smallDictt *self, uint32_t retType UNUSED, char key)
smallArrayt * a
smallDictt * setPSmallStringSmallDictG(smallDictt *self, const char *key, smallStringt *string)
in value value
char * keyByUndefinedSmallDictG(smallDictt *self, undefinedt *u)
#define isOSmallBool(obj)
test if obj type is smallBool
#define forEachSDict(dict, element)
internal bool getNDupBoolKCharSmallDict(smallDictt *self, char key)
internal bool isEBytesSmallDict(smallDictt *self, const char *key)
internal smallDictt * zipArrayCArraySmallDict(smallDictt *self, char **keys, const char **values)
internal smallStringt * typeSmallStringKCharSmallDict(smallDictt *self, char key)
bool writeFileSmallStringSmallDictG(smallDictt *self, smallStringt *filePath)
internal int32_t * getInt32PSmallDict(smallDictt *self, const char *key)
internal int32_t * getInt32PKCharSmallDict(smallDictt *self, char key)
smallDictt * setVoidSmallDictG(smallDictt *self, const char *key, void *value)
double getNDupDoubleSmallDictG(smallDictt *self, double retType UNUSED, const char *key)
dictionary
internal smallDictt * duplicateSmallDict(smallDictt *self)
int64_t * getIntPSmallDictG(smallDictt *self, int64_t *retType UNUSED, const char *key)
smallDictt * setPDictKCharSmallDictG(smallDictt *self, char key, smallDictt *dict)
internal smallDictt * cropElemDictSmallDict(smallDictt *self, const char *key)
smallDictFunctionst * f
bool writeFileSmallJsonSmallDictG(smallDictt *self, smallJsont *filePath)
internal void logSmallDict(smallDictt *self)
internal smallDictt * setNFreeUndefinedKCharSmallDict(smallDictt *self, char key, undefinedt *u)
internal void smashSmallDict(smallDictt **self)
smallDictt * zipCArraySmallJsonSmallDictG(smallDictt *self, const char **keys, smallJsont *values)
smallDictt * setSmallIntKCharSmallDictG(smallDictt *self, char key, smallIntt *value)
char * cropElemSSmallDictG(smallDictt *self, const char *key)
internal char * getNDupSKCharSmallDict(smallDictt *self, char key)
small string
char * sToStringTiny(smallt *obj)
stringify a small object
smallDictt * setSmallBoolKCharSmallDictG(smallDictt *self, char key, smallBoolt *value)
internal smallDictt * zipVArraySmallDict(smallDictt *self, smallArrayt *keys, char **values)
baset * getKCharSmallDictG(smallDictt *self, baset *retType UNUSED, char key)
internal int32_t cropElemInt32SmallDict(smallDictt *self, const char *key)
internal char * keyBySmallIntSmallDict(smallDictt *self, smallIntt *value)
smallDictt * setNFreeUndefinedSmallDictG(smallDictt *self, const char *key, undefinedt *value)
finishSmallDictFt finish
internal bool writeFileSmallStringSmallDict(smallDictt *self, smallStringt *filePath)
undefinedt * allocUndefined(void)
smallDoublet * cropElemSmallDoubleSmallDictG(smallDictt *self, const char *key)
char * keyByIntSmallDictG(smallDictt *self, int64_t value)
internal baset * getNDupSmallDict(smallDictt *self, const char *key)
#define helpTextSmallDict
help text for this class It is public declaration so that child classes can add their help text easil...
smallDictt * setPSmallJsonKCharSmallDictG(smallDictt *self, char key, smallJsont *json)
small bool
char * keyBySmallBytesSmallDictG(smallDictt *self, smallBytest *value)
undefinedt * cropElemUndefinedSmallDictG(smallDictt *self, const char *key)
internal bool getBoolKCharSmallDict(smallDictt *self, char key)
internal smallDictt * setNFreeSmallStringKCharSmallDict(smallDictt *self, char key, smallStringt *string)
bool appendFileS(const char *filePath, const char *string)
append string to filePath
Definition: libsheepy.c:5023
smallJsonFunctionst * f
internal char * getSKCharSmallDict(smallDictt *self, char key)
duplicateSmallDictFt duplicate
smallDoublet * getNDupSmallDoubleSmallDictG(smallDictt *self, smallDoublet *retType UNUSED, const char *key)
internal size_t lenSmallDict(smallDictt *self)
int32_t getInt32SmallDictG(smallDictt *self, int32_t retType UNUSED, const char *key)
internal smallDictt * setSmallJsonKCharSmallDict(smallDictt *self, char key, smallJsont *value)
internal smallDictt * setNFreeSKCharSmallDict(smallDictt *self, char key, char *string)
smallt * toSmallt(baset *obj)
convert baset object to smallt
internal bool appendFileSmallDict(smallDictt *self, const char *filePath)
smallDictt * setArraySmallDictG(smallDictt *self, const char *key, smallArrayt *array)
smallDictt * setNFreeSSmallDictG(smallDictt *self, const char *key, char *string)
smallDictt * setSmallDoubleKCharSmallDictG(smallDictt *self, char key, smallDoublet *value)
smallDictt * setSmallJsonSmallDictG(smallDictt *self, const char *key, smallJsont *value)
internal bool getNDupBoolSmallDict(smallDictt *self, const char *key)
#define UNUSED
Definition: libsheepy.h:8195
void sDictDelTiny(sDictt *dict, const char *key)
delete dictionary element
bool getNDupBoolSmallDictG(smallDictt *self, bool retType UNUSED, const char *key)
sBoolt * allocSBool(bool value)
allocate a small bool
void cleanUpSmallDictFreeG(smallDictt **val)
internal smallDictt * zipArraySmallJsonSmallDict(smallDictt *self, char **keys, smallJsont *values)
internal int64_t * getIntPSmallDict(smallDictt *self, const char *key)
char * keyBySmallStringSmallDictG(smallDictt *self, smallStringt *string)
int64_t getNDupIntKCharSmallDictG(smallDictt *self, int64_t retType UNUSED, char key)
internal bool writeFileSmallJsonSmallDict(smallDictt *self, smallJsont *filePath)
internal int64_t cropElemIntSmallDict(smallDictt *self, const char *key)
void sArrayFreeTiny(sArrayt *array)
free array elements and array object
smallDictt * setDictKCharSmallDictG(smallDictt *self, char key, smallDictt *dict)
uint64_t cropElemUintSmallDictG(smallDictt *self, const char *key)
smallBoolt * getNDupSmallBoolSmallDictG(smallDictt *self, smallBoolt *retType UNUSED, const char *key)
bool isEmptySmallDictG(smallDictt *self)
internal smallDictt * setSKCharSmallDict(smallDictt *self, char key, const char *string)
internal smallIntt * getSmallIntKCharSmallDict(smallDictt *self, char key)
smallDictt * mergeSmallDictG(smallDictt *self, smallDictt *smallDict)
#define forEachCharP(list, element)
forEach - loop macro on list indexes to access the element in the loop, use *element ...
Definition: libsheepy.h:2979
void * getVoidKCharSmallDictG(smallDictt *self, void *retType UNUSED, char key)
uint32_t getUint32SmallDictG(smallDictt *self, uint32_t retType UNUSED, const char *key)
internal smallDictt * setCArraycSmallDict(smallDictt *self, const char *key, const char **array)
smallBoolt * cropElemSmallBoolSmallDictG(smallDictt *self, const char *key)
void sDictSetTiny(sDictt **dict, const char *key, smallt *data)
dictionary set key, value
smallStringt * allocSmallString(const char *string)
char * keyByDictSmallDictG(smallDictt *self, smallDictt *dict)
internal undefinedt * getUndefinedKCharSmallDict(smallDictt *self, char key)
smallDictt * setNFreePDictKCharSmallDictG(smallDictt *self, char key, smallDictt *dict)
smallArrayt * keysSmallStringSmallDictG(smallDictt *self)
#define getTopO(self)
internal smallDictt * setNFreeSmallStringSmallDict(smallDictt *self, const char *key, smallStringt *string)
internal char * keyByIntSmallDict(smallDictt *self, int64_t value)
char * getNDupSKCharSmallDictG(smallDictt *self, char *retType UNUSED, char key)
smallBoolFunctionst * f
bool getNDupBoolKCharSmallDictG(smallDictt *self, bool retType UNUSED, char key)
#define getValO(self)
get value in smallBool, smallBytes, smallDouble, smallInt, smallString
internal uint32_t getNDupUint32KCharSmallDict(smallDictt *self, char key)
smallDictt * zipArraySmallJsonSmallDictG(smallDictt *self, char **keys, smallJsont *values)
uint64_t getNDupUintSmallDictG(smallDictt *self, uint64_t retType UNUSED, const char *key)
internal char * keyBySmallDoubleSmallDict(smallDictt *self, smallDoublet *value)
#define rangeFrom(index, from, maxCount)
range loop starting at value from ;size_t UNIQVAR needed to avoid: error: a label can only be part of...
Definition: libsheepy.h:2803
void cleanUpSmallDictDisposeG(smallDictt *val)
smallBoolt * getNDupSmallBoolKCharSmallDictG(smallDictt *self, smallBoolt *retType UNUSED, char key)
void * getNDupVoidSmallDictG(smallDictt *self, void *retType UNUSED, const char *key)
internal smallDictt * setNFreeSmallJsonKCharSmallDict(smallDictt *self, char key, smallJsont *value)
internal smallStringt * getNDupSmallStringSmallDict(smallDictt *self, const char *key)
bool r
char ** keys
#define logW(...)
Definition: libsheepy.h:1061
#define fromArrayNFreeO(self, array, size)
smallJsont * getSmallJsonKCharSmallDictG(smallDictt *self, smallJsont *retType UNUSED, char key)
bool(* enumerateElementSmallDictFt)(void *closure, char *key, baset *element)
user defined function called in the enumerate loop this fucntion is a parameter to the enumerate func...
smallDictt * setPSmallStringKCharSmallDictG(smallDictt *self, char key, smallStringt *string)
uint32_t cropElemUint32SmallDictG(smallDictt *self, const char *key)
smallDictt * setNFreeSmallDoubleKCharSmallDictG(smallDictt *self, char key, smallDoublet *value)
int32_t getNDupInt32KCharSmallDictG(smallDictt *self, int32_t retType UNUSED, char key)
internal smallDictt * zipSmallJsonSmallDict(smallDictt *self, smallArrayt *keys, smallJsont *values)
base class
internal smallDictt * setIntKCharSmallDict(smallDictt *self, char key, int64_t value)
internal double * getDoublePSmallDict(smallDictt *self, const char *key)
internal baset * getSmallDict(smallDictt *self, const char *key)
smallt * sArrayGetTiny(sArrayt *array, uint32_t index)
get object at index
#define freeO(obj)
free buffers in obj
internal smallJsont * getSmallJsonKCharSmallDict(smallDictt *self, char key)
internal smallBoolt * getNDupSmallBoolKCharSmallDict(smallDictt *self, char key)
internal baset * getNDupKCharSmallDict(smallDictt *self, char key)
small double
smallDictt * setNFreePSmallStringKCharSmallDictG(smallDictt *self, char key, smallStringt *string)
smallDictt * setNFreeSmallIntKCharSmallDictG(smallDictt *self, char key, smallIntt *value)
internal smallDictt * setNFreeSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *value)
smallContainert * getSmallContainerSmallDictG(smallDictt *self, smallContainert *retType UNUSED, const char *key)
#define ARRAY_SIZE
Definition: libsheepy.h:473
internal smallDictt * setUndefinedKCharSmallDict(smallDictt *self, char key)
void sFree(smallt *obj)
free non null objects
internal bool isEIntSmallDict(smallDictt *self, const char *key)
internal char * keyBySmallBoolSmallDict(smallDictt *self, smallBoolt *value)
internal void terminateSmallDict(smallDictt **self)
internal smallDictt * setNFreeArraySmallDict(smallDictt *self, const char *key, smallArrayt *array)
internal smallStringt * cropElemSmallStringSmallDict(smallDictt *self, const char *key)
size_t lenSmallDictG(smallDictt *self)
smallDictt * setNFreePArrayKCharSmallDictG(smallDictt *self, char key, smallArrayt *array)
uint64_t getNDupUintKCharSmallDictG(smallDictt *self, uint64_t retType UNUSED, char key)
#define delElemO(self, index)
internal smallDictt * appendSmallDict(smallDictt *self, smallDictt *smallDict)
baset * cropElemSmallDictG(smallDictt *self, const char *key)
internal smallDictt * setSmallContainerKCharSmallDict(smallDictt *self, char key, smallContainert *container)
internal smallDictt * setSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *value)
internal char * cropElemSSmallDict(smallDictt *self, const char *key)
smallBoolt * getSmallBoolKCharSmallDictG(smallDictt *self, smallBoolt *retType UNUSED, char key)
void cleanUpSmallDictTerminateG(smallDictt **val)
smallDictt * setNFreePSmallJsonSmallDictG(smallDictt *self, const char *key, smallJsont *json)
internal uint32_t * getUint32PKCharSmallDict(smallDictt *self, char key)
smallDictt * setSmallDictG(smallDictt *self, const char *key, baset *value)
smallDictt * setNFreeSmallDoubleSmallDictG(smallDictt *self, const char *key, smallDoublet *value)
size_t listLengthS(char **list)
list Length String return number of elements until the first NULL element
Definition: libsheepy.c:50820
char ** listPushS(char ***list, const char *s)
list Push String append s at the end of the list when list is NULL, a new list with one element is re...
Definition: libsheepy.c:50504
internal smallDictt * setPSmallJsonSmallDict(smallDictt *self, const char *key, smallJsont *json)
bool icEqualSmallDictSmallJsonG(smallDictt *self, smallJsont *p2)
internal smallDictt * setCArraycKCharSmallDict(smallDictt *self, char key, const char **array)
internal baset * cropElemSmallDict(smallDictt *self, const char *key)
char * keyByCharSmallDictG(smallDictt *self, char c)
smallDictt * delSmallDictG(smallDictt *self, const char *key, int unused UNUSED)
smallIntFunctionst * f
smallDoublet * getSmallDoubleSmallDictG(smallDictt *self, smallDoublet *retType UNUSED, const char *key)
sArrayt * allocSArray(void)
allocate a small array
internal int32_t getInt32KCharSmallDict(smallDictt *self, char key)
internal smallDictt * trimSmallDict(smallDictt *self)
internal smallDictt * setSmallBoolSmallDict(smallDictt *self, const char *key, smallBoolt *value)
#define pushNFreeO(self, value)
smallDictt * mergeSmallJsonSmallDictG(smallDictt *self, smallJsont *json)
smallBytest * getNDupSmallBytesSmallDictG(smallDictt *self, smallBytest *retType UNUSED, const char *key)
internal smallDictt * setPArraySmallDict(smallDictt *self, const char *key, smallArrayt *array)
internal double getNDupDoubleKCharSmallDict(smallDictt *self, char key)
internal char * keyByDoubleSmallDict(smallDictt *self, double value)
void * cropElemVoidSmallDictG(smallDictt *self, const char *key)
#define freeManyS(...)
Definition: libsheepy.h:1867
int64_t * getIntPKCharSmallDictG(smallDictt *self, int64_t *retType UNUSED, char key)
char * keyBySSmallDictG(smallDictt *self, const char *string)
uint64_t getUintSmallDictG(smallDictt *self, uint64_t retType UNUSED, const char *key)
smallBoolt * getSmallBoolSmallDictG(smallDictt *self, smallBoolt *retType UNUSED, const char *key)
undefinedt * u
internal char * icKeyBySmallDict(smallDictt *self, baset *value)
bool equalSmallDictSmallJsonG(smallDictt *self, smallJsont *p2)
internal smallDictt * setArrayKCharSmallDict(smallDictt *self, char key, smallArrayt *array)
double cropElemDoubleSmallDictG(smallDictt *self, const char *key)
undefinedt * getUndefinedKCharSmallDictG(smallDictt *self, undefinedt *retType UNUSED, char key)
internal uint64_t * getUintPSmallDict(smallDictt *self, const char *key)
#define getsoO(self)
double * getDoublePSmallDictG(smallDictt *self, double *retType UNUSED, const char *key)
internal bool icEqualSmallDict(smallDictt *self, smallDictt *p2)
undefinedt * getUndefinedSmallDictG(smallDictt *self, undefinedt *retType UNUSED, const char *key)
#define createAllocateSmallArray(obj)
smallDictt * removeKCharSmallDictG(smallDictt *self, char key, int unused UNUSED)
smallIntt * getNDupSmallIntSmallDictG(smallDictt *self, smallIntt *retType UNUSED, const char *key)
internal char * keyByBoolSmallDict(smallDictt *self, bool value)
internal bool isEStringSmallDict(smallDictt *self, const char *key)
internal baset * iterElementSmallDict(smallDictt *self)
internal uint64_t getUintKCharSmallDict(smallDictt *self, char key)
internal const char * iterStartKeySmallDict(smallDictt *self)
#define finishO(obj)
free container only
#define isOSmallArray(obj)
test if obj type is smallArray
smallDoublet * getNDupSmallDoubleKCharSmallDictG(smallDictt *self, smallDoublet *retType UNUSED, char key)
internal bool equalSmallDictSmallJson(smallDictt *self, smallJsont *p2)
internal smallBytest * getNDupSmallBytesKCharSmallDict(smallDictt *self, char key)
internal int64_t getIntKCharSmallDict(smallDictt *self, char key)
smallDictt * setNFreeSmallJsonSmallDictG(smallDictt *self, const char *key, smallJsont *value)
smallDictt * zipVCArraySmallDictG(smallDictt *self, smallArrayt *keys, const char **values)
internal uint32_t getUint32SmallDict(smallDictt *self, const char *key)
internal bool areAllEIntSmallDict(smallDictt *self)
int32_t * getInt32PKCharSmallDictG(smallDictt *self, int32_t *retType UNUSED, char key)
#define smashO(obj)
free object and keep data
smallDoubleFunctionst * f
smallDictt * setSmallBytesSmallDictG(smallDictt *self, const char *key, smallBytest *value)
smallArrayt * getNDupArraySmallDictG(smallDictt *self, smallArrayt *retType UNUSED, const char *key)
smallStringt * getNDupSmallStringSmallDictG(smallDictt *self, smallStringt *retType UNUSED, const char *key)
internal bool isEBoolSmallDict(smallDictt *self, const char *key)
smallt * sDuplicate(smallt *o)
duplicate small object
internal int64_t getIntSmallDict(smallDictt *self, const char *key)
smallDictt * setNFreeSKCharSmallDictG(smallDictt *self, char key, char *string)
internal smallJsont * getSmallJsonSmallDict(smallDictt *self, const char *key)
smallDictt * setNFreePArraySmallDictG(smallDictt *self, const char *key, smallArrayt *array)
internal smallDictt * zipSmallJsonVArraySmallDict(smallDictt *self, smallJsont *keys, char **values)
internal bool hasSmallDict(smallDictt *self, const char *key)
internal smallDictt * setNFreeUndefinedSmallDict(smallDictt *self, const char *key, undefinedt *u)
smallDictt * setCharSmallDictG(smallDictt *self, const char *key, char c)
#define duplicateO(obj)
create a copy of obj
internal baset * iterNextSmallDict(smallDictt *self)
internal smallIntt * getNDupSmallIntKCharSmallDict(smallDictt *self, char key)
void registerMethodsSmallDict(smallDictFunctionst *f)
smallDictt * zipVArraySmallDictG(smallDictt *self, smallArrayt *keys, char **values)
internal smallDictt * setNFreeSmallDict(smallDictt *self, const char *key, baset *value)
#define isOSmallString(obj)
test if obj type is smallString
internal char * icKeyByCArraycSmallDict(smallDictt *self, const char **array)