libsheepy

C lib for handling text files, strings and json like data structure with an object oriented system
git clone https://spartatek.se/git/libsheepy.git
Log | Files | Refs | README | LICENSE

libsheepyObject.h (399844B)


      1 // MIT License
      2 //
      3 // Copyright (c) 2026 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 #pragma once
     23 
     24 /** \file
     25  * This file is the API for the classes in libsheepy
     26  *
     27  * The includes below have the API for each class
     28  *
     29  * All classes inherit from 'baset' declared below
     30  *
     31  * The generics helpers make it easier to handle the objects.
     32  *
     33  * Each class has create and initialize functions that have to called before
     34  * using the object.
     35  *
     36  * libsheepyCClassTemplate is a template for new classes. The base functions in
     37  * libsheepyCClassTemplate.c need to be filled with relevant code.
     38  *
     39  * <b>Generics</b>
     40  *
     41  * Macros ('abcO' freeO) for functions in the base class. They can be used on all libsheepy objects
     42  *
     43  * The macros ending with G (abcG) are c11 generics.
     44  *
     45  * For more information, the documentation is located at http://spartatek.se/libsheepy/
     46  */
     47 
     48 // indicate that this is libsheepy object
     49 #define __libsheepyObject 1
     50 
     51 #include "libsheepy.h"
     52 #include "libsheepySmall.h"
     53 #include "libsheepyBt.h"
     54 #if (!__OpenBSD__) && ! defined(__TINYC__)  && (__GNUC__ > 4)
     55 #include "stdatomic.h"
     56 #endif
     57 
     58 // Libsheepy configuration
     59 // check smallObject types in parameters and returns values in the small Classe methods
     60 static const bool checkObjectTypes = true;
     61 
     62 // recycleContainers stores the containers in a thread local list when finishO is called
     63 // the containers are recycled when initiateAllocate is called after a finishO
     64 //
     65 // When debugging container leaks, disable recycleContainers to make to easier to the
     66 // source of the leak by defining recycleContainers to 0
     67 //
     68 // 180814 the performance gain is about 14% for a program using the iter iterator
     69 // (debian stretch kaby lake linux 4.9, gcc 6.3, glibc 2.24)
     70 //
     71 // In each class, the finalizeRecycle function frees the unused containers at program
     72 // or thread exit
     73 //
     74 // The unused containers are stored in a list of size recycleContainersAmount in the
     75 // thread local storage
     76 //
     77 // New classes have to register their finalizeRecycle functions with
     78 // registerFinalizeRecycleContainersInThreadPool before the program exits
     79 // to avoid memory leaks
     80 #ifndef recycleContainers
     81 #define recycleContainers 1
     82 #endif
     83 #define recycleContainersAmount 8
     84 
     85 // debug option: stack check in finish functions (for *NFree functions)
     86 // adds a check in all *NFree function to figure out if the given object is on stack
     87 // if so, the object is not recycled or freed and a warning message is printed
     88 //
     89 // NFreeStackCheck prevents freeing stack objects
     90 //
     91 // The check is done by comparing the stack pointer to the object address, when
     92 // stack pointer < &object, the object is on stack
     93 #if !(__sun__ || __FreeBSD__)
     94 #if __amd64__
     95 #define NFreeStackCheck 1
     96 #endif
     97 #if !__amd64__
     98 #warning "NFreeStackCheck is available on x64/gcc/linux and BSD."
     99 #endif
    100 #endif
    101 // End libsheepy configuration
    102 
    103 // Generics
    104 
    105 /**
    106  * initialize object (on stack or on heap)
    107  *
    108  * Example:
    109  * // on stack
    110  * smallArrayt array;
    111  * initiateG(&array);
    112  * // heap
    113  * smallArrayt *array;
    114  * initiateG(&array);
    115  */
    116 #define initiateG(self) _Generic((self), \
    117     smallArrayt*: initiateSmallArray, \
    118     smallBoolt*: initiateSmallBool, \
    119     smallBytest*: initiateSmallBytes, \
    120     smallContainert*: initiateSmallContainer, \
    121     smallDictt*: initiateSmallDict, \
    122     smallDoublet*: initiateSmallDouble, \
    123     smallIntt*: initiateSmallInt, \
    124     smallJsont*: initiateSmallJson, \
    125     smallStringt*: initiateSmallString, \
    126     undefinedt*: initiateUndefined, \
    127     smallArrayt**: initiateAllocateSmallArray, \
    128     smallBoolt**: initiateAllocateSmallBool, \
    129     smallBytest**: initiateAllocateSmallBytes, \
    130     smallContainert**: initiateAllocateSmallContainer, \
    131     smallDictt**: initiateAllocateSmallDict, \
    132     smallDoublet**: initiateAllocateSmallDouble, \
    133     smallIntt**: initiateAllocateSmallInt, \
    134     smallJsont**: initiateAllocateSmallJson, \
    135     smallStringt**: initiateAllocateSmallString, \
    136     undefinedt**: initiateAllocateUndefined \
    137     )(self)
    138 
    139 /**
    140  * use rtSmallArrayt and rtSmallDictt for arrays and dictionaries
    141  *
    142  * note: this generic doesn't support smallBytes
    143  * because allocSmallBytes(void *data, uint32_t size) takes
    144  * 2 parameters.
    145  */
    146 #define allocG(value) _Generic((value), \
    147     smallArrayt*: allocSmallArrayG, \
    148     bool: allocSmallBool, \
    149     void *: allocSmallContainer, \
    150     smallDictt*: allocSmallDictG, \
    151     double: allocSmallDouble, \
    152     int64_t: allocSmallInt, \
    153     int32_t: allocSmallInt, \
    154     uint32_t: allocSmallInt, \
    155     uint64_t: allocSmallInt, \
    156     smallJsont*: allocSmallJsonG, \
    157     char *: allocSmallString, \
    158     const char *: allocSmallString, \
    159     char **: allocArraySmallArray, \
    160     const char **: allocCArraySmallArray, \
    161     btt: allocB, \
    162     const btt: allocB, \
    163     btt*: allocPB, \
    164     const btt*: allocPB \
    165     )(value)
    166 
    167 
    168 /**
    169  * free buffers in obj
    170  */
    171 #define freeO(obj) MACRO(\
    172     var p = obj;\
    173     if (p) {\
    174       p->f->free(p);\
    175     })
    176 
    177 #define freeG(self) _Generic((self), \
    178     smallArrayt*: freeSmallArrayG, \
    179     smallBoolt*: freeSmallBoolG, \
    180     smallBytest*: freeSmallBytesG, \
    181     smallContainert*: freeSmallContainerG, \
    182     smallDictt*: freeSmallDictG, \
    183     smallDoublet*: freeSmallDoubleG, \
    184     smallIntt*: freeSmallIntG, \
    185     smallJsont*: freeSmallJsonG, \
    186     smallStringt*: freeSmallStringG, \
    187     undefinedt*: freeUndefinedG, \
    188     char **: listFreeS,\
    189     default: free\
    190     )(self)
    191 
    192 /**
    193  * free many buffers in baset objects
    194  */
    195 void freeManyOF(void *paramType, ...);
    196 #define freeManyO(paramType, ...) freeManyOF(paramType, __VA_ARGS__, NULL)
    197 #define freeManyG freeManyO
    198 
    199 /**
    200  * free buffers and obj itself
    201  */
    202 #define terminateO(obj) MACRO (\
    203     var p = obj;\
    204     if (p) {\
    205       p->f->terminate(&(obj));\
    206     })
    207 #define terminateG terminateO
    208 
    209 /**
    210  * terminate many baset objects
    211  */
    212 void terminateManyOF(void *paramType, ...);
    213 #define terminateManyO(paramType, ...) terminateManyOF(paramType, __VA_ARGS__, NULL)
    214 #define terminateManyG terminateManyO
    215 
    216 /**
    217  * test obj type
    218  *
    219  * className is the class in a string
    220  */
    221 #define isOType(obj, className) (obj ? eqS(((baset *) (obj))->type, className) : 0)
    222 #define isOTypeG isOType
    223 
    224 /**
    225  * test if obj type is smallArray
    226  */
    227 #define isOSmallArray(obj) isOType(obj, "smallArray")
    228 #define isOSmallArrayG isOSmallArray
    229 
    230 /**
    231  * test if obj type is smallBool
    232  */
    233 #define isOSmallBool(obj) isOType(obj, "smallBool")
    234 #define isOSmallBoolG isOSmallBool
    235 
    236 /**
    237  * test if obj type is smallBytes
    238  */
    239 #define isOSmallBytes(obj) isOType(obj, "smallBytes")
    240 #define isOSmallBytesG isOSmallBytes
    241 
    242 /**
    243  * test if obj type is smallContainer
    244  */
    245 #define isOSmallContainer(obj) isOType(obj, "smallContainer")
    246 #define isOSmallContainerG isOSmallContainer
    247 
    248 /**
    249  * test if obj type is smallDictt
    250  */
    251 #define isOSmallDict(obj) isOType(obj, "smallDict")
    252 #define isOSmallDictG isOSmallDict
    253 
    254 /**
    255  * test if obj type is smallDouble
    256  */
    257 #define isOSmallDouble(obj) isOType(obj, "smallDouble")
    258 #define isOSmallDoubleG isOSmallDouble
    259 
    260 /**
    261  * test if obj type is smallInt
    262  */
    263 #define isOSmallInt(obj) isOType(obj, "smallInt")
    264 #define isOSmallIntG isOSmallInt
    265 
    266 /**
    267  * test if obj type is smallJson
    268  */
    269 #define isOSmallJson(obj) isOType(obj, "smallJson")
    270 #define isOSmallJsonG isOSmallJson
    271 
    272 /**
    273  * test if obj type is smallString
    274  */
    275 #define isOSmallString(obj) isOType(obj, "smallString")
    276 #define isOSmallStringG isOSmallString
    277 
    278 /**
    279  * test if obj type is undefined
    280  */
    281 #define isOUndefined(obj) isOType(obj, "undefined")
    282 #define isOUndefinedG isOUndefined
    283 
    284 
    285 /**
    286  * return obj type in a string
    287  */
    288 #define getOType(obj) ((baset *) (obj))->type
    289 
    290 /**
    291  * return C type for obj
    292  * mostly for debugging
    293  */
    294 #define getOTypeG(obj) _Generic(obj, \
    295   baset*: "baset*",\
    296   smallArrayt*: "smallArrayt*", \
    297   smallBoolt*: "smallBoolt*", \
    298   smallBytest*: "smallBytest*", \
    299   smallDictt*: "smallDictt*", \
    300   smallDoublet*: "smallDoublet*", \
    301   smallIntt*: "smallIntt*", \
    302   smallJsont*: "smallJsont*", \
    303   smallStringt*: "smallStringt*", \
    304   smallContainert*: "smallContainert*", \
    305   undefinedt*: "undefinedt*", \
    306   bool: "bool", \
    307   bool*: "bool*", \
    308   double: "double", \
    309   double*: "double*", \
    310   float: "float", \
    311   float*: "float*", \
    312   int64_t: "int64_t", \
    313   int64_t*: "int64_t*", \
    314   int32_t: "int32_t", \
    315   int32_t*: "int32_t*", \
    316   int16_t: "int16_t", \
    317   int16_t*: "int16_t*", \
    318   int8_t: "int8_t", \
    319   int8_t*: "int8_t*", \
    320   uint64_t: "uint64_t", \
    321   uint64_t*: "uint64_t*", \
    322   uint32_t: "uint32_t", \
    323   uint32_t*: "uint32_t*", \
    324   uint16_t: "uint16_t", \
    325   uint16_t*: "uint16_t*", \
    326   uint8_t: "uint8_t", \
    327   uint8_t*: "uint8_t*", \
    328   char: "char", \
    329   char*: "char*", \
    330   const char*: "const char*", \
    331   char**: "char**", \
    332   const char**: "const char**", \
    333   char***: "char***", \
    334   void*: "void*", \
    335   FILE*: "FILE*", \
    336   btt: "btt", \
    337   btt*: "btt*", \
    338   const btt: "const btt", \
    339   const btt*: "const btt*", \
    340   default: NULL \
    341   )
    342 
    343 /**
    344  * convert data in obj to string
    345  */
    346 #define toStringO(obj) (obj)->f->toString(obj)
    347 
    348 /**
    349  * create a copy of obj
    350  */
    351 #define duplicateO(obj) (obj)->f->duplicate(obj)
    352 #define duplicateG duplicateO
    353 
    354 /**
    355  * free object and keep data
    356  */
    357 #define smashO(obj) MACRO(\
    358     var p = obj;\
    359     if (p) {\
    360       p->f->smash(&obj);\
    361     })
    362 #define smashG smashO
    363 
    364 /**
    365  * smash many baset objects
    366  */
    367 void smashManyOF(void *paramType, ...);
    368 #define smashManyO(paramType, ...) smashManyOF(paramType, __VA_ARGS__, NULL)
    369 
    370 /**
    371  * free container only
    372  */
    373 #define finishO(obj) MACRO(\
    374     var p = obj;\
    375     if (p) {\
    376       p->f->finish(&(obj));\
    377     })
    378 #define finishG finishO
    379 
    380 /**
    381  * finish many baset objects
    382  */
    383 void finishManyOF(void *paramType, ...);
    384 #define finishManyO(paramType, ...) finishManyOF(paramType, __VA_ARGS__, NULL)
    385 #define finishManyG finishManyO
    386 
    387 /**
    388  * O calls an object method without parameters
    389  * O(obj,toString) calls the toString method
    390  * in the obj object
    391  * The O macro simplies the creation of new classes
    392  * inheriting from the base class removing the need
    393  * to create macros to access the methods
    394  */
    395 #define O(obj, method) (obj)->f->method(obj)
    396 
    397 /**
    398  * o calls an object method with parameters
    399  * o(obj,stringify,2) calls the stringify method
    400  * in the obj smallJson object
    401  * The o macro simplies the creation of new classes
    402  * inheriting from the base class removing the need
    403  * to create macros to access the methods
    404  * Note: With GCC, the preprocessor eliminates the comma in
    405  *  , ## __VA_ARGS__
    406  * if __VA_ARGS__ is empty. (https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html)
    407  */
    408 #define o(obj, method, ...) (obj)->f->method(obj, ## __VA_ARGS__)
    409 
    410 /**
    411  * iterators
    412  * for arrays or dictionaries
    413  *
    414  * use iterIndex method to get current index
    415  * use iterKey method to get current key
    416  *
    417  * index and step can be negative (python index)
    418  *
    419  * Example:
    420  * iter(array, e) {
    421  *   logVarG(e);
    422  * }
    423  */
    424 #define iter(obj, element)\
    425   for (baset *element = (obj)->f->iterStart(obj); element ; element = (obj)->f->iterNext(obj))
    426 
    427 #define iterLast(obj, element)\
    428   for (baset *element = (obj)->f->iterStartLast(obj); element ; element = (obj)->f->iterNext(obj))
    429 
    430 #define iterFrom(obj, index, element)\
    431   for (baset *element = (obj)->f->iterStartFrom(obj, index); element ; element = (obj)->f->iterNext(obj))
    432 
    433 #define iterFromStep(obj, index, step, element)\
    434   for (baset *element = (obj)->f->iterStartFromStep(obj, index, step); element ; element = (obj)->f->iterNext(obj))
    435 
    436 /**
    437  * iterators returning the specified type
    438  * type must be either baset*, or small object pointer
    439  */
    440 #define iterType(type, obj, element)\
    441   for (type element = (type)(obj)->f->iterStart(obj); element ; element = (type)(obj)->f->iterNext(obj))
    442 
    443 #define iterTypeLast(type, obj, element)\
    444   for (type element = (type)(obj)->f->iterStartLast(obj); element ; element = (type)(obj)->f->iterNext(obj))
    445 
    446 #define iterTypeFrom(type, obj, index, element)\
    447   for (type element = (type)(obj)->f->iterStartFrom(obj, index); element ; element = (type)(obj)->f->iterNext(obj))
    448 
    449 #define iterTypeFromStep(type, obj, index, step, element)\
    450   for (type element = (type)(obj)->f->iterStartFromStep(obj, index, step); element ; element = (type)(obj)->f->iterNext(obj))
    451 
    452 /**
    453  * iterators on dictionary keys
    454  *
    455  * use iterElement to get the current element
    456  */
    457 #define iterK(obj, key)\
    458   for (const char *key = (obj)->f->iterStartKey(obj); key ; key = (obj)->f->iterNextKey(obj))
    459 
    460 /**
    461  * reallocate the container without freeing the sObject inside
    462  */
    463 #define rallocG(obj, value) do {\
    464   finishO(obj);\
    465   (obj) = allocG(value);\
    466 } while(0)
    467 
    468 
    469 /**
    470  * get value in smallBool, smallBytes, smallDouble, smallInt, smallString
    471  *
    472  * use setValG or setFromG to set a value
    473  */
    474 #define getValO(self) (self)->f->get(self)
    475 #define getValG getValO
    476 
    477 #define setValO setFromO
    478 #define setValG setFromG
    479 
    480 /**
    481  * get pointer to value in smallBool, smallDouble, smallInt
    482  */
    483 #define getPO(self) (self)->f->getP(self)
    484 #define getPG getPO
    485 
    486 
    487 #define setTopO(self, value) (self)->f->setTop(self, value)
    488 #define setFromO(self, value) (self)->f->set(self, value)
    489 #define setFromG setTopG
    490 #define setTopG(self, value) _Generic((self), \
    491   smallArrayt*: _Generic(value, \
    492     char **: setFromSmallArrayG, \
    493     const char **: setFromCSmallArrayG, \
    494     default: setFromSmallArrayG), \
    495   smallBoolt*: _Generic((value), \
    496     bool: setSmallBoolG, \
    497     double: setDoubleSmallBoolG, \
    498     int64_t: setInt64SmallBoolG, \
    499     int32_t: setInt32SmallBoolG, \
    500     uint32_t: setUint32SmallBoolG, \
    501     uint64_t: setUint64SmallBoolG, \
    502     char*: setSSmallBoolG, \
    503     const char*: setSSmallBoolG, \
    504     smallBoolt*: setSmallBoolSmallBoolG, \
    505     smallDoublet*: setSmallDoubleSmallBoolG, \
    506     smallIntt*: setSmallIntSmallBoolG, \
    507     smallJsont*: setSmallJsonSmallBoolG, \
    508     smallStringt*: setSmallStringSmallBoolG, \
    509     default: setSmallBoolG), \
    510   smallContainert*: setSmallContainerG, \
    511   smallDoublet*: _Generic((value), \
    512     bool: setBoolSmallDoubleG, \
    513     double: setSmallDoubleG, \
    514     int64_t: setInt64SmallDoubleG, \
    515     int32_t: setInt32SmallDoubleG, \
    516     uint32_t: setUint32SmallDoubleG, \
    517     uint64_t: setUint64SmallDoubleG, \
    518     char*: setSSmallDoubleG, \
    519     const char*: setSSmallDoubleG, \
    520     smallBoolt*: setSmallBoolSmallDoubleG, \
    521     smallDoublet*: setSmallDoubleSmallDoubleG, \
    522     smallIntt*: setSmallIntSmallDoubleG, \
    523     smallJsont*: setSmallJsonSmallDoubleG,\
    524     smallStringt*: setSmallStringSmallDoubleG, \
    525     default: setBoolSmallDoubleG), \
    526   smallIntt*: _Generic((value), \
    527     bool: setBoolSmallIntG, \
    528     double: setDoubleSmallIntG, \
    529     int64_t: setSmallIntG, \
    530     int32_t: setInt32SmallIntG, \
    531     uint32_t: setUint32SmallIntG, \
    532     uint64_t: setUint64SmallIntG, \
    533     char*: setSSmallIntG, \
    534     const char*: setSSmallIntG, \
    535     smallBoolt*: setSmallBoolSmallIntG, \
    536     smallDoublet*: setSmallDoubleSmallIntG, \
    537     smallIntt*: setSmallIntSmallIntG, \
    538     smallJsont*: setSmallJsonSmallIntG, \
    539     smallStringt*: setSmallStringSmallIntG, \
    540     default: setBoolSmallIntG), \
    541   smallStringt*: _Generic((value), \
    542     bool: setBoolSmallStringG, \
    543     double: setDoubleSmallStringG, \
    544     int64_t: setInt64SmallStringG, \
    545     int32_t: setInt32SmallStringG, \
    546     uint32_t: setUint32SmallStringG, \
    547     uint64_t: setUint64SmallStringG, \
    548     char*: setSmallStringG, \
    549     char: setCharSmallStringG, \
    550     const char*: setSmallStringG, \
    551     smallArrayt*: setSmallArraySmallStringG, \
    552     smallBoolt*: setSmallBoolSmallStringG, \
    553     smallDictt*: setFromSmallDictSmallStringG, \
    554     smallDoublet*: setSmallDoubleSmallStringG, \
    555     smallIntt*: setSmallIntSmallStringG, \
    556     smallJsont*: setSmallJsonSmallStringG, \
    557     smallStringt*: setSmallStringSmallStringG, \
    558     default: setBoolSmallStringG), \
    559   smallJsont*: _Generic((value), \
    560     baset*: setTopSmallJsonG, \
    561     bool: setTopBoolSmallJsonG, \
    562     double: setTopDoubleSmallJsonG, \
    563     int64_t: setTopIntSmallJsonG, \
    564     int32_t: setTopIntSmallJsonG, \
    565     uint64_t: setTopIntSmallJsonG, \
    566     uint32_t: setTopIntSmallJsonG, \
    567     char*: setTopStringSmallJsonG, \
    568     char: setTopCharSmallJsonG, \
    569     const char*: setTopStringSmallJsonG, \
    570     char **: setTopArraycSmallJsonG, \
    571     const char **: setTopCArraycSmallJsonG, \
    572     smallArrayt*: setTopArraySmallJsonG, \
    573     smallBoolt*: setTopSmallBoolSmallJsonG, \
    574     smallDictt*: setTopDictSmallJsonG, \
    575     smallDoublet*: setTopSmallDoubleSmallJsonG, \
    576     smallIntt*: setTopSmallIntSmallJsonG, \
    577     smallJsont*: setTopSmallJsonSmallJsonG, \
    578     smallStringt*: setTopSmallStringSmallJsonG, \
    579     default: setTopSmallJsonG) \
    580   )(self, value)
    581 
    582 
    583 #define setTopNFreeO(self, value) (self)->f->setTopNFree(self, value)
    584 #define setTopNFreeG(self, value) _Generic((self), \
    585   smallJsont*: _Generic((value), \
    586     baset*: setTopNFreeSmallJsonG, \
    587     bool: setTopNFreeBoolSmallJsonG, \
    588     double: setTopNFreeDoubleSmallJsonG, \
    589     int64_t: setTopNFreeIntSmallJsonG, \
    590     char*: setTopNFreeStringSmallJsonG, \
    591     smallDictt*: setTopNFreeDictSmallJsonG, \
    592     smallArrayt*: setTopNFreeArraySmallJsonG, \
    593     char **: setTopNFreeArraycSmallJsonG, \
    594     smallBoolt*: setTopNFreeSmallBoolSmallJsonG, \
    595     smallDoublet*: setTopNFreeSmallDoubleSmallJsonG, \
    596     smallIntt*: setTopNFreeSmallIntSmallJsonG, \
    597     smallJsont*: setTopNFreeSmallJsonSmallJsonG, \
    598     smallStringt*: setTopNFreeSmallStringSmallJsonG) \
    599   )(self, value)
    600 
    601 #define getTopO(self) (self)->f->getTop(self)
    602 #define getTopG(self, returnType) _Generic((self), \
    603   smallJsont*: _Generic((returnType), \
    604     baset*: getTopSmallJsonG, \
    605     undefinedt*: getTopUndefinedSmallJsonG, \
    606     bool: getTopBoolSmallJsonG, \
    607     bool*: getTopBoolPSmallJsonG, \
    608     double: getTopDoubleSmallJsonG, \
    609     double*: getTopDoublePSmallJsonG, \
    610     int64_t: getTopIntSmallJsonG, \
    611     int64_t*: getTopIntPSmallJsonG, \
    612     int32_t: getTopInt32SmallJsonG, \
    613     int32_t*: getTopInt32PSmallJsonG, \
    614     uint64_t: getTopUintSmallJsonG, \
    615     uint64_t*: getTopUintPSmallJsonG, \
    616     uint32_t: getTopUint32SmallJsonG, \
    617     uint32_t*: getTopUint32PSmallJsonG, \
    618     char*: getTopSSmallJsonG, \
    619     smallDictt*: getTopDictSmallJsonG, \
    620     smallArrayt*: getTopArraySmallJsonG, \
    621     smallBoolt*: getTopSmallBoolSmallJsonG, \
    622     smallDoublet*: getTopSmallDoubleSmallJsonG, \
    623     smallIntt*: getTopSmallIntSmallJsonG, \
    624     smallStringt*: getTopSmallStringSmallJsonG) \
    625   )(self, returnType)
    626 
    627 /**
    628  * Note: some generics support int: type to handle char literals ('0') which have type int
    629  */
    630 
    631 #define pushO(self, value) (self)->f->push(self, value)
    632 #define pushG(self, value) _Generic((self), \
    633   smallArrayt*: _Generic((value), \
    634     baset*: pushSmallArrayG, \
    635     bool: pushBoolSmallArrayG, \
    636     double: pushDoubleSmallArrayG, \
    637     int64_t: pushIntSmallArrayG, \
    638     int32_t: pushIntSmallArrayG, \
    639     uint32_t: pushIntSmallArrayG, \
    640     uint64_t: pushIntSmallArrayG, \
    641     char*: pushSSmallArrayG, \
    642     char: pushCharSmallArrayG, \
    643     const char*: pushSSmallArrayG, \
    644     smallDictt*: pushDictSmallArrayG, \
    645     smallArrayt*: pushArraySmallArrayG, \
    646     char**: pushArraycSmallArrayG, \
    647     const char**: pushCArraycSmallArrayG, \
    648     smallBoolt*: pushSmallBoolSmallArrayG, \
    649     smallBytest*: pushSmallBytesSmallArrayG, \
    650     smallDoublet*: pushSmallDoubleSmallArrayG, \
    651     smallIntt*: pushSmallIntSmallArrayG, \
    652     smallJsont*: pushSmallJsonSmallArrayG, \
    653     smallStringt*: pushSmallStringSmallArrayG, \
    654     smallContainert*: pushSmallContainerSmallArrayG, \
    655     undefinedt*: pushUndefinedSmallArrayG, \
    656     default: pushVoidSmallArrayG), \
    657   smallJsont*: _Generic((value), \
    658     baset*: pushSmallJsonG, \
    659     bool: pushBoolSmallJsonG, \
    660     double: pushDoubleSmallJsonG, \
    661     int64_t: pushIntSmallJsonG, \
    662     int32_t: pushIntSmallJsonG, \
    663     uint32_t: pushIntSmallJsonG, \
    664     uint64_t: pushIntSmallJsonG, \
    665     char*: pushSSmallJsonG, \
    666     char: pushCharSmallJsonG, \
    667     const char*: pushSSmallJsonG, \
    668     smallDictt*: pushDictSmallJsonG, \
    669     smallArrayt*: pushArraySmallJsonG, \
    670     char **: pushArraycSmallJsonG, \
    671     const char **: pushCArraycSmallJsonG, \
    672     smallBoolt*: pushSmallBoolSmallJsonG, \
    673     smallBytest*: pushSmallBytesSmallJsonG, \
    674     smallDoublet*: pushSmallDoubleSmallJsonG, \
    675     smallIntt*: pushSmallIntSmallJsonG, \
    676     smallJsont*: pushSmallJsonSmallJsonG, \
    677     smallStringt*: pushSmallStringSmallJsonG, \
    678     smallContainert*: pushSmallContainerSmallJsonG, \
    679     undefinedt*: pushUndefinedSmallJsonG, \
    680     default: pushVoidSmallJsonG), \
    681   smallBytest*: pushSmallBytesG, \
    682   smallStringt*: _Generic((value), \
    683     smallStringt*: appendSmallStringG, \
    684     smallJsont*: appendSmallJsonSmallStringG, \
    685     char *: appendSSmallStringG, \
    686     const char *: appendSSmallStringG, \
    687     char: appendCharSmallStringG, \
    688     int: appendCharSmallStringG, \
    689     default: appendSSmallStringG), \
    690   char **: _Generic(value, \
    691     char *: iAppendS, \
    692     const char *: iAppendS, \
    693     char: iAppendCharS, \
    694     int: iAppendCharS, \
    695     default: iAppendS \
    696     ), \
    697   char ***: _Generic(value, \
    698     char *: listPushS, \
    699     const char *: listPushS, \
    700     char: listPushCharS, \
    701     int: listPushCharS, \
    702     default: listPushS \
    703     ), \
    704   btt: _Generic(value, \
    705     const char *: pushB, \
    706     char *:       pushB, \
    707     const btt:     pushBB, \
    708     btt:           pushBB, \
    709     const btt*:    pushBPB, \
    710     btt*:          pushBPB, \
    711     default:      pushB \
    712   ), \
    713   btt*: _Generic(value, \
    714     const char *: bPushB, \
    715     char *:       bPushB, \
    716     const btt:     bPushBB, \
    717     btt:           bPushBB, \
    718     const btt*:    bPushBPB, \
    719     btt*:          bPushBPB, \
    720     default:      bPushB \
    721   ), \
    722   const btt*: _Generic(value, \
    723     const char *: pushPB, \
    724     char *:       pushPB, \
    725     const btt:     pushPBB, \
    726     btt:           pushPBB, \
    727     const btt*:    pushPBPB, \
    728     btt*:          pushPBPB, \
    729     default:      pushPB) \
    730   )(self, value)
    731 
    732 #define pushNFreeO(self, value) (self)->f->pushNFree(self, value)
    733 #define pushNFreeG(self, value) _Generic((self), \
    734   smallArrayt*: _Generic((value), \
    735     baset*: pushNFreeSmallArrayG, \
    736     bool: pushBoolSmallArrayG, \
    737     double: pushDoubleSmallArrayG, \
    738     int64_t: pushIntSmallArrayG, \
    739     int32_t: pushIntSmallArrayG, \
    740     uint32_t: pushIntSmallArrayG, \
    741     uint64_t: pushIntSmallArrayG, \
    742     char*: pushNFreeSSmallArrayG, \
    743     char: pushCharSmallArrayG, \
    744     smallDictt*: pushNFreeDictSmallArrayG, \
    745     smallArrayt*: pushNFreeArraySmallArrayG, \
    746     char**: pushNFreeArraycSmallArrayG, \
    747     smallBoolt*: pushNFreeSmallBoolSmallArrayG, \
    748     smallBytest*: pushNFreeSmallBytesSmallArrayG, \
    749     smallDoublet*: pushNFreeSmallDoubleSmallArrayG, \
    750     smallIntt*: pushNFreeSmallIntSmallArrayG, \
    751     smallJsont*: pushNFreeSmallJsonSmallArrayG, \
    752     smallStringt*: pushNFreeSmallStringSmallArrayG, \
    753     smallContainert*: pushNFreeSmallContainerSmallArrayG, \
    754     undefinedt*: pushNFreeUndefinedSmallArrayG, \
    755     default: pushVoidSmallArrayG), \
    756   smallJsont*: _Generic((value), \
    757     baset*: pushNFreeSmallJsonG, \
    758     bool: pushBoolSmallJsonG, \
    759     double: pushDoubleSmallJsonG, \
    760     int64_t: pushIntSmallJsonG, \
    761     int32_t: pushIntSmallJsonG, \
    762     uint32_t: pushIntSmallJsonG, \
    763     uint64_t: pushIntSmallJsonG, \
    764     char*: pushNFreeSSmallJsonG, \
    765     char: pushCharSmallJsonG, \
    766     smallDictt*: pushNFreeDictSmallJsonG, \
    767     smallArrayt*: pushNFreeArraySmallJsonG, \
    768     char **: pushNFreeArraycSmallJsonG, \
    769     smallBoolt*: pushNFreeSmallBoolSmallJsonG, \
    770     smallBytest*: pushNFreeSmallBytesSmallJsonG, \
    771     smallDoublet*: pushNFreeSmallDoubleSmallJsonG, \
    772     smallIntt*: pushNFreeSmallIntSmallJsonG, \
    773     smallJsont*: pushNFreeSmallJsonSmallJsonG, \
    774     smallStringt*: pushNFreeSmallStringSmallJsonG, \
    775     smallContainert*: pushNFreeSmallContainerSmallJsonG, \
    776     undefinedt*: pushNFreeUndefinedSmallJsonG, \
    777     default: pushVoidSmallJsonG), \
    778   smallBytest*: pushSmallBytesG, \
    779   smallStringt*: _Generic((value), \
    780     smallStringt*: appendNSmashSmallStringG, \
    781     smallJsont*: appendNSmashSmallJsonSmallStringG, \
    782     char *: appendNSmashSSmallStringG, \
    783     char: appendCharSmallStringG, \
    784     int: appendCharSmallStringG, \
    785     default: appendNSmashSSmallStringG), \
    786   char **: _Generic(value, \
    787     char *: iAppendNFreeS, \
    788     char: iAppendCharS, \
    789     int: iAppendCharS, \
    790     default: iAppendNFreeS \
    791     ), \
    792   char ***: _Generic(value, \
    793     char *: iListPushS, \
    794     char: listPushCharS, \
    795     int: listPushCharS, \
    796     default: iListPushS \
    797     ) \
    798   )(self, value)
    799 
    800 #define setO(self, key, value) (self)->f->set(self, key, value)
    801 #define setAtO(self, key, value) (self)->f->setAt(self, key, value)
    802 #define setG(self, key, value) _Generic((self), \
    803   smallDictt*: _Generic(key, \
    804     char *: _Generic((value), \
    805       baset*: setSmallDictG, \
    806       bool: setBoolSmallDictG, \
    807       double: setDoubleSmallDictG, \
    808       int64_t: setIntSmallDictG, \
    809       int32_t: setIntSmallDictG, \
    810       uint32_t: setIntSmallDictG, \
    811       uint64_t: setIntSmallDictG, \
    812       char*: setSSmallDictG, \
    813       const char*: setSSmallDictG, \
    814       char: setCharSmallDictG, \
    815       smallDictt*: setDictSmallDictG, \
    816       smallArrayt*: setArraySmallDictG, \
    817       char **: setArraycSmallDictG, \
    818       const char **: setCArraycSmallDictG, \
    819       smallBoolt*: setSmallBoolSmallDictG, \
    820       smallBytest*: setSmallBytesSmallDictG, \
    821       smallDoublet*: setSmallDoubleSmallDictG, \
    822       smallIntt*: setSmallIntSmallDictG, \
    823       smallJsont*: setSmallJsonSmallDictG, \
    824       smallStringt*: setSmallStringSmallDictG, \
    825       smallContainert*: setSmallContainerSmallDictG, \
    826       undefinedt*: setUndefinedSmallDictG, \
    827       default: setVoidSmallDictG), \
    828     const char *: _Generic((value), \
    829       baset*: setSmallDictG, \
    830       bool: setBoolSmallDictG, \
    831       double: setDoubleSmallDictG, \
    832       int64_t: setIntSmallDictG, \
    833       int32_t: setIntSmallDictG, \
    834       uint32_t: setIntSmallDictG, \
    835       uint64_t: setIntSmallDictG, \
    836       char*: setSSmallDictG, \
    837       const char*: setSSmallDictG, \
    838       char: setCharSmallDictG, \
    839       smallDictt*: setDictSmallDictG, \
    840       smallArrayt*: setArraySmallDictG, \
    841       char **: setArraycSmallDictG, \
    842       const char **: setCArraycSmallDictG, \
    843       smallBoolt*: setSmallBoolSmallDictG, \
    844       smallBytest*: setSmallBytesSmallDictG, \
    845       smallDoublet*: setSmallDoubleSmallDictG, \
    846       smallIntt*: setSmallIntSmallDictG, \
    847       smallJsont*: setSmallJsonSmallDictG, \
    848       smallStringt*: setSmallStringSmallDictG, \
    849       smallContainert*: setSmallContainerSmallDictG, \
    850       undefinedt*: setUndefinedSmallDictG, \
    851       default: setVoidSmallDictG), \
    852     char: _Generic((value), \
    853       baset*: setKCharSmallDictG, \
    854       bool: setBoolKCharSmallDictG, \
    855       double: setDoubleKCharSmallDictG, \
    856       int64_t: setIntKCharSmallDictG, \
    857       int32_t: setIntKCharSmallDictG, \
    858       uint32_t: setIntKCharSmallDictG, \
    859       uint64_t: setIntKCharSmallDictG, \
    860       char*: setSKCharSmallDictG, \
    861       const char*: setSKCharSmallDictG, \
    862       char: setCharKCharSmallDictG, \
    863       smallDictt*: setDictKCharSmallDictG, \
    864       smallArrayt*: setArrayKCharSmallDictG, \
    865       char **: setArraycKCharSmallDictG, \
    866       const char **: setCArraycKCharSmallDictG, \
    867       smallBoolt*: setSmallBoolKCharSmallDictG, \
    868       smallBytest*: setSmallBytesKCharSmallDictG, \
    869       smallDoublet*: setSmallDoubleKCharSmallDictG, \
    870       smallIntt*: setSmallIntKCharSmallDictG, \
    871       smallJsont*: setSmallJsonKCharSmallDictG, \
    872       smallStringt*: setSmallStringKCharSmallDictG, \
    873       smallContainert*: setSmallContainerKCharSmallDictG, \
    874       undefinedt*: setUndefinedKCharSmallDictG, \
    875       default: setVoidKCharSmallDictG), \
    876     int: _Generic((value), \
    877       baset*: setKCharSmallDictG, \
    878       bool: setBoolKCharSmallDictG, \
    879       double: setDoubleKCharSmallDictG, \
    880       int64_t: setIntKCharSmallDictG, \
    881       int32_t: setIntKCharSmallDictG, \
    882       uint32_t: setIntKCharSmallDictG, \
    883       uint64_t: setIntKCharSmallDictG, \
    884       char*: setSKCharSmallDictG, \
    885       const char*: setSKCharSmallDictG, \
    886       char: setCharKCharSmallDictG, \
    887       smallDictt*: setDictKCharSmallDictG, \
    888       smallArrayt*: setArrayKCharSmallDictG, \
    889       char **: setArraycKCharSmallDictG, \
    890       const char **: setCArraycKCharSmallDictG, \
    891       smallBoolt*: setSmallBoolKCharSmallDictG, \
    892       smallBytest*: setSmallBytesKCharSmallDictG, \
    893       smallDoublet*: setSmallDoubleKCharSmallDictG, \
    894       smallIntt*: setSmallIntKCharSmallDictG, \
    895       smallJsont*: setSmallJsonKCharSmallDictG, \
    896       smallStringt*: setSmallStringKCharSmallDictG, \
    897       smallContainert*: setSmallContainerKCharSmallDictG, \
    898       undefinedt*: setUndefinedKCharSmallDictG, \
    899       default: setVoidKCharSmallDictG), \
    900     default: setVoidSmallDictG \
    901     ), \
    902   smallArrayt*: _Generic((value), \
    903     baset*: setAtSmallArrayG, \
    904     bool: setAtBoolSmallArrayG, \
    905     double: setAtDoubleSmallArrayG, \
    906     int64_t: setAtIntSmallArrayG, \
    907     int32_t: setAtIntSmallArrayG, \
    908     uint32_t: setAtIntSmallArrayG, \
    909     uint64_t: setAtIntSmallArrayG, \
    910     char*: setAtSSmallArrayG, \
    911     char: setAtCharSmallArrayG, \
    912     const char*: setAtSSmallArrayG, \
    913     smallDictt*: setAtDictSmallArrayG, \
    914     smallArrayt*: setAtArraySmallArrayG, \
    915     char **: setAtArraycSmallArrayG, \
    916     const char **: setAtCArraycSmallArrayG, \
    917     smallBoolt*: setAtSmallBoolSmallArrayG, \
    918     smallBytest*: setAtSmallBytesSmallArrayG, \
    919     smallDoublet*: setAtSmallDoubleSmallArrayG, \
    920     smallIntt*: setAtSmallIntSmallArrayG, \
    921     smallJsont*: setAtSmallJsonSmallArrayG, \
    922     smallStringt*: setAtSmallStringSmallArrayG, \
    923     smallContainert*: setAtSmallContainerSmallArrayG, \
    924     undefinedt*: setAtUndefinedSmallArrayG, \
    925     default: setAtVoidSmallArrayG), \
    926   smallBytest*: setSmallBytesG,\
    927   smallJsont*:  _Generic(key, \
    928     char *: _Generic((value), \
    929       baset*: setSmallJsonG, \
    930       bool: setBoolSmallJsonG, \
    931       double: setDoubleSmallJsonG, \
    932       int64_t: setIntSmallJsonG, \
    933       int32_t: setIntSmallJsonG, \
    934       uint32_t: setIntSmallJsonG, \
    935       uint64_t: setIntSmallJsonG, \
    936       char*: setSSmallJsonG, \
    937       const char*: setSSmallJsonG, \
    938       char: setCharSmallJsonG, \
    939       smallDictt*: setDictSmallJsonG, \
    940       smallArrayt*: setArraySmallJsonG, \
    941       char **: setArraycSmallJsonG, \
    942       const char **: setCArraycSmallJsonG, \
    943       smallBoolt*: setSmallBoolSmallJsonG, \
    944       smallBytest*: setSmallBytesSmallJsonG, \
    945       smallDoublet*: setSmallDoubleSmallJsonG, \
    946       smallIntt*: setSmallIntSmallJsonG, \
    947       smallJsont*: setSmallJsonSmallJsonG, \
    948       smallStringt*: setSmallStringSmallJsonG, \
    949       smallContainert*: setSmallContainerSmallJsonG, \
    950       undefinedt*: setUndefinedSmallJsonG, \
    951       default: setVoidSmallJsonG), \
    952     const char *: _Generic((value), \
    953       baset*: setSmallJsonG, \
    954       bool: setBoolSmallJsonG, \
    955       double: setDoubleSmallJsonG, \
    956       int64_t: setIntSmallJsonG, \
    957       int32_t: setIntSmallJsonG, \
    958       uint32_t: setIntSmallJsonG, \
    959       uint64_t: setIntSmallJsonG, \
    960       char*: setSSmallJsonG, \
    961       const char*: setSSmallJsonG, \
    962       char: setCharSmallJsonG, \
    963       smallDictt*: setDictSmallJsonG, \
    964       smallArrayt*: setArraySmallJsonG, \
    965       char **: setArraycSmallJsonG, \
    966       const char **: setCArraycSmallJsonG, \
    967       smallBoolt*: setSmallBoolSmallJsonG, \
    968       smallBytest*: setSmallBytesSmallJsonG, \
    969       smallDoublet*: setSmallDoubleSmallJsonG, \
    970       smallIntt*: setSmallIntSmallJsonG, \
    971       smallJsont*: setSmallJsonSmallJsonG, \
    972       smallStringt*: setSmallStringSmallJsonG, \
    973       smallContainert*: setSmallContainerSmallJsonG, \
    974       undefinedt*: setUndefinedSmallJsonG, \
    975       default: setVoidSmallJsonG), \
    976     int64_t: _Generic((value), \
    977       baset*: setAtSmallJsonG, \
    978       bool: setAtBoolSmallJsonG, \
    979       double: setAtDoubleSmallJsonG, \
    980       int64_t: setAtIntSmallJsonG, \
    981       int32_t: setAtIntSmallJsonG, \
    982       uint32_t: setAtIntSmallJsonG, \
    983       uint64_t: setAtIntSmallJsonG, \
    984       char*: setAtSSmallJsonG, \
    985       const char*: setAtSSmallJsonG, \
    986       char: setAtCharSmallJsonG, \
    987       smallDictt*: setAtDictSmallJsonG, \
    988       smallArrayt*: setAtArraySmallJsonG, \
    989       char **: setAtArraycSmallJsonG, \
    990       const char **: setAtCArraycSmallJsonG, \
    991       smallBoolt*: setAtSmallBoolSmallJsonG, \
    992       smallBytest*: setAtSmallBytesSmallJsonG, \
    993       smallDoublet*: setAtSmallDoubleSmallJsonG, \
    994       smallIntt*: setAtSmallIntSmallJsonG, \
    995       smallJsont*: setAtSmallJsonSmallJsonG, \
    996       smallStringt*: setAtSmallStringSmallJsonG, \
    997       smallContainert*: setAtSmallContainerSmallJsonG, \
    998       undefinedt*: setAtUndefinedSmallJsonG, \
    999       default: setAtVoidSmallJsonG), \
   1000     int32_t: _Generic((value), \
   1001       baset*: setAtSmallJsonG, \
   1002       bool: setAtBoolSmallJsonG, \
   1003       double: setAtDoubleSmallJsonG, \
   1004       int64_t: setAtIntSmallJsonG, \
   1005       int32_t: setAtIntSmallJsonG, \
   1006       uint32_t: setAtIntSmallJsonG, \
   1007       uint64_t: setAtIntSmallJsonG, \
   1008       char*: setAtSSmallJsonG, \
   1009       const char*: setAtSSmallJsonG, \
   1010       char: setAtCharSmallJsonG, \
   1011       smallDictt*: setAtDictSmallJsonG, \
   1012       smallArrayt*: setAtArraySmallJsonG, \
   1013       char **: setAtArraycSmallJsonG, \
   1014       const char **: setAtCArraycSmallJsonG, \
   1015       smallBoolt*: setAtSmallBoolSmallJsonG, \
   1016       smallBytest*: setAtSmallBytesSmallJsonG, \
   1017       smallDoublet*: setAtSmallDoubleSmallJsonG, \
   1018       smallIntt*: setAtSmallIntSmallJsonG, \
   1019       smallJsont*: setAtSmallJsonSmallJsonG, \
   1020       smallStringt*: setAtSmallStringSmallJsonG, \
   1021       smallContainert*: setAtSmallContainerSmallJsonG, \
   1022       undefinedt*: setAtUndefinedSmallJsonG, \
   1023       default: setAtVoidSmallJsonG), \
   1024     int16_t: _Generic((value), \
   1025       baset*: setAtSmallJsonG, \
   1026       bool: setAtBoolSmallJsonG, \
   1027       double: setAtDoubleSmallJsonG, \
   1028       int64_t: setAtIntSmallJsonG, \
   1029       int32_t: setAtIntSmallJsonG, \
   1030       uint32_t: setAtIntSmallJsonG, \
   1031       uint64_t: setAtIntSmallJsonG, \
   1032       char*: setAtSSmallJsonG, \
   1033       const char*: setAtSSmallJsonG, \
   1034       char: setAtCharSmallJsonG, \
   1035       smallDictt*: setAtDictSmallJsonG, \
   1036       smallArrayt*: setAtArraySmallJsonG, \
   1037       char **: setAtArraycSmallJsonG, \
   1038       const char **: setAtCArraycSmallJsonG, \
   1039       smallBoolt*: setAtSmallBoolSmallJsonG, \
   1040       smallBytest*: setAtSmallBytesSmallJsonG, \
   1041       smallDoublet*: setAtSmallDoubleSmallJsonG, \
   1042       smallIntt*: setAtSmallIntSmallJsonG, \
   1043       smallJsont*: setAtSmallJsonSmallJsonG, \
   1044       smallStringt*: setAtSmallStringSmallJsonG, \
   1045       smallContainert*: setAtSmallContainerSmallJsonG, \
   1046       undefinedt*: setAtUndefinedSmallJsonG, \
   1047       default: setAtVoidSmallJsonG), \
   1048     int8_t: _Generic((value), \
   1049       baset*: setAtSmallJsonG, \
   1050       bool: setAtBoolSmallJsonG, \
   1051       double: setAtDoubleSmallJsonG, \
   1052       int64_t: setAtIntSmallJsonG, \
   1053       int32_t: setAtIntSmallJsonG, \
   1054       uint32_t: setAtIntSmallJsonG, \
   1055       uint64_t: setAtIntSmallJsonG, \
   1056       char*: setAtSSmallJsonG, \
   1057       const char*: setAtSSmallJsonG, \
   1058       char: setAtCharSmallJsonG, \
   1059       smallDictt*: setAtDictSmallJsonG, \
   1060       smallArrayt*: setAtArraySmallJsonG, \
   1061       char **: setAtArraycSmallJsonG, \
   1062       const char **: setAtCArraycSmallJsonG, \
   1063       smallBoolt*: setAtSmallBoolSmallJsonG, \
   1064       smallBytest*: setAtSmallBytesSmallJsonG, \
   1065       smallDoublet*: setAtSmallDoubleSmallJsonG, \
   1066       smallIntt*: setAtSmallIntSmallJsonG, \
   1067       smallJsont*: setAtSmallJsonSmallJsonG, \
   1068       smallStringt*: setAtSmallStringSmallJsonG, \
   1069       smallContainert*: setAtSmallContainerSmallJsonG, \
   1070       undefinedt*: setAtUndefinedSmallJsonG, \
   1071       default: setAtVoidSmallJsonG), \
   1072     char: _Generic((value), \
   1073       baset*: setAtSmallJsonG, \
   1074       bool: setAtBoolSmallJsonG, \
   1075       double: setAtDoubleSmallJsonG, \
   1076       int64_t: setAtIntSmallJsonG, \
   1077       int32_t: setAtIntSmallJsonG, \
   1078       uint32_t: setAtIntSmallJsonG, \
   1079       uint64_t: setAtIntSmallJsonG, \
   1080       char*: setAtSSmallJsonG, \
   1081       const char*: setAtSSmallJsonG, \
   1082       char: setAtCharSmallJsonG, \
   1083       smallDictt*: setAtDictSmallJsonG, \
   1084       smallArrayt*: setAtArraySmallJsonG, \
   1085       char **: setAtArraycSmallJsonG, \
   1086       const char **: setAtCArraycSmallJsonG, \
   1087       smallBoolt*: setAtSmallBoolSmallJsonG, \
   1088       smallBytest*: setAtSmallBytesSmallJsonG, \
   1089       smallDoublet*: setAtSmallDoubleSmallJsonG, \
   1090       smallIntt*: setAtSmallIntSmallJsonG, \
   1091       smallJsont*: setAtSmallJsonSmallJsonG, \
   1092       smallStringt*: setAtSmallStringSmallJsonG, \
   1093       smallContainert*: setAtSmallContainerSmallJsonG, \
   1094       undefinedt*: setAtUndefinedSmallJsonG, \
   1095       default: setAtVoidSmallJsonG), \
   1096     uint64_t: _Generic((value), \
   1097       baset*: setAtSmallJsonG, \
   1098       bool: setAtBoolSmallJsonG, \
   1099       double: setAtDoubleSmallJsonG, \
   1100       int64_t: setAtIntSmallJsonG, \
   1101       int32_t: setAtIntSmallJsonG, \
   1102       uint32_t: setAtIntSmallJsonG, \
   1103       uint64_t: setAtIntSmallJsonG, \
   1104       char*: setAtSSmallJsonG, \
   1105       const char*: setAtSSmallJsonG, \
   1106       char: setAtCharSmallJsonG, \
   1107       smallDictt*: setAtDictSmallJsonG, \
   1108       smallArrayt*: setAtArraySmallJsonG, \
   1109       char **: setAtArraycSmallJsonG, \
   1110       const char **: setAtCArraycSmallJsonG, \
   1111       smallBoolt*: setAtSmallBoolSmallJsonG, \
   1112       smallBytest*: setAtSmallBytesSmallJsonG, \
   1113       smallDoublet*: setAtSmallDoubleSmallJsonG, \
   1114       smallIntt*: setAtSmallIntSmallJsonG, \
   1115       smallJsont*: setAtSmallJsonSmallJsonG, \
   1116       smallStringt*: setAtSmallStringSmallJsonG, \
   1117       smallContainert*: setAtSmallContainerSmallJsonG, \
   1118       undefinedt*: setAtUndefinedSmallJsonG, \
   1119       default: setAtVoidSmallJsonG), \
   1120     uint32_t: _Generic((value), \
   1121       baset*: setAtSmallJsonG, \
   1122       bool: setAtBoolSmallJsonG, \
   1123       double: setAtDoubleSmallJsonG, \
   1124       int64_t: setAtIntSmallJsonG, \
   1125       int32_t: setAtIntSmallJsonG, \
   1126       uint32_t: setAtIntSmallJsonG, \
   1127       uint64_t: setAtIntSmallJsonG, \
   1128       char*: setAtSSmallJsonG, \
   1129       const char*: setAtSSmallJsonG, \
   1130       char: setAtCharSmallJsonG, \
   1131       smallDictt*: setAtDictSmallJsonG, \
   1132       smallArrayt*: setAtArraySmallJsonG, \
   1133       char **: setAtArraycSmallJsonG, \
   1134       const char **: setAtCArraycSmallJsonG, \
   1135       smallBoolt*: setAtSmallBoolSmallJsonG, \
   1136       smallBytest*: setAtSmallBytesSmallJsonG, \
   1137       smallDoublet*: setAtSmallDoubleSmallJsonG, \
   1138       smallIntt*: setAtSmallIntSmallJsonG, \
   1139       smallJsont*: setAtSmallJsonSmallJsonG, \
   1140       smallStringt*: setAtSmallStringSmallJsonG, \
   1141       smallContainert*: setAtSmallContainerSmallJsonG, \
   1142       undefinedt*: setAtUndefinedSmallJsonG, \
   1143       default: setAtVoidSmallJsonG), \
   1144     uint16_t: _Generic((value), \
   1145       baset*: setAtSmallJsonG, \
   1146       bool: setAtBoolSmallJsonG, \
   1147       double: setAtDoubleSmallJsonG, \
   1148       int64_t: setAtIntSmallJsonG, \
   1149       int32_t: setAtIntSmallJsonG, \
   1150       uint32_t: setAtIntSmallJsonG, \
   1151       uint64_t: setAtIntSmallJsonG, \
   1152       char*: setAtSSmallJsonG, \
   1153       const char*: setAtSSmallJsonG, \
   1154       char: setAtCharSmallJsonG, \
   1155       smallDictt*: setAtDictSmallJsonG, \
   1156       smallArrayt*: setAtArraySmallJsonG, \
   1157       char **: setAtArraycSmallJsonG, \
   1158       const char **: setAtCArraycSmallJsonG, \
   1159       smallBoolt*: setAtSmallBoolSmallJsonG, \
   1160       smallBytest*: setAtSmallBytesSmallJsonG, \
   1161       smallDoublet*: setAtSmallDoubleSmallJsonG, \
   1162       smallIntt*: setAtSmallIntSmallJsonG, \
   1163       smallJsont*: setAtSmallJsonSmallJsonG, \
   1164       smallStringt*: setAtSmallStringSmallJsonG, \
   1165       smallContainert*: setAtSmallContainerSmallJsonG, \
   1166       undefinedt*: setAtUndefinedSmallJsonG, \
   1167       default: setAtVoidSmallJsonG), \
   1168     uint8_t: _Generic((value), \
   1169       baset*: setAtSmallJsonG, \
   1170       bool: setAtBoolSmallJsonG, \
   1171       double: setAtDoubleSmallJsonG, \
   1172       int64_t: setAtIntSmallJsonG, \
   1173       int32_t: setAtIntSmallJsonG, \
   1174       uint32_t: setAtIntSmallJsonG, \
   1175       uint64_t: setAtIntSmallJsonG, \
   1176       char*: setAtSSmallJsonG, \
   1177       const char*: setAtSSmallJsonG, \
   1178       char: setAtCharSmallJsonG, \
   1179       smallDictt*: setAtDictSmallJsonG, \
   1180       smallArrayt*: setAtArraySmallJsonG, \
   1181       char **: setAtArraycSmallJsonG, \
   1182       const char **: setAtCArraycSmallJsonG, \
   1183       smallBoolt*: setAtSmallBoolSmallJsonG, \
   1184       smallBytest*: setAtSmallBytesSmallJsonG, \
   1185       smallDoublet*: setAtSmallDoubleSmallJsonG, \
   1186       smallIntt*: setAtSmallIntSmallJsonG, \
   1187       smallJsont*: setAtSmallJsonSmallJsonG, \
   1188       smallStringt*: setAtSmallStringSmallJsonG, \
   1189       smallContainert*: setAtSmallContainerSmallJsonG, \
   1190       undefinedt*: setAtUndefinedSmallJsonG, \
   1191       default: setAtVoidSmallJsonG), \
   1192     default: setVoidSmallJsonG \
   1193     ), \
   1194   smallStringt*: setAtSmallStringG, \
   1195   char *: setS, \
   1196   char **: _Generic(value, \
   1197     char *: iListSetS,\
   1198     char: listSetCharS,\
   1199     int: listSetCharS,\
   1200     default: iListSetS \
   1201     ) \
   1202   )(self, key, value)
   1203 
   1204 #define setIntO(self, key, value) (self)->f->setInt(self, key, value)
   1205 
   1206 #define setNFreeO(self, key, value) (self)->f->setNFree(self, key, value)
   1207 #define setAtNFreeO(self, key, value) (self)->f->setAtNFree(self, key, value)
   1208 #define setNFreeG(self, key, value) _Generic((self), \
   1209   smallDictt*: _Generic(key, \
   1210     char*: _Generic((value), \
   1211       baset*: setNFreeSmallDictG, \
   1212       bool: setBoolSmallDictG, \
   1213       double: setDoubleSmallDictG, \
   1214       int64_t: setIntSmallDictG, \
   1215       int32_t: setIntSmallDictG, \
   1216       uint32_t: setIntSmallDictG, \
   1217       uint64_t: setIntSmallDictG, \
   1218       char*: setNFreeSSmallDictG, \
   1219       smallDictt*: setNFreeDictSmallDictG, \
   1220       smallArrayt*: setNFreeArraySmallDictG, \
   1221       char **: setNFreeArraycSmallDictG, \
   1222       smallBoolt*: setNFreeSmallBoolSmallDictG, \
   1223       smallBytest*: setNFreeSmallBytesSmallDictG, \
   1224       smallDoublet*: setNFreeSmallDoubleSmallDictG, \
   1225       smallIntt*: setNFreeSmallIntSmallDictG, \
   1226       smallJsont*: setNFreeSmallJsonSmallDictG, \
   1227       smallStringt*: setNFreeSmallStringSmallDictG, \
   1228       smallContainert*: setNFreeSmallContainerSmallDictG, \
   1229       undefinedt*: setNFreeUndefinedSmallDictG, \
   1230       default: setVoidSmallDictG), \
   1231     const char*: _Generic((value), \
   1232       baset*: setNFreeSmallDictG, \
   1233       bool: setBoolSmallDictG, \
   1234       double: setDoubleSmallDictG, \
   1235       int64_t: setIntSmallDictG, \
   1236       int32_t: setIntSmallDictG, \
   1237       uint32_t: setIntSmallDictG, \
   1238       uint64_t: setIntSmallDictG, \
   1239       char*: setNFreeSSmallDictG, \
   1240       smallDictt*: setNFreeDictSmallDictG, \
   1241       smallArrayt*: setNFreeArraySmallDictG, \
   1242       char **: setNFreeArraycSmallDictG, \
   1243       smallBoolt*: setNFreeSmallBoolSmallDictG, \
   1244       smallBytest*: setNFreeSmallBytesSmallDictG, \
   1245       smallDoublet*: setNFreeSmallDoubleSmallDictG, \
   1246       smallIntt*: setNFreeSmallIntSmallDictG, \
   1247       smallJsont*: setNFreeSmallJsonSmallDictG, \
   1248       smallStringt*: setNFreeSmallStringSmallDictG, \
   1249       smallContainert*: setNFreeSmallContainerSmallDictG, \
   1250       undefinedt*: setNFreeUndefinedSmallDictG, \
   1251       default: setVoidSmallDictG), \
   1252     char: _Generic((value), \
   1253       baset*: setNFreeKCharSmallDictG, \
   1254       bool: setBoolKCharSmallDictG, \
   1255       double: setDoubleKCharSmallDictG, \
   1256       int64_t: setIntKCharSmallDictG, \
   1257       int32_t: setIntKCharSmallDictG, \
   1258       uint32_t: setIntKCharSmallDictG, \
   1259       uint64_t: setIntKCharSmallDictG, \
   1260       char*: setNFreeSKCharSmallDictG, \
   1261       smallDictt*: setNFreeDictKCharSmallDictG, \
   1262       smallArrayt*: setNFreeArrayKCharSmallDictG, \
   1263       char **: setNFreeArraycKCharSmallDictG, \
   1264       smallBoolt*: setNFreeSmallBoolKCharSmallDictG, \
   1265       smallBytest*: setNFreeSmallBytesKCharSmallDictG, \
   1266       smallDoublet*: setNFreeSmallDoubleKCharSmallDictG, \
   1267       smallIntt*: setNFreeSmallIntKCharSmallDictG, \
   1268       smallJsont*: setNFreeSmallJsonKCharSmallDictG, \
   1269       smallStringt*: setNFreeSmallStringKCharSmallDictG, \
   1270       smallContainert*: setNFreeSmallContainerKCharSmallDictG, \
   1271       undefinedt*: setNFreeUndefinedKCharSmallDictG, \
   1272       default: setVoidKCharSmallDictG), \
   1273     int: _Generic((value), \
   1274       baset*: setNFreeKCharSmallDictG, \
   1275       bool: setBoolKCharSmallDictG, \
   1276       double: setDoubleKCharSmallDictG, \
   1277       int64_t: setIntKCharSmallDictG, \
   1278       int32_t: setIntKCharSmallDictG, \
   1279       uint32_t: setIntKCharSmallDictG, \
   1280       uint64_t: setIntKCharSmallDictG, \
   1281       char*: setNFreeSKCharSmallDictG, \
   1282       smallDictt*: setNFreeDictKCharSmallDictG, \
   1283       smallArrayt*: setNFreeArrayKCharSmallDictG, \
   1284       char **: setNFreeArraycKCharSmallDictG, \
   1285       smallBoolt*: setNFreeSmallBoolKCharSmallDictG, \
   1286       smallBytest*: setNFreeSmallBytesKCharSmallDictG, \
   1287       smallDoublet*: setNFreeSmallDoubleKCharSmallDictG, \
   1288       smallIntt*: setNFreeSmallIntKCharSmallDictG, \
   1289       smallJsont*: setNFreeSmallJsonKCharSmallDictG, \
   1290       smallStringt*: setNFreeSmallStringKCharSmallDictG, \
   1291       smallContainert*: setNFreeSmallContainerKCharSmallDictG, \
   1292       undefinedt*: setNFreeUndefinedKCharSmallDictG, \
   1293       default: setVoidKCharSmallDictG), \
   1294     default: setVoidSmallDictG \
   1295     ), \
   1296   smallArrayt*: _Generic((value), \
   1297     baset*: setAtNFreeSmallArrayG, \
   1298     bool: setAtBoolSmallArrayG, \
   1299     double: setAtDoubleSmallArrayG, \
   1300     int64_t: setAtIntSmallArrayG, \
   1301     int32_t: setAtIntSmallArrayG, \
   1302     uint32_t: setAtIntSmallArrayG, \
   1303     uint64_t: setAtIntSmallArrayG, \
   1304     char*: setAtNFreeSSmallArrayG, \
   1305     smallDictt*: setAtNFreeDictSmallArrayG, \
   1306     smallArrayt*: setAtNFreeArraySmallArrayG, \
   1307     char **: setAtNFreeArraycSmallArrayG, \
   1308     smallBoolt*: setAtNFreeSmallBoolSmallArrayG, \
   1309     smallBytest*: setAtNFreeSmallBytesSmallArrayG, \
   1310     smallDoublet*: setAtNFreeSmallDoubleSmallArrayG, \
   1311     smallIntt*: setAtNFreeSmallIntSmallArrayG, \
   1312     smallJsont*: setAtNFreeSmallJsonSmallArrayG, \
   1313     smallStringt*: setAtNFreeSmallStringSmallArrayG, \
   1314     smallContainert*: setAtNFreeSmallContainerSmallArrayG, \
   1315     undefinedt*: setAtNFreeUndefinedSmallArrayG, \
   1316     default: setAtVoidSmallArrayG), \
   1317   smallJsont*: _Generic(key, \
   1318     char *: _Generic((value), \
   1319       baset*: setNFreeSmallJsonG, \
   1320       bool: setBoolSmallJsonG, \
   1321       double: setDoubleSmallJsonG, \
   1322       int64_t: setIntSmallJsonG, \
   1323       int32_t: setIntSmallJsonG, \
   1324       uint32_t: setIntSmallJsonG, \
   1325       uint64_t: setIntSmallJsonG, \
   1326       char*: setNFreeSSmallJsonG, \
   1327       smallDictt*: setNFreeDictSmallJsonG, \
   1328       smallArrayt*: setNFreeArraySmallJsonG, \
   1329       char **: setNFreeArraycSmallJsonG, \
   1330       smallBoolt*: setNFreeSmallBoolSmallJsonG, \
   1331       smallBytest*: setNFreeSmallBytesSmallJsonG, \
   1332       smallDoublet*: setNFreeSmallDoubleSmallJsonG, \
   1333       smallIntt*: setNFreeSmallIntSmallJsonG, \
   1334       smallJsont*: setNFreeSmallJsonSmallJsonG, \
   1335       smallStringt*: setNFreeSmallStringSmallJsonG, \
   1336       smallContainert*: setNFreeSmallContainerSmallJsonG, \
   1337       undefinedt*: setNFreeUndefinedSmallJsonG, \
   1338       default: setVoidSmallJsonG), \
   1339     const char *: _Generic((value), \
   1340       baset*: setNFreeSmallJsonG, \
   1341       bool: setBoolSmallJsonG, \
   1342       double: setDoubleSmallJsonG, \
   1343       int64_t: setIntSmallJsonG, \
   1344       int32_t: setIntSmallJsonG, \
   1345       uint32_t: setIntSmallJsonG, \
   1346       uint64_t: setIntSmallJsonG, \
   1347       char*: setNFreeSSmallJsonG, \
   1348       smallDictt*: setNFreeDictSmallJsonG, \
   1349       smallArrayt*: setNFreeArraySmallJsonG, \
   1350       char **: setNFreeArraycSmallJsonG, \
   1351       smallBoolt*: setNFreeSmallBoolSmallJsonG, \
   1352       smallBytest*: setNFreeSmallBytesSmallJsonG, \
   1353       smallDoublet*: setNFreeSmallDoubleSmallJsonG, \
   1354       smallIntt*: setNFreeSmallIntSmallJsonG, \
   1355       smallJsont*: setNFreeSmallJsonSmallJsonG, \
   1356       smallStringt*: setNFreeSmallStringSmallJsonG, \
   1357       smallContainert*: setNFreeSmallContainerSmallJsonG, \
   1358       undefinedt*: setNFreeUndefinedSmallJsonG, \
   1359       default: setVoidSmallJsonG), \
   1360     int64_t: _Generic((value), \
   1361       baset*: setAtNFreeSmallJsonG, \
   1362       bool: setAtBoolSmallJsonG, \
   1363       double: setAtDoubleSmallJsonG, \
   1364       int64_t: setAtIntSmallJsonG, \
   1365       int32_t: setAtIntSmallJsonG, \
   1366       uint32_t: setAtIntSmallJsonG, \
   1367       uint64_t: setAtIntSmallJsonG, \
   1368       char*: setAtNFreeSSmallJsonG, \
   1369       smallDictt*: setAtNFreeDictSmallJsonG, \
   1370       smallArrayt*: setAtNFreeArraySmallJsonG, \
   1371       char **: setAtNFreeArraycSmallJsonG, \
   1372       smallBoolt*: setAtNFreeSmallBoolSmallJsonG, \
   1373       smallBytest*: setAtNFreeSmallBytesSmallJsonG, \
   1374       smallDoublet*: setAtNFreeSmallDoubleSmallJsonG, \
   1375       smallIntt*: setAtNFreeSmallIntSmallJsonG, \
   1376       smallJsont*: setAtNFreeSmallJsonSmallJsonG, \
   1377       smallStringt*: setAtNFreeSmallStringSmallJsonG, \
   1378       smallContainert*: setAtNFreeSmallContainerSmallJsonG, \
   1379       undefinedt*: setAtNFreeUndefinedSmallJsonG, \
   1380       default: setAtVoidSmallJsonG), \
   1381     int32_t: _Generic((value), \
   1382       baset*: setAtNFreeSmallJsonG, \
   1383       bool: setAtBoolSmallJsonG, \
   1384       double: setAtDoubleSmallJsonG, \
   1385       int64_t: setAtIntSmallJsonG, \
   1386       int32_t: setAtIntSmallJsonG, \
   1387       uint32_t: setAtIntSmallJsonG, \
   1388       uint64_t: setAtIntSmallJsonG, \
   1389       char*: setAtNFreeSSmallJsonG, \
   1390       smallDictt*: setAtNFreeDictSmallJsonG, \
   1391       smallArrayt*: setAtNFreeArraySmallJsonG, \
   1392       char **: setAtNFreeArraycSmallJsonG, \
   1393       smallBoolt*: setAtNFreeSmallBoolSmallJsonG, \
   1394       smallBytest*: setAtNFreeSmallBytesSmallJsonG, \
   1395       smallDoublet*: setAtNFreeSmallDoubleSmallJsonG, \
   1396       smallIntt*: setAtNFreeSmallIntSmallJsonG, \
   1397       smallJsont*: setAtNFreeSmallJsonSmallJsonG, \
   1398       smallStringt*: setAtNFreeSmallStringSmallJsonG, \
   1399       smallContainert*: setAtNFreeSmallContainerSmallJsonG, \
   1400       undefinedt*: setAtNFreeUndefinedSmallJsonG, \
   1401       default: setAtVoidSmallJsonG), \
   1402     int16_t: _Generic((value), \
   1403       baset*: setAtNFreeSmallJsonG, \
   1404       bool: setAtBoolSmallJsonG, \
   1405       double: setAtDoubleSmallJsonG, \
   1406       int64_t: setAtIntSmallJsonG, \
   1407       int32_t: setAtIntSmallJsonG, \
   1408       uint32_t: setAtIntSmallJsonG, \
   1409       uint64_t: setAtIntSmallJsonG, \
   1410       char*: setAtNFreeSSmallJsonG, \
   1411       smallDictt*: setAtNFreeDictSmallJsonG, \
   1412       smallArrayt*: setAtNFreeArraySmallJsonG, \
   1413       char **: setAtNFreeArraycSmallJsonG, \
   1414       smallBoolt*: setAtNFreeSmallBoolSmallJsonG, \
   1415       smallBytest*: setAtNFreeSmallBytesSmallJsonG, \
   1416       smallDoublet*: setAtNFreeSmallDoubleSmallJsonG, \
   1417       smallIntt*: setAtNFreeSmallIntSmallJsonG, \
   1418       smallJsont*: setAtNFreeSmallJsonSmallJsonG, \
   1419       smallStringt*: setAtNFreeSmallStringSmallJsonG, \
   1420       smallContainert*: setAtNFreeSmallContainerSmallJsonG, \
   1421       undefinedt*: setAtNFreeUndefinedSmallJsonG, \
   1422       default: setAtVoidSmallJsonG), \
   1423     int8_t: _Generic((value), \
   1424       baset*: setAtNFreeSmallJsonG, \
   1425       bool: setAtBoolSmallJsonG, \
   1426       double: setAtDoubleSmallJsonG, \
   1427       int64_t: setAtIntSmallJsonG, \
   1428       int32_t: setAtIntSmallJsonG, \
   1429       uint32_t: setAtIntSmallJsonG, \
   1430       uint64_t: setAtIntSmallJsonG, \
   1431       char*: setAtNFreeSSmallJsonG, \
   1432       smallDictt*: setAtNFreeDictSmallJsonG, \
   1433       smallArrayt*: setAtNFreeArraySmallJsonG, \
   1434       char **: setAtNFreeArraycSmallJsonG, \
   1435       smallBoolt*: setAtNFreeSmallBoolSmallJsonG, \
   1436       smallBytest*: setAtNFreeSmallBytesSmallJsonG, \
   1437       smallDoublet*: setAtNFreeSmallDoubleSmallJsonG, \
   1438       smallIntt*: setAtNFreeSmallIntSmallJsonG, \
   1439       smallJsont*: setAtNFreeSmallJsonSmallJsonG, \
   1440       smallStringt*: setAtNFreeSmallStringSmallJsonG, \
   1441       smallContainert*: setAtNFreeSmallContainerSmallJsonG, \
   1442       undefinedt*: setAtNFreeUndefinedSmallJsonG, \
   1443       default: setAtVoidSmallJsonG), \
   1444     char: _Generic((value), \
   1445       baset*: setAtNFreeSmallJsonG, \
   1446       bool: setAtBoolSmallJsonG, \
   1447       double: setAtDoubleSmallJsonG, \
   1448       int64_t: setAtIntSmallJsonG, \
   1449       int32_t: setAtIntSmallJsonG, \
   1450       uint32_t: setAtIntSmallJsonG, \
   1451       uint64_t: setAtIntSmallJsonG, \
   1452       char*: setAtNFreeSSmallJsonG, \
   1453       smallDictt*: setAtNFreeDictSmallJsonG, \
   1454       smallArrayt*: setAtNFreeArraySmallJsonG, \
   1455       char **: setAtNFreeArraycSmallJsonG, \
   1456       smallBoolt*: setAtNFreeSmallBoolSmallJsonG, \
   1457       smallBytest*: setAtNFreeSmallBytesSmallJsonG, \
   1458       smallDoublet*: setAtNFreeSmallDoubleSmallJsonG, \
   1459       smallIntt*: setAtNFreeSmallIntSmallJsonG, \
   1460       smallJsont*: setAtNFreeSmallJsonSmallJsonG, \
   1461       smallStringt*: setAtNFreeSmallStringSmallJsonG, \
   1462       smallContainert*: setAtNFreeSmallContainerSmallJsonG, \
   1463       undefinedt*: setAtNFreeUndefinedSmallJsonG, \
   1464       default: setAtVoidSmallJsonG), \
   1465     uint64_t: _Generic((value), \
   1466       baset*: setAtNFreeSmallJsonG, \
   1467       bool: setAtBoolSmallJsonG, \
   1468       double: setAtDoubleSmallJsonG, \
   1469       int64_t: setAtIntSmallJsonG, \
   1470       int32_t: setAtIntSmallJsonG, \
   1471       uint32_t: setAtIntSmallJsonG, \
   1472       uint64_t: setAtIntSmallJsonG, \
   1473       char*: setAtNFreeSSmallJsonG, \
   1474       smallDictt*: setAtNFreeDictSmallJsonG, \
   1475       smallArrayt*: setAtNFreeArraySmallJsonG, \
   1476       char **: setAtNFreeArraycSmallJsonG, \
   1477       smallBoolt*: setAtNFreeSmallBoolSmallJsonG, \
   1478       smallBytest*: setAtNFreeSmallBytesSmallJsonG, \
   1479       smallDoublet*: setAtNFreeSmallDoubleSmallJsonG, \
   1480       smallIntt*: setAtNFreeSmallIntSmallJsonG, \
   1481       smallJsont*: setAtNFreeSmallJsonSmallJsonG, \
   1482       smallStringt*: setAtNFreeSmallStringSmallJsonG, \
   1483       smallContainert*: setAtNFreeSmallContainerSmallJsonG, \
   1484       undefinedt*: setAtNFreeUndefinedSmallJsonG, \
   1485       default: setAtVoidSmallJsonG), \
   1486     uint32_t: _Generic((value), \
   1487       baset*: setAtNFreeSmallJsonG, \
   1488       bool: setAtBoolSmallJsonG, \
   1489       double: setAtDoubleSmallJsonG, \
   1490       int64_t: setAtIntSmallJsonG, \
   1491       int32_t: setAtIntSmallJsonG, \
   1492       uint32_t: setAtIntSmallJsonG, \
   1493       uint64_t: setAtIntSmallJsonG, \
   1494       char*: setAtNFreeSSmallJsonG, \
   1495       smallDictt*: setAtNFreeDictSmallJsonG, \
   1496       smallArrayt*: setAtNFreeArraySmallJsonG, \
   1497       char **: setAtNFreeArraycSmallJsonG, \
   1498       smallBoolt*: setAtNFreeSmallBoolSmallJsonG, \
   1499       smallBytest*: setAtNFreeSmallBytesSmallJsonG, \
   1500       smallDoublet*: setAtNFreeSmallDoubleSmallJsonG, \
   1501       smallIntt*: setAtNFreeSmallIntSmallJsonG, \
   1502       smallJsont*: setAtNFreeSmallJsonSmallJsonG, \
   1503       smallStringt*: setAtNFreeSmallStringSmallJsonG, \
   1504       smallContainert*: setAtNFreeSmallContainerSmallJsonG, \
   1505       undefinedt*: setAtNFreeUndefinedSmallJsonG, \
   1506       default: setAtVoidSmallJsonG), \
   1507     uint16_t: _Generic((value), \
   1508       baset*: setAtNFreeSmallJsonG, \
   1509       bool: setAtBoolSmallJsonG, \
   1510       double: setAtDoubleSmallJsonG, \
   1511       int64_t: setAtIntSmallJsonG, \
   1512       int32_t: setAtIntSmallJsonG, \
   1513       uint32_t: setAtIntSmallJsonG, \
   1514       uint64_t: setAtIntSmallJsonG, \
   1515       char*: setAtNFreeSSmallJsonG, \
   1516       smallDictt*: setAtNFreeDictSmallJsonG, \
   1517       smallArrayt*: setAtNFreeArraySmallJsonG, \
   1518       char **: setAtNFreeArraycSmallJsonG, \
   1519       smallBoolt*: setAtNFreeSmallBoolSmallJsonG, \
   1520       smallBytest*: setAtNFreeSmallBytesSmallJsonG, \
   1521       smallDoublet*: setAtNFreeSmallDoubleSmallJsonG, \
   1522       smallIntt*: setAtNFreeSmallIntSmallJsonG, \
   1523       smallJsont*: setAtNFreeSmallJsonSmallJsonG, \
   1524       smallStringt*: setAtNFreeSmallStringSmallJsonG, \
   1525       smallContainert*: setAtNFreeSmallContainerSmallJsonG, \
   1526       undefinedt*: setAtNFreeUndefinedSmallJsonG, \
   1527       default: setAtVoidSmallJsonG), \
   1528     uint8_t: _Generic((value), \
   1529       baset*: setAtNFreeSmallJsonG, \
   1530       bool: setAtBoolSmallJsonG, \
   1531       double: setAtDoubleSmallJsonG, \
   1532       int64_t: setAtIntSmallJsonG, \
   1533       int32_t: setAtIntSmallJsonG, \
   1534       uint32_t: setAtIntSmallJsonG, \
   1535       uint64_t: setAtIntSmallJsonG, \
   1536       char*: setAtNFreeSSmallJsonG, \
   1537       smallDictt*: setAtNFreeDictSmallJsonG, \
   1538       smallArrayt*: setAtNFreeArraySmallJsonG, \
   1539       char **: setAtNFreeArraycSmallJsonG, \
   1540       smallBoolt*: setAtNFreeSmallBoolSmallJsonG, \
   1541       smallBytest*: setAtNFreeSmallBytesSmallJsonG, \
   1542       smallDoublet*: setAtNFreeSmallDoubleSmallJsonG, \
   1543       smallIntt*: setAtNFreeSmallIntSmallJsonG, \
   1544       smallJsont*: setAtNFreeSmallJsonSmallJsonG, \
   1545       smallStringt*: setAtNFreeSmallStringSmallJsonG, \
   1546       smallContainert*: setAtNFreeSmallContainerSmallJsonG, \
   1547       undefinedt*: setAtNFreeUndefinedSmallJsonG, \
   1548       default: setAtVoidSmallJsonG) \
   1549     ), \
   1550   smallStringt*: setAtSmallStringG, \
   1551   char *: setS, \
   1552   char **: _Generic(value, \
   1553     char *: iListSetS,\
   1554     char: listSetCharS,\
   1555     int: listSetCharS,\
   1556     default: iListSetS \
   1557     ) \
   1558   )(self, key, value)
   1559 
   1560 
   1561 #define setPG(self, key, value) _Generic((self), \
   1562   smallDictt*: _Generic(key, \
   1563     char *: _Generic((value), \
   1564       smallDictt*: setPDictSmallDictG, \
   1565       smallArrayt*: setPArraySmallDictG, \
   1566       smallJsont*: setPSmallJsonSmallDictG, \
   1567       smallStringt*: setPSmallStringSmallDictG, \
   1568       default: setPDictSmallDictG), \
   1569     const char *: _Generic((value), \
   1570       smallDictt*: setPDictSmallDictG, \
   1571       smallArrayt*: setPArraySmallDictG, \
   1572       smallJsont*: setPSmallJsonSmallDictG, \
   1573       smallStringt*: setPSmallStringSmallDictG, \
   1574       default: setPDictSmallDictG), \
   1575     char: _Generic((value), \
   1576       smallDictt*: setPDictKCharSmallDictG, \
   1577       smallArrayt*: setPArrayKCharSmallDictG, \
   1578       smallJsont*: setPSmallJsonKCharSmallDictG, \
   1579       smallStringt*: setPSmallStringKCharSmallDictG, \
   1580       default: setPDictKCharSmallDictG), \
   1581     int: _Generic((value), \
   1582       smallDictt*: setPDictKCharSmallDictG, \
   1583       smallArrayt*: setPArrayKCharSmallDictG, \
   1584       smallJsont*: setPSmallJsonKCharSmallDictG, \
   1585       smallStringt*: setPSmallStringKCharSmallDictG, \
   1586       default: setPDictKCharSmallDictG), \
   1587     default: setPDictSmallDictG \
   1588     ),\
   1589   smallArrayt*: _Generic((value), \
   1590     smallDictt*: setPAtDictSmallArrayG, \
   1591     smallArrayt*: setPAtArraySmallArrayG, \
   1592     smallJsont*: setPAtSmallJsonSmallArrayG, \
   1593     smallStringt*: setPAtSmallStringSmallArrayG, \
   1594     default: setPAtDictSmallArrayG), \
   1595   smallJsont*: _Generic(key, \
   1596     char *: _Generic((value), \
   1597       smallDictt*: setPDictSmallJsonG, \
   1598       smallArrayt*: setPArraySmallJsonG, \
   1599       smallJsont*: setPSmallJsonSmallJsonG, \
   1600       smallStringt*: setPSmallStringSmallJsonG, \
   1601       default: setPDictSmallJsonG), \
   1602     const char *: _Generic((value), \
   1603       smallDictt*: setPDictSmallJsonG, \
   1604       smallArrayt*: setPArraySmallJsonG, \
   1605       smallJsont*: setPSmallJsonSmallJsonG, \
   1606       smallStringt*: setPSmallStringSmallJsonG, \
   1607       default: setPDictSmallJsonG), \
   1608     int64_t: _Generic((value), \
   1609       smallDictt*: setPAtDictSmallJsonG, \
   1610       smallArrayt*: setPAtArraySmallJsonG, \
   1611       smallJsont*: setPAtSmallJsonSmallJsonG, \
   1612       smallStringt*: setPAtSmallStringSmallJsonG, \
   1613       default: setPAtDictSmallJsonG), \
   1614     int32_t: _Generic((value), \
   1615       smallDictt*: setPAtDictSmallJsonG, \
   1616       smallArrayt*: setPAtArraySmallJsonG, \
   1617       smallJsont*: setPAtSmallJsonSmallJsonG, \
   1618       smallStringt*: setPAtSmallStringSmallJsonG, \
   1619       default: setPAtDictSmallJsonG), \
   1620     int16_t: _Generic((value), \
   1621       smallDictt*: setPAtDictSmallJsonG, \
   1622       smallArrayt*: setPAtArraySmallJsonG, \
   1623       smallJsont*: setPAtSmallJsonSmallJsonG, \
   1624       smallStringt*: setPAtSmallStringSmallJsonG, \
   1625       default: setPAtDictSmallJsonG), \
   1626     int8_t: _Generic((value), \
   1627       smallDictt*: setPAtDictSmallJsonG, \
   1628       smallArrayt*: setPAtArraySmallJsonG, \
   1629       smallJsont*: setPAtSmallJsonSmallJsonG, \
   1630       smallStringt*: setPAtSmallStringSmallJsonG, \
   1631       default: setPAtDictSmallJsonG), \
   1632     uint64_t: _Generic((value), \
   1633       smallDictt*: setPAtDictSmallJsonG, \
   1634       smallArrayt*: setPAtArraySmallJsonG, \
   1635       smallJsont*: setPAtSmallJsonSmallJsonG, \
   1636       smallStringt*: setPAtSmallStringSmallJsonG, \
   1637       default: setPAtDictSmallJsonG), \
   1638     uint32_t: _Generic((value), \
   1639       smallDictt*: setPAtDictSmallJsonG, \
   1640       smallArrayt*: setPAtArraySmallJsonG, \
   1641       smallJsont*: setPAtSmallJsonSmallJsonG, \
   1642       smallStringt*: setPAtSmallStringSmallJsonG, \
   1643       default: setPAtDictSmallJsonG), \
   1644     uint16_t: _Generic((value), \
   1645       smallDictt*: setPAtDictSmallJsonG, \
   1646       smallArrayt*: setPAtArraySmallJsonG, \
   1647       smallJsont*: setPAtSmallJsonSmallJsonG, \
   1648       smallStringt*: setPAtSmallStringSmallJsonG, \
   1649       default: setPAtDictSmallJsonG), \
   1650     uint8_t: _Generic((value), \
   1651       smallDictt*: setPAtDictSmallJsonG, \
   1652       smallArrayt*: setPAtArraySmallJsonG, \
   1653       smallJsont*: setPAtSmallJsonSmallJsonG, \
   1654       smallStringt*: setPAtSmallStringSmallJsonG, \
   1655       default: setPAtDictSmallJsonG), \
   1656     default: setPDictSmallJsonG \
   1657     ),\
   1658   char **: _Generic(value, \
   1659     char *: iListSetS,\
   1660     char: listSetCharS,\
   1661     int: listSetCharS,\
   1662     default: iListSetS \
   1663     ) \
   1664   )(self, key, value)
   1665 
   1666 
   1667 #define setNFreePG(self, key, value) _Generic((self), \
   1668   smallDictt*: _Generic(key, \
   1669     char *: _Generic((value), \
   1670       smallDictt*: setNFreePDictSmallDictG, \
   1671       smallArrayt*: setNFreePArraySmallDictG, \
   1672       smallJsont*: setNFreePSmallJsonSmallDictG, \
   1673       smallStringt*: setNFreePSmallStringSmallDictG, \
   1674       default: setNFreePDictSmallDictG), \
   1675     const char *: _Generic((value), \
   1676       smallDictt*: setNFreePDictSmallDictG, \
   1677       smallArrayt*: setNFreePArraySmallDictG, \
   1678       smallJsont*: setNFreePSmallJsonSmallDictG, \
   1679       smallStringt*: setNFreePSmallStringSmallDictG, \
   1680       default: setNFreePDictSmallDictG), \
   1681     char: _Generic((value), \
   1682       smallDictt*: setNFreePDictKCharSmallDictG, \
   1683       smallArrayt*: setNFreePArrayKCharSmallDictG, \
   1684       smallJsont*: setNFreePSmallJsonKCharSmallDictG, \
   1685       smallStringt*: setNFreePSmallStringKCharSmallDictG, \
   1686       default: setNFreePDictSmallDictG), \
   1687     int: _Generic((value), \
   1688       smallDictt*: setNFreePDictKCharSmallDictG, \
   1689       smallArrayt*: setNFreePArrayKCharSmallDictG, \
   1690       smallJsont*: setNFreePSmallJsonKCharSmallDictG, \
   1691       smallStringt*: setNFreePSmallStringKCharSmallDictG, \
   1692       default: setNFreePDictSmallDictG), \
   1693     default: setNFreePDictSmallDictG \
   1694     ),\
   1695   smallArrayt*: _Generic((value), \
   1696     smallDictt*: setPAtNFreeDictSmallArrayG, \
   1697     smallArrayt*: setPAtNFreeArraySmallArrayG, \
   1698     smallJsont*: setPAtNFreeSmallJsonSmallArrayG, \
   1699     smallStringt*: setPAtNFreeSmallStringSmallArrayG, \
   1700     default: setPAtNFreeDictSmallArrayG), \
   1701   smallJsont*: _Generic(key, \
   1702     char *: _Generic((value), \
   1703       smallDictt*: setNFreePDictSmallJsonG, \
   1704       smallArrayt*: setNFreePArraySmallJsonG, \
   1705       smallJsont*: setNFreePSmallJsonSmallJsonG, \
   1706       smallStringt*: setNFreePSmallStringSmallJsonG, \
   1707       default: setNFreePDictSmallJsonG), \
   1708     const char *: _Generic((value), \
   1709       smallDictt*: setNFreePDictSmallJsonG, \
   1710       smallArrayt*: setNFreePArraySmallJsonG, \
   1711       smallJsont*: setNFreePSmallJsonSmallJsonG, \
   1712       smallStringt*: setNFreePSmallStringSmallJsonG, \
   1713       default: setNFreePDictSmallJsonG), \
   1714     int64_t: _Generic((value), \
   1715       smallDictt*: setPAtNFreeDictSmallJsonG, \
   1716       smallArrayt*: setPAtNFreeArraySmallJsonG, \
   1717       smallJsont*: setPAtNFreeSmallJsonSmallJsonG, \
   1718       smallStringt*: setPAtNFreeSmallStringSmallJsonG, \
   1719       default: setPAtNFreeDictSmallJsonG), \
   1720     int32_t: _Generic((value), \
   1721       smallDictt*: setPAtNFreeDictSmallJsonG, \
   1722       smallArrayt*: setPAtNFreeArraySmallJsonG, \
   1723       smallJsont*: setPAtNFreeSmallJsonSmallJsonG, \
   1724       smallStringt*: setPAtNFreeSmallStringSmallJsonG, \
   1725       default: setPAtNFreeDictSmallJsonG), \
   1726     int16_t: _Generic((value), \
   1727       smallDictt*: setPAtNFreeDictSmallJsonG, \
   1728       smallArrayt*: setPAtNFreeArraySmallJsonG, \
   1729       smallJsont*: setPAtNFreeSmallJsonSmallJsonG, \
   1730       smallStringt*: setPAtNFreeSmallStringSmallJsonG, \
   1731       default: setPAtNFreeDictSmallJsonG), \
   1732     int8_t: _Generic((value), \
   1733       smallDictt*: setPAtNFreeDictSmallJsonG, \
   1734       smallArrayt*: setPAtNFreeArraySmallJsonG, \
   1735       smallJsont*: setPAtNFreeSmallJsonSmallJsonG, \
   1736       smallStringt*: setPAtNFreeSmallStringSmallJsonG, \
   1737       default: setPAtNFreeDictSmallJsonG), \
   1738     uint64_t: _Generic((value), \
   1739       smallDictt*: setPAtNFreeDictSmallJsonG, \
   1740       smallArrayt*: setPAtNFreeArraySmallJsonG, \
   1741       smallJsont*: setPAtNFreeSmallJsonSmallJsonG, \
   1742       smallStringt*: setPAtNFreeSmallStringSmallJsonG, \
   1743       default: setPAtNFreeDictSmallJsonG), \
   1744     uint32_t: _Generic((value), \
   1745       smallDictt*: setPAtNFreeDictSmallJsonG, \
   1746       smallArrayt*: setPAtNFreeArraySmallJsonG, \
   1747       smallJsont*: setPAtNFreeSmallJsonSmallJsonG, \
   1748       smallStringt*: setPAtNFreeSmallStringSmallJsonG, \
   1749       default: setPAtNFreeDictSmallJsonG), \
   1750     uint16_t: _Generic((value), \
   1751       smallDictt*: setPAtNFreeDictSmallJsonG, \
   1752       smallArrayt*: setPAtNFreeArraySmallJsonG, \
   1753       smallJsont*: setPAtNFreeSmallJsonSmallJsonG, \
   1754       smallStringt*: setPAtNFreeSmallStringSmallJsonG, \
   1755       default: setPAtNFreeDictSmallJsonG), \
   1756     uint8_t: _Generic((value), \
   1757       smallDictt*: setPAtNFreeDictSmallJsonG, \
   1758       smallArrayt*: setPAtNFreeArraySmallJsonG, \
   1759       smallJsont*: setPAtNFreeSmallJsonSmallJsonG, \
   1760       smallStringt*: setPAtNFreeSmallStringSmallJsonG, \
   1761       default: setPAtNFreeDictSmallJsonG), \
   1762     default: setNFreePDictSmallJsonG \
   1763     ),\
   1764   char **: _Generic(value, \
   1765     char *: iListSetS,\
   1766     char: listSetCharS,\
   1767     int: listSetCharS,\
   1768     default: iListSetS \
   1769     ) \
   1770   )(self, key, value)
   1771 
   1772 
   1773 #define getO(self, key) (self)->f->get(self, key)
   1774 #define getAtO(self, index) (self)->f->getAt(self, index)
   1775 #define getG(self, returnType, key) _Generic((self), \
   1776   smallDictt*: _Generic(key, \
   1777     char *: _Generic((returnType), \
   1778       baset*: getSmallDictG, \
   1779       undefinedt*: getUndefinedSmallDictG, \
   1780       bool: getBoolSmallDictG, \
   1781       bool*: getBoolPSmallDictG, \
   1782       double: getDoubleSmallDictG, \
   1783       double*: getDoublePSmallDictG, \
   1784       int64_t: getIntSmallDictG, \
   1785       int64_t*: getIntPSmallDictG, \
   1786       int32_t: getInt32SmallDictG, \
   1787       int32_t*: getInt32PSmallDictG, \
   1788       uint64_t: getUintSmallDictG, \
   1789       uint64_t*: getUintPSmallDictG, \
   1790       uint32_t: getUint32SmallDictG, \
   1791       uint32_t*: getUint32PSmallDictG, \
   1792       char*: getSSmallDictG, \
   1793       smallDictt*: getDictSmallDictG, \
   1794       smallArrayt*: getArraySmallDictG, \
   1795       smallBoolt*: getSmallBoolSmallDictG, \
   1796       smallBytest*: getSmallBytesSmallDictG, \
   1797       smallDoublet*: getSmallDoubleSmallDictG, \
   1798       smallIntt*: getSmallIntSmallDictG, \
   1799       smallJsont*: getSmallJsonSmallDictG, \
   1800       smallStringt*: getSmallStringSmallDictG, \
   1801       void*: getVoidSmallDictG, \
   1802       smallContainert*: getSmallContainerSmallDictG, \
   1803       default: getSmallDictG), \
   1804     const char *: _Generic((returnType), \
   1805       baset*: getSmallDictG, \
   1806       undefinedt*: getUndefinedSmallDictG, \
   1807       bool: getBoolSmallDictG, \
   1808       bool*: getBoolPSmallDictG, \
   1809       double: getDoubleSmallDictG, \
   1810       double*: getDoublePSmallDictG, \
   1811       int64_t: getIntSmallDictG, \
   1812       int64_t*: getIntPSmallDictG, \
   1813       int32_t: getInt32SmallDictG, \
   1814       int32_t*: getInt32PSmallDictG, \
   1815       uint64_t: getUintSmallDictG, \
   1816       uint64_t*: getUintPSmallDictG, \
   1817       uint32_t: getUint32SmallDictG, \
   1818       uint32_t*: getUint32PSmallDictG, \
   1819       char*: getSSmallDictG, \
   1820       smallDictt*: getDictSmallDictG, \
   1821       smallArrayt*: getArraySmallDictG, \
   1822       smallBoolt*: getSmallBoolSmallDictG, \
   1823       smallBytest*: getSmallBytesSmallDictG, \
   1824       smallDoublet*: getSmallDoubleSmallDictG, \
   1825       smallIntt*: getSmallIntSmallDictG, \
   1826       smallJsont*: getSmallJsonSmallDictG, \
   1827       smallStringt*: getSmallStringSmallDictG, \
   1828       void*: getVoidSmallDictG, \
   1829       smallContainert*: getSmallContainerSmallDictG, \
   1830       default: getSmallDictG), \
   1831     char: _Generic((returnType), \
   1832       baset*: getKCharSmallDictG, \
   1833       undefinedt*: getUndefinedKCharSmallDictG, \
   1834       bool: getBoolKCharSmallDictG, \
   1835       bool*: getBoolPKCharSmallDictG, \
   1836       double: getDoubleKCharSmallDictG, \
   1837       double*: getDoublePKCharSmallDictG, \
   1838       int64_t: getIntKCharSmallDictG, \
   1839       int64_t*: getIntPKCharSmallDictG, \
   1840       int32_t: getInt32KCharSmallDictG, \
   1841       int32_t*: getInt32PKCharSmallDictG, \
   1842       uint64_t: getUintKCharSmallDictG, \
   1843       uint64_t*: getUintPKCharSmallDictG, \
   1844       uint32_t: getUint32KCharSmallDictG, \
   1845       uint32_t*: getUint32PKCharSmallDictG, \
   1846       char*: getSKCharSmallDictG, \
   1847       smallDictt*: getDictKCharSmallDictG, \
   1848       smallArrayt*: getArrayKCharSmallDictG, \
   1849       smallBoolt*: getSmallBoolKCharSmallDictG, \
   1850       smallBytest*: getSmallBytesKCharSmallDictG, \
   1851       smallDoublet*: getSmallDoubleKCharSmallDictG, \
   1852       smallIntt*: getSmallIntKCharSmallDictG, \
   1853       smallJsont*: getSmallJsonKCharSmallDictG, \
   1854       smallStringt*: getSmallStringKCharSmallDictG, \
   1855       void*: getVoidKCharSmallDictG, \
   1856       smallContainert*: getSmallContainerKCharSmallDictG, \
   1857       default: getKCharSmallDictG), \
   1858     int: _Generic((returnType), \
   1859       baset*: getKCharSmallDictG, \
   1860       undefinedt*: getUndefinedKCharSmallDictG, \
   1861       bool: getBoolKCharSmallDictG, \
   1862       bool*: getBoolPKCharSmallDictG, \
   1863       double: getDoubleKCharSmallDictG, \
   1864       double*: getDoublePKCharSmallDictG, \
   1865       int64_t: getIntKCharSmallDictG, \
   1866       int64_t*: getIntPKCharSmallDictG, \
   1867       int32_t: getInt32KCharSmallDictG, \
   1868       int32_t*: getInt32PKCharSmallDictG, \
   1869       uint64_t: getUintKCharSmallDictG, \
   1870       uint64_t*: getUintPKCharSmallDictG, \
   1871       uint32_t: getUint32KCharSmallDictG, \
   1872       uint32_t*: getUint32PKCharSmallDictG, \
   1873       char*: getSKCharSmallDictG, \
   1874       smallDictt*: getDictKCharSmallDictG, \
   1875       smallArrayt*: getArrayKCharSmallDictG, \
   1876       smallBoolt*: getSmallBoolKCharSmallDictG, \
   1877       smallBytest*: getSmallBytesKCharSmallDictG, \
   1878       smallDoublet*: getSmallDoubleKCharSmallDictG, \
   1879       smallIntt*: getSmallIntKCharSmallDictG, \
   1880       smallJsont*: getSmallJsonKCharSmallDictG, \
   1881       smallStringt*: getSmallStringKCharSmallDictG, \
   1882       void*: getVoidKCharSmallDictG, \
   1883       smallContainert*: getSmallContainerKCharSmallDictG, \
   1884       default: getKCharSmallDictG), \
   1885     default: getSmallDictG \
   1886     ), \
   1887   smallArrayt*: _Generic((returnType), \
   1888     baset*: getAtSmallArrayG, \
   1889     undefinedt*: getAtUndefinedSmallArrayG, \
   1890     bool: getAtBoolSmallArrayG, \
   1891     bool*: getAtBoolPSmallArrayG, \
   1892     double: getAtDoubleSmallArrayG, \
   1893     double*: getAtDoublePSmallArrayG, \
   1894     int64_t: getAtIntSmallArrayG, \
   1895     int64_t*: getAtIntPSmallArrayG, \
   1896     int32_t: getAtInt32SmallArrayG, \
   1897     int32_t*: getAtInt32PSmallArrayG, \
   1898     uint64_t: getAtUintSmallArrayG, \
   1899     uint64_t*: getAtUintPSmallArrayG, \
   1900     uint32_t: getAtUint32SmallArrayG, \
   1901     uint32_t*: getAtUint32PSmallArrayG, \
   1902     char*: getAtSSmallArrayG, \
   1903     smallDictt*: getAtDictSmallArrayG, \
   1904     smallArrayt*: getAtArraySmallArrayG, \
   1905     smallBoolt*: getAtSmallBoolSmallArrayG, \
   1906     smallBytest*: getAtSmallBytesSmallArrayG, \
   1907     smallDoublet*: getAtSmallDoubleSmallArrayG, \
   1908     smallIntt*: getAtSmallIntSmallArrayG, \
   1909     smallJsont*: getAtSmallJsonSmallArrayG, \
   1910     smallStringt*: getAtSmallStringSmallArrayG, \
   1911     void*: getAtVoidSmallArrayG, \
   1912     smallContainert*: getAtSmallContainerSmallArrayG, \
   1913     default: getAtSmallArrayG), \
   1914   smallJsont*: _Generic(key, \
   1915     char *: _Generic((returnType), \
   1916       baset*: getSmallJsonG, \
   1917       undefinedt*: getUndefinedSmallJsonG, \
   1918       bool: getBoolSmallJsonG, \
   1919       bool*: getBoolPSmallJsonG, \
   1920       double: getDoubleSmallJsonG, \
   1921       double*: getDoublePSmallJsonG, \
   1922       int64_t: getIntSmallJsonG, \
   1923       int64_t*: getIntPSmallJsonG, \
   1924       int32_t: getInt32SmallJsonG, \
   1925       int32_t*: getInt32PSmallJsonG, \
   1926       uint64_t: getUintSmallJsonG, \
   1927       uint64_t*: getUintPSmallJsonG, \
   1928       uint32_t: getUint32SmallJsonG, \
   1929       uint32_t*: getUint32PSmallJsonG, \
   1930       char*: getSSmallJsonG, \
   1931       smallDictt*: getDictSmallJsonG, \
   1932       smallArrayt*: getArraySmallJsonG, \
   1933       smallBoolt*: getSmallBoolSmallJsonG, \
   1934       smallBytest*: getSmallBytesSmallJsonG, \
   1935       smallDoublet*: getSmallDoubleSmallJsonG, \
   1936       smallIntt*: getSmallIntSmallJsonG, \
   1937       smallJsont*: getSmallJsonSmallJsonG, \
   1938       smallStringt*: getSmallStringSmallJsonG, \
   1939       void*: getVoidSmallJsonG, \
   1940       smallContainert*: getSmallContainerSmallJsonG, \
   1941       default: getSmallJsonG), \
   1942     const char *: _Generic((returnType), \
   1943       baset*: getSmallJsonG, \
   1944       undefinedt*: getUndefinedSmallJsonG, \
   1945       bool: getBoolSmallJsonG, \
   1946       bool*: getBoolPSmallJsonG, \
   1947       double: getDoubleSmallJsonG, \
   1948       double*: getDoublePSmallJsonG, \
   1949       int64_t: getIntSmallJsonG, \
   1950       int64_t*: getIntPSmallJsonG, \
   1951       int32_t: getInt32SmallJsonG, \
   1952       int32_t*: getInt32PSmallJsonG, \
   1953       uint64_t: getUintSmallJsonG, \
   1954       uint64_t*: getUintPSmallJsonG, \
   1955       uint32_t: getUint32SmallJsonG, \
   1956       uint32_t*: getUint32PSmallJsonG, \
   1957       char*: getSSmallJsonG, \
   1958       smallDictt*: getDictSmallJsonG, \
   1959       smallArrayt*: getArraySmallJsonG, \
   1960       smallBoolt*: getSmallBoolSmallJsonG, \
   1961       smallBytest*: getSmallBytesSmallJsonG, \
   1962       smallDoublet*: getSmallDoubleSmallJsonG, \
   1963       smallIntt*: getSmallIntSmallJsonG, \
   1964       smallJsont*: getSmallJsonSmallJsonG, \
   1965       smallStringt*: getSmallStringSmallJsonG, \
   1966       void*: getVoidSmallJsonG, \
   1967       smallContainert*: getSmallContainerSmallJsonG, \
   1968       default: getSmallJsonG), \
   1969     int64_t: _Generic((returnType), \
   1970       baset*: getAtSmallJsonG, \
   1971       undefinedt*: getAtUndefinedSmallJsonG, \
   1972       bool: getAtBoolSmallJsonG, \
   1973       bool*: getAtBoolPSmallJsonG, \
   1974       double: getAtDoubleSmallJsonG, \
   1975       double*: getAtDoublePSmallJsonG, \
   1976       int64_t: getAtIntSmallJsonG, \
   1977       int64_t*: getAtIntPSmallJsonG, \
   1978       int32_t: getAtInt32SmallJsonG, \
   1979       int32_t*: getAtInt32PSmallJsonG, \
   1980       uint64_t: getAtUintSmallJsonG, \
   1981       uint64_t*: getAtUintPSmallJsonG, \
   1982       uint32_t: getAtUint32SmallJsonG, \
   1983       uint32_t*: getAtUint32PSmallJsonG, \
   1984       char*: getAtSSmallJsonG, \
   1985       smallDictt*: getAtDictSmallJsonG, \
   1986       smallArrayt*: getAtArraySmallJsonG, \
   1987       smallBoolt*: getAtSmallBoolSmallJsonG, \
   1988       smallBytest*: getAtSmallBytesSmallJsonG, \
   1989       smallDoublet*: getAtSmallDoubleSmallJsonG, \
   1990       smallIntt*: getAtSmallIntSmallJsonG, \
   1991       smallJsont*: getAtSmallJsonSmallJsonG, \
   1992       smallStringt*: getAtSmallStringSmallJsonG, \
   1993       void*: getAtVoidSmallJsonG, \
   1994       smallContainert*: getAtSmallContainerSmallJsonG, \
   1995       default: getAtSmallJsonG), \
   1996     int32_t: _Generic((returnType), \
   1997       baset*: getAtSmallJsonG, \
   1998       undefinedt*: getAtUndefinedSmallJsonG, \
   1999       bool: getAtBoolSmallJsonG, \
   2000       bool*: getAtBoolPSmallJsonG, \
   2001       double: getAtDoubleSmallJsonG, \
   2002       double*: getAtDoublePSmallJsonG, \
   2003       int64_t: getAtIntSmallJsonG, \
   2004       int64_t*: getAtIntPSmallJsonG, \
   2005       int32_t: getAtInt32SmallJsonG, \
   2006       int32_t*: getAtInt32PSmallJsonG, \
   2007       uint64_t: getAtUintSmallJsonG, \
   2008       uint64_t*: getAtUintPSmallJsonG, \
   2009       uint32_t: getAtUint32SmallJsonG, \
   2010       uint32_t*: getAtUint32PSmallJsonG, \
   2011       char*: getAtSSmallJsonG, \
   2012       smallDictt*: getAtDictSmallJsonG, \
   2013       smallArrayt*: getAtArraySmallJsonG, \
   2014       smallBoolt*: getAtSmallBoolSmallJsonG, \
   2015       smallBytest*: getAtSmallBytesSmallJsonG, \
   2016       smallDoublet*: getAtSmallDoubleSmallJsonG, \
   2017       smallIntt*: getAtSmallIntSmallJsonG, \
   2018       smallJsont*: getAtSmallJsonSmallJsonG, \
   2019       smallStringt*: getAtSmallStringSmallJsonG, \
   2020       void*: getAtVoidSmallJsonG, \
   2021       smallContainert*: getAtSmallContainerSmallJsonG, \
   2022       default: getAtSmallJsonG), \
   2023     int16_t: _Generic((returnType), \
   2024       baset*: getAtSmallJsonG, \
   2025       undefinedt*: getAtUndefinedSmallJsonG, \
   2026       bool: getAtBoolSmallJsonG, \
   2027       bool*: getAtBoolPSmallJsonG, \
   2028       double: getAtDoubleSmallJsonG, \
   2029       double*: getAtDoublePSmallJsonG, \
   2030       int64_t: getAtIntSmallJsonG, \
   2031       int64_t*: getAtIntPSmallJsonG, \
   2032       int32_t: getAtInt32SmallJsonG, \
   2033       int32_t*: getAtInt32PSmallJsonG, \
   2034       uint64_t: getAtUintSmallJsonG, \
   2035       uint64_t*: getAtUintPSmallJsonG, \
   2036       uint32_t: getAtUint32SmallJsonG, \
   2037       uint32_t*: getAtUint32PSmallJsonG, \
   2038       char*: getAtSSmallJsonG, \
   2039       smallDictt*: getAtDictSmallJsonG, \
   2040       smallArrayt*: getAtArraySmallJsonG, \
   2041       smallBoolt*: getAtSmallBoolSmallJsonG, \
   2042       smallBytest*: getAtSmallBytesSmallJsonG, \
   2043       smallDoublet*: getAtSmallDoubleSmallJsonG, \
   2044       smallIntt*: getAtSmallIntSmallJsonG, \
   2045       smallJsont*: getAtSmallJsonSmallJsonG, \
   2046       smallStringt*: getAtSmallStringSmallJsonG, \
   2047       void*: getAtVoidSmallJsonG, \
   2048       smallContainert*: getAtSmallContainerSmallJsonG, \
   2049       default: getAtSmallJsonG), \
   2050     int8_t: _Generic((returnType), \
   2051       baset*: getAtSmallJsonG, \
   2052       undefinedt*: getAtUndefinedSmallJsonG, \
   2053       bool: getAtBoolSmallJsonG, \
   2054       bool*: getAtBoolPSmallJsonG, \
   2055       double: getAtDoubleSmallJsonG, \
   2056       double*: getAtDoublePSmallJsonG, \
   2057       int64_t: getAtIntSmallJsonG, \
   2058       int64_t*: getAtIntPSmallJsonG, \
   2059       int32_t: getAtInt32SmallJsonG, \
   2060       int32_t*: getAtInt32PSmallJsonG, \
   2061       uint64_t: getAtUintSmallJsonG, \
   2062       uint64_t*: getAtUintPSmallJsonG, \
   2063       uint32_t: getAtUint32SmallJsonG, \
   2064       uint32_t*: getAtUint32PSmallJsonG, \
   2065       char*: getAtSSmallJsonG, \
   2066       smallDictt*: getAtDictSmallJsonG, \
   2067       smallArrayt*: getAtArraySmallJsonG, \
   2068       smallBoolt*: getAtSmallBoolSmallJsonG, \
   2069       smallBytest*: getAtSmallBytesSmallJsonG, \
   2070       smallDoublet*: getAtSmallDoubleSmallJsonG, \
   2071       smallIntt*: getAtSmallIntSmallJsonG, \
   2072       smallJsont*: getAtSmallJsonSmallJsonG, \
   2073       smallStringt*: getAtSmallStringSmallJsonG, \
   2074       void*: getAtVoidSmallJsonG, \
   2075       smallContainert*: getAtSmallContainerSmallJsonG, \
   2076       default: getAtSmallJsonG), \
   2077     uint64_t: _Generic((returnType), \
   2078       baset*: getAtSmallJsonG, \
   2079       undefinedt*: getAtUndefinedSmallJsonG, \
   2080       bool: getAtBoolSmallJsonG, \
   2081       bool*: getAtBoolPSmallJsonG, \
   2082       double: getAtDoubleSmallJsonG, \
   2083       double*: getAtDoublePSmallJsonG, \
   2084       int64_t: getAtIntSmallJsonG, \
   2085       int64_t*: getAtIntPSmallJsonG, \
   2086       int32_t: getAtInt32SmallJsonG, \
   2087       int32_t*: getAtInt32PSmallJsonG, \
   2088       uint64_t: getAtUintSmallJsonG, \
   2089       uint64_t*: getAtUintPSmallJsonG, \
   2090       uint32_t: getAtUint32SmallJsonG, \
   2091       uint32_t*: getAtUint32PSmallJsonG, \
   2092       char*: getAtSSmallJsonG, \
   2093       smallDictt*: getAtDictSmallJsonG, \
   2094       smallArrayt*: getAtArraySmallJsonG, \
   2095       smallBoolt*: getAtSmallBoolSmallJsonG, \
   2096       smallBytest*: getAtSmallBytesSmallJsonG, \
   2097       smallDoublet*: getAtSmallDoubleSmallJsonG, \
   2098       smallIntt*: getAtSmallIntSmallJsonG, \
   2099       smallJsont*: getAtSmallJsonSmallJsonG, \
   2100       smallStringt*: getAtSmallStringSmallJsonG, \
   2101       void*: getAtVoidSmallJsonG, \
   2102       smallContainert*: getAtSmallContainerSmallJsonG, \
   2103       default: getAtSmallJsonG), \
   2104     uint32_t: _Generic((returnType), \
   2105       baset*: getAtSmallJsonG, \
   2106       undefinedt*: getAtUndefinedSmallJsonG, \
   2107       bool: getAtBoolSmallJsonG, \
   2108       bool*: getAtBoolPSmallJsonG, \
   2109       double: getAtDoubleSmallJsonG, \
   2110       double*: getAtDoublePSmallJsonG, \
   2111       int64_t: getAtIntSmallJsonG, \
   2112       int64_t*: getAtIntPSmallJsonG, \
   2113       int32_t: getAtInt32SmallJsonG, \
   2114       int32_t*: getAtInt32PSmallJsonG, \
   2115       uint64_t: getAtUintSmallJsonG, \
   2116       uint64_t*: getAtUintPSmallJsonG, \
   2117       uint32_t: getAtUint32SmallJsonG, \
   2118       uint32_t*: getAtUint32PSmallJsonG, \
   2119       char*: getAtSSmallJsonG, \
   2120       smallDictt*: getAtDictSmallJsonG, \
   2121       smallArrayt*: getAtArraySmallJsonG, \
   2122       smallBoolt*: getAtSmallBoolSmallJsonG, \
   2123       smallBytest*: getAtSmallBytesSmallJsonG, \
   2124       smallDoublet*: getAtSmallDoubleSmallJsonG, \
   2125       smallIntt*: getAtSmallIntSmallJsonG, \
   2126       smallJsont*: getAtSmallJsonSmallJsonG, \
   2127       smallStringt*: getAtSmallStringSmallJsonG, \
   2128       void*: getAtVoidSmallJsonG, \
   2129       smallContainert*: getAtSmallContainerSmallJsonG, \
   2130       default: getAtSmallJsonG), \
   2131     uint16_t: _Generic((returnType), \
   2132       baset*: getAtSmallJsonG, \
   2133       undefinedt*: getAtUndefinedSmallJsonG, \
   2134       bool: getAtBoolSmallJsonG, \
   2135       bool*: getAtBoolPSmallJsonG, \
   2136       double: getAtDoubleSmallJsonG, \
   2137       double*: getAtDoublePSmallJsonG, \
   2138       int64_t: getAtIntSmallJsonG, \
   2139       int64_t*: getAtIntPSmallJsonG, \
   2140       int32_t: getAtInt32SmallJsonG, \
   2141       int32_t*: getAtInt32PSmallJsonG, \
   2142       uint64_t: getAtUintSmallJsonG, \
   2143       uint64_t*: getAtUintPSmallJsonG, \
   2144       uint32_t: getAtUint32SmallJsonG, \
   2145       uint32_t*: getAtUint32PSmallJsonG, \
   2146       char*: getAtSSmallJsonG, \
   2147       smallDictt*: getAtDictSmallJsonG, \
   2148       smallArrayt*: getAtArraySmallJsonG, \
   2149       smallBoolt*: getAtSmallBoolSmallJsonG, \
   2150       smallBytest*: getAtSmallBytesSmallJsonG, \
   2151       smallDoublet*: getAtSmallDoubleSmallJsonG, \
   2152       smallIntt*: getAtSmallIntSmallJsonG, \
   2153       smallJsont*: getAtSmallJsonSmallJsonG, \
   2154       smallStringt*: getAtSmallStringSmallJsonG, \
   2155       void*: getAtVoidSmallJsonG, \
   2156       smallContainert*: getAtSmallContainerSmallJsonG, \
   2157       default: getAtSmallJsonG), \
   2158     uint8_t: _Generic((returnType), \
   2159       baset*: getAtSmallJsonG, \
   2160       undefinedt*: getAtUndefinedSmallJsonG, \
   2161       bool: getAtBoolSmallJsonG, \
   2162       bool*: getAtBoolPSmallJsonG, \
   2163       double: getAtDoubleSmallJsonG, \
   2164       double*: getAtDoublePSmallJsonG, \
   2165       int64_t: getAtIntSmallJsonG, \
   2166       int64_t*: getAtIntPSmallJsonG, \
   2167       int32_t: getAtInt32SmallJsonG, \
   2168       int32_t*: getAtInt32PSmallJsonG, \
   2169       uint64_t: getAtUintSmallJsonG, \
   2170       uint64_t*: getAtUintPSmallJsonG, \
   2171       uint32_t: getAtUint32SmallJsonG, \
   2172       uint32_t*: getAtUint32PSmallJsonG, \
   2173       char*: getAtSSmallJsonG, \
   2174       smallDictt*: getAtDictSmallJsonG, \
   2175       smallArrayt*: getAtArraySmallJsonG, \
   2176       smallBoolt*: getAtSmallBoolSmallJsonG, \
   2177       smallBytest*: getAtSmallBytesSmallJsonG, \
   2178       smallDoublet*: getAtSmallDoubleSmallJsonG, \
   2179       smallIntt*: getAtSmallIntSmallJsonG, \
   2180       smallJsont*: getAtSmallJsonSmallJsonG, \
   2181       smallStringt*: getAtSmallStringSmallJsonG, \
   2182       void*: getAtVoidSmallJsonG, \
   2183       smallContainert*: getAtSmallContainerSmallJsonG, \
   2184       default: getAtSmallJsonG), \
   2185     default: getSmallJsonG), \
   2186   smallBytest*: getAtSmallBytesG, \
   2187   smallStringt*: getAtSmallStringG, \
   2188   smallBoolt*: _Generic((returnType), \
   2189     bool: getBoolSmallBoolG, \
   2190     bool*: getBoolPSmallBoolG, \
   2191     default: getBoolPSmallBoolG), \
   2192   smallContainert*: getSmallContainerG, \
   2193   smallDoublet*: _Generic((returnType), \
   2194     double: getDoubleSmallDoubleG, \
   2195     double*: getDoublePSmallDoubleG, \
   2196     default: getDoublePSmallDoubleG), \
   2197   smallIntt*: _Generic((returnType), \
   2198     int64_t: getIntSmallIntG, \
   2199     int64_t*: getIntPSmallIntG, \
   2200     int32_t: getInt32SmallIntG, \
   2201     int32_t*: getInt32PSmallIntG, \
   2202     uint64_t: getUintSmallIntG, \
   2203     uint64_t*: getUintPSmallIntG, \
   2204     uint32_t: getUint32SmallIntG, \
   2205     uint32_t*: getUint32PSmallIntG, \
   2206     default: getIntPSmallIntG), \
   2207   char *: getSG, \
   2208   const char *: getSG, \
   2209   char **: iListGetG, \
   2210   const char **: iListGetCG \
   2211   )(self, returnType, key)
   2212 
   2213 
   2214 #define getNDupO(self, key) (self)->f->getNDup(self, key)
   2215 #define getAtNDupO(self, index) (self)->f->getAtNDup(self, index)
   2216 #define getNDupG(self, returnType, key) _Generic((self), \
   2217   smallDictt*: _Generic(key, \
   2218     char *: _Generic((returnType), \
   2219       baset*: getNDupSmallDictG, \
   2220       undefinedt*: getNDupUndefinedSmallDictG, \
   2221       bool: getNDupBoolSmallDictG, \
   2222       double: getNDupDoubleSmallDictG, \
   2223       int64_t: getNDupIntSmallDictG, \
   2224       int32_t: getNDupInt32SmallDictG, \
   2225       uint64_t: getNDupUintSmallDictG, \
   2226       uint32_t: getNDupUint32SmallDictG, \
   2227       char*: getNDupSSmallDictG, \
   2228       smallDictt*: getNDupDictSmallDictG, \
   2229       smallArrayt*: getNDupArraySmallDictG, \
   2230       smallBoolt*: getNDupSmallBoolSmallDictG, \
   2231       smallBytest*: getNDupSmallBytesSmallDictG, \
   2232       smallDoublet*: getNDupSmallDoubleSmallDictG, \
   2233       smallIntt*: getNDupSmallIntSmallDictG, \
   2234       smallJsont*: getNDupSmallJsonSmallDictG, \
   2235       smallStringt*: getNDupSmallStringSmallDictG, \
   2236       void*: getNDupVoidSmallDictG, \
   2237       smallContainert*: getNDupSmallContainerSmallDictG, \
   2238       default: getNDupSmallDictG), \
   2239     const char *: _Generic((returnType), \
   2240       baset*: getNDupSmallDictG, \
   2241       undefinedt*: getNDupUndefinedSmallDictG, \
   2242       bool: getNDupBoolSmallDictG, \
   2243       double: getNDupDoubleSmallDictG, \
   2244       int64_t: getNDupIntSmallDictG, \
   2245       int32_t: getNDupInt32SmallDictG, \
   2246       uint64_t: getNDupUintSmallDictG, \
   2247       uint32_t: getNDupUint32SmallDictG, \
   2248       char*: getNDupSSmallDictG, \
   2249       smallDictt*: getNDupDictSmallDictG, \
   2250       smallArrayt*: getNDupArraySmallDictG, \
   2251       smallBoolt*: getNDupSmallBoolSmallDictG, \
   2252       smallBytest*: getNDupSmallBytesSmallDictG, \
   2253       smallDoublet*: getNDupSmallDoubleSmallDictG, \
   2254       smallIntt*: getNDupSmallIntSmallDictG, \
   2255       smallJsont*: getNDupSmallJsonSmallDictG, \
   2256       smallStringt*: getNDupSmallStringSmallDictG, \
   2257       void*: getNDupVoidSmallDictG, \
   2258       smallContainert*: getNDupSmallContainerSmallDictG, \
   2259       default: getNDupSmallDictG), \
   2260     char: _Generic((returnType), \
   2261       baset*: getNDupKCharSmallDictG, \
   2262       undefinedt*: getNDupUndefinedKCharSmallDictG, \
   2263       bool: getNDupBoolKCharSmallDictG, \
   2264       double: getNDupDoubleKCharSmallDictG, \
   2265       int64_t: getNDupIntKCharSmallDictG, \
   2266       int32_t: getNDupInt32KCharSmallDictG, \
   2267       uint64_t: getNDupUintKCharSmallDictG, \
   2268       uint32_t: getNDupUint32KCharSmallDictG, \
   2269       char*: getNDupSKCharSmallDictG, \
   2270       smallDictt*: getNDupDictKCharSmallDictG, \
   2271       smallArrayt*: getNDupArrayKCharSmallDictG, \
   2272       smallBoolt*: getNDupSmallBoolKCharSmallDictG, \
   2273       smallBytest*: getNDupSmallBytesKCharSmallDictG, \
   2274       smallDoublet*: getNDupSmallDoubleKCharSmallDictG, \
   2275       smallIntt*: getNDupSmallIntKCharSmallDictG, \
   2276       smallJsont*: getNDupSmallJsonKCharSmallDictG, \
   2277       smallStringt*: getNDupSmallStringKCharSmallDictG, \
   2278       void*: getNDupVoidKCharSmallDictG, \
   2279       smallContainert*: getNDupSmallContainerKCharSmallDictG, \
   2280       default: getNDupKCharSmallDictG), \
   2281     int: _Generic((returnType), \
   2282       baset*: getNDupKCharSmallDictG, \
   2283       undefinedt*: getNDupUndefinedKCharSmallDictG, \
   2284       bool: getNDupBoolKCharSmallDictG, \
   2285       double: getNDupDoubleKCharSmallDictG, \
   2286       int64_t: getNDupIntKCharSmallDictG, \
   2287       int32_t: getNDupInt32KCharSmallDictG, \
   2288       uint64_t: getNDupUintKCharSmallDictG, \
   2289       uint32_t: getNDupUint32KCharSmallDictG, \
   2290       char*: getNDupSKCharSmallDictG, \
   2291       smallDictt*: getNDupDictKCharSmallDictG, \
   2292       smallArrayt*: getNDupArrayKCharSmallDictG, \
   2293       smallBoolt*: getNDupSmallBoolKCharSmallDictG, \
   2294       smallBytest*: getNDupSmallBytesKCharSmallDictG, \
   2295       smallDoublet*: getNDupSmallDoubleKCharSmallDictG, \
   2296       smallIntt*: getNDupSmallIntKCharSmallDictG, \
   2297       smallJsont*: getNDupSmallJsonKCharSmallDictG, \
   2298       smallStringt*: getNDupSmallStringKCharSmallDictG, \
   2299       void*: getNDupVoidKCharSmallDictG, \
   2300       smallContainert*: getNDupSmallContainerKCharSmallDictG, \
   2301       default: getNDupKCharSmallDictG), \
   2302     default: getNDupSmallDictG \
   2303     ), \
   2304   smallArrayt*: _Generic((returnType), \
   2305     baset*: getAtNDupSmallArrayG, \
   2306     undefinedt*: getAtNDupUndefinedSmallArrayG, \
   2307     bool: getAtNDupBoolSmallArrayG, \
   2308     double: getAtNDupDoubleSmallArrayG, \
   2309     int64_t: getAtNDupIntSmallArrayG, \
   2310     int32_t: getAtNDupInt32SmallArrayG, \
   2311     uint64_t: getAtNDupUintSmallArrayG, \
   2312     uint32_t: getAtNDupUint32SmallArrayG, \
   2313     char*: getAtNDupSSmallArrayG, \
   2314     smallDictt*: getAtNDupDictSmallArrayG, \
   2315     smallArrayt*: getAtNDupArraySmallArrayG, \
   2316     smallBoolt*: getAtNDupSmallBoolSmallArrayG, \
   2317     smallBytest*: getAtNDupSmallBytesSmallArrayG, \
   2318     smallDoublet*: getAtNDupSmallDoubleSmallArrayG, \
   2319     smallIntt*: getAtNDupSmallIntSmallArrayG, \
   2320     smallJsont*: getAtNDupSmallJsonSmallArrayG, \
   2321     smallStringt*: getAtNDupSmallStringSmallArrayG, \
   2322     void*: getAtNDupVoidSmallArrayG, \
   2323     smallContainert*: getAtNDupSmallContainerSmallArrayG, \
   2324     default: getAtNDupSmallArrayG), \
   2325   smallJsont*:  _Generic(key, \
   2326     char *: _Generic((returnType), \
   2327       baset*: getNDupSmallJsonG, \
   2328       undefinedt*: getNDupUndefinedSmallJsonG, \
   2329       bool: getNDupBoolSmallJsonG, \
   2330       double: getNDupDoubleSmallJsonG, \
   2331       int64_t: getNDupIntSmallJsonG, \
   2332       int32_t: getNDupInt32SmallJsonG, \
   2333       uint64_t: getNDupUintSmallJsonG, \
   2334       uint32_t: getNDupUint32SmallJsonG, \
   2335       char*: getNDupSSmallJsonG, \
   2336       smallDictt*: getNDupDictSmallJsonG, \
   2337       smallArrayt*: getNDupArraySmallJsonG, \
   2338       smallBoolt*: getNDupSmallBoolSmallJsonG, \
   2339       smallBytest*: getNDupSmallBytesSmallJsonG, \
   2340       smallDoublet*: getNDupSmallDoubleSmallJsonG, \
   2341       smallIntt*: getNDupSmallIntSmallJsonG, \
   2342       smallJsont*: getNDupSmallJsonSmallJsonG, \
   2343       smallStringt*: getNDupSmallStringSmallJsonG, \
   2344       void*: getNDupVoidSmallJsonG, \
   2345       smallContainert*: getNDupSmallContainerSmallJsonG, \
   2346       default: getNDupSmallJsonG), \
   2347     const char *: _Generic((returnType), \
   2348       baset*: getNDupSmallJsonG, \
   2349       undefinedt*: getNDupUndefinedSmallJsonG, \
   2350       bool: getNDupBoolSmallJsonG, \
   2351       double: getNDupDoubleSmallJsonG, \
   2352       int64_t: getNDupIntSmallJsonG, \
   2353       int32_t: getNDupInt32SmallJsonG, \
   2354       uint64_t: getNDupUintSmallJsonG, \
   2355       uint32_t: getNDupUint32SmallJsonG, \
   2356       char*: getNDupSSmallJsonG, \
   2357       smallDictt*: getNDupDictSmallJsonG, \
   2358       smallArrayt*: getNDupArraySmallJsonG, \
   2359       smallBoolt*: getNDupSmallBoolSmallJsonG, \
   2360       smallBytest*: getNDupSmallBytesSmallJsonG, \
   2361       smallDoublet*: getNDupSmallDoubleSmallJsonG, \
   2362       smallIntt*: getNDupSmallIntSmallJsonG, \
   2363       smallJsont*: getNDupSmallJsonSmallJsonG, \
   2364       smallStringt*: getNDupSmallStringSmallJsonG, \
   2365       void*: getNDupVoidSmallJsonG, \
   2366       smallContainert*: getNDupSmallContainerSmallJsonG, \
   2367       default: getNDupSmallJsonG), \
   2368     int64_t: _Generic((returnType), \
   2369       baset*: getAtNDupSmallJsonG, \
   2370       undefinedt*: getAtNDupUndefinedSmallJsonG, \
   2371       bool: getAtNDupBoolSmallJsonG, \
   2372       double: getAtNDupDoubleSmallJsonG, \
   2373       int64_t: getAtNDupIntSmallJsonG, \
   2374       int32_t: getAtNDupInt32SmallJsonG, \
   2375       uint64_t: getAtNDupUintSmallJsonG, \
   2376       uint32_t: getAtNDupUint32SmallJsonG, \
   2377       char*: getAtNDupSSmallJsonG, \
   2378       smallDictt*: getAtNDupDictSmallJsonG, \
   2379       smallArrayt*: getAtNDupArraySmallJsonG, \
   2380       smallBoolt*: getAtNDupSmallBoolSmallJsonG, \
   2381       smallBytest*: getAtNDupSmallBytesSmallJsonG, \
   2382       smallDoublet*: getAtNDupSmallDoubleSmallJsonG, \
   2383       smallIntt*: getAtNDupSmallIntSmallJsonG, \
   2384       smallJsont*: getAtNDupSmallJsonSmallJsonG, \
   2385       smallStringt*: getAtNDupSmallStringSmallJsonG, \
   2386       void*: getAtNDupVoidSmallJsonG, \
   2387       smallContainert*: getAtNDupSmallContainerSmallJsonG, \
   2388       default: getAtNDupSmallJsonG), \
   2389     int32_t: _Generic((returnType), \
   2390       baset*: getAtNDupSmallJsonG, \
   2391       undefinedt*: getAtNDupUndefinedSmallJsonG, \
   2392       bool: getAtNDupBoolSmallJsonG, \
   2393       double: getAtNDupDoubleSmallJsonG, \
   2394       int64_t: getAtNDupIntSmallJsonG, \
   2395       int32_t: getAtNDupInt32SmallJsonG, \
   2396       uint64_t: getAtNDupUintSmallJsonG, \
   2397       uint32_t: getAtNDupUint32SmallJsonG, \
   2398       char*: getAtNDupSSmallJsonG, \
   2399       smallDictt*: getAtNDupDictSmallJsonG, \
   2400       smallArrayt*: getAtNDupArraySmallJsonG, \
   2401       smallBoolt*: getAtNDupSmallBoolSmallJsonG, \
   2402       smallBytest*: getAtNDupSmallBytesSmallJsonG, \
   2403       smallDoublet*: getAtNDupSmallDoubleSmallJsonG, \
   2404       smallIntt*: getAtNDupSmallIntSmallJsonG, \
   2405       smallJsont*: getAtNDupSmallJsonSmallJsonG, \
   2406       smallStringt*: getAtNDupSmallStringSmallJsonG, \
   2407       void*: getAtNDupVoidSmallJsonG, \
   2408       smallContainert*: getAtNDupSmallContainerSmallJsonG, \
   2409       default: getAtNDupSmallJsonG), \
   2410     int16_t: _Generic((returnType), \
   2411       baset*: getAtNDupSmallJsonG, \
   2412       undefinedt*: getAtNDupUndefinedSmallJsonG, \
   2413       bool: getAtNDupBoolSmallJsonG, \
   2414       double: getAtNDupDoubleSmallJsonG, \
   2415       int64_t: getAtNDupIntSmallJsonG, \
   2416       int32_t: getAtNDupInt32SmallJsonG, \
   2417       uint64_t: getAtNDupUintSmallJsonG, \
   2418       uint32_t: getAtNDupUint32SmallJsonG, \
   2419       char*: getAtNDupSSmallJsonG, \
   2420       smallDictt*: getAtNDupDictSmallJsonG, \
   2421       smallArrayt*: getAtNDupArraySmallJsonG, \
   2422       smallBoolt*: getAtNDupSmallBoolSmallJsonG, \
   2423       smallBytest*: getAtNDupSmallBytesSmallJsonG, \
   2424       smallDoublet*: getAtNDupSmallDoubleSmallJsonG, \
   2425       smallIntt*: getAtNDupSmallIntSmallJsonG, \
   2426       smallJsont*: getAtNDupSmallJsonSmallJsonG, \
   2427       smallStringt*: getAtNDupSmallStringSmallJsonG, \
   2428       void*: getAtNDupVoidSmallJsonG, \
   2429       smallContainert*: getAtNDupSmallContainerSmallJsonG, \
   2430       default: getAtNDupSmallJsonG), \
   2431     int8_t: _Generic((returnType), \
   2432       baset*: getAtNDupSmallJsonG, \
   2433       undefinedt*: getAtNDupUndefinedSmallJsonG, \
   2434       bool: getAtNDupBoolSmallJsonG, \
   2435       double: getAtNDupDoubleSmallJsonG, \
   2436       int64_t: getAtNDupIntSmallJsonG, \
   2437       int32_t: getAtNDupInt32SmallJsonG, \
   2438       uint64_t: getAtNDupUintSmallJsonG, \
   2439       uint32_t: getAtNDupUint32SmallJsonG, \
   2440       char*: getAtNDupSSmallJsonG, \
   2441       smallDictt*: getAtNDupDictSmallJsonG, \
   2442       smallArrayt*: getAtNDupArraySmallJsonG, \
   2443       smallBoolt*: getAtNDupSmallBoolSmallJsonG, \
   2444       smallBytest*: getAtNDupSmallBytesSmallJsonG, \
   2445       smallDoublet*: getAtNDupSmallDoubleSmallJsonG, \
   2446       smallIntt*: getAtNDupSmallIntSmallJsonG, \
   2447       smallJsont*: getAtNDupSmallJsonSmallJsonG, \
   2448       smallStringt*: getAtNDupSmallStringSmallJsonG, \
   2449       void*: getAtNDupVoidSmallJsonG, \
   2450       smallContainert*: getAtNDupSmallContainerSmallJsonG, \
   2451       default: getAtNDupSmallJsonG), \
   2452     uint64_t: _Generic((returnType), \
   2453       baset*: getAtNDupSmallJsonG, \
   2454       undefinedt*: getAtNDupUndefinedSmallJsonG, \
   2455       bool: getAtNDupBoolSmallJsonG, \
   2456       double: getAtNDupDoubleSmallJsonG, \
   2457       int64_t: getAtNDupIntSmallJsonG, \
   2458       int32_t: getAtNDupInt32SmallJsonG, \
   2459       uint64_t: getAtNDupUintSmallJsonG, \
   2460       uint32_t: getAtNDupUint32SmallJsonG, \
   2461       char*: getAtNDupSSmallJsonG, \
   2462       smallDictt*: getAtNDupDictSmallJsonG, \
   2463       smallArrayt*: getAtNDupArraySmallJsonG, \
   2464       smallBoolt*: getAtNDupSmallBoolSmallJsonG, \
   2465       smallBytest*: getAtNDupSmallBytesSmallJsonG, \
   2466       smallDoublet*: getAtNDupSmallDoubleSmallJsonG, \
   2467       smallIntt*: getAtNDupSmallIntSmallJsonG, \
   2468       smallJsont*: getAtNDupSmallJsonSmallJsonG, \
   2469       smallStringt*: getAtNDupSmallStringSmallJsonG, \
   2470       void*: getAtNDupVoidSmallJsonG, \
   2471       smallContainert*: getAtNDupSmallContainerSmallJsonG, \
   2472       default: getAtNDupSmallJsonG), \
   2473     uint32_t: _Generic((returnType), \
   2474       baset*: getAtNDupSmallJsonG, \
   2475       undefinedt*: getAtNDupUndefinedSmallJsonG, \
   2476       bool: getAtNDupBoolSmallJsonG, \
   2477       double: getAtNDupDoubleSmallJsonG, \
   2478       int64_t: getAtNDupIntSmallJsonG, \
   2479       int32_t: getAtNDupInt32SmallJsonG, \
   2480       uint64_t: getAtNDupUintSmallJsonG, \
   2481       uint32_t: getAtNDupUint32SmallJsonG, \
   2482       char*: getAtNDupSSmallJsonG, \
   2483       smallDictt*: getAtNDupDictSmallJsonG, \
   2484       smallArrayt*: getAtNDupArraySmallJsonG, \
   2485       smallBoolt*: getAtNDupSmallBoolSmallJsonG, \
   2486       smallBytest*: getAtNDupSmallBytesSmallJsonG, \
   2487       smallDoublet*: getAtNDupSmallDoubleSmallJsonG, \
   2488       smallIntt*: getAtNDupSmallIntSmallJsonG, \
   2489       smallJsont*: getAtNDupSmallJsonSmallJsonG, \
   2490       smallStringt*: getAtNDupSmallStringSmallJsonG, \
   2491       void*: getAtNDupVoidSmallJsonG, \
   2492       smallContainert*: getAtNDupSmallContainerSmallJsonG, \
   2493       default: getAtNDupSmallJsonG), \
   2494     uint16_t: _Generic((returnType), \
   2495       baset*: getAtNDupSmallJsonG, \
   2496       undefinedt*: getAtNDupUndefinedSmallJsonG, \
   2497       bool: getAtNDupBoolSmallJsonG, \
   2498       double: getAtNDupDoubleSmallJsonG, \
   2499       int64_t: getAtNDupIntSmallJsonG, \
   2500       int32_t: getAtNDupInt32SmallJsonG, \
   2501       uint64_t: getAtNDupUintSmallJsonG, \
   2502       uint32_t: getAtNDupUint32SmallJsonG, \
   2503       char*: getAtNDupSSmallJsonG, \
   2504       smallDictt*: getAtNDupDictSmallJsonG, \
   2505       smallArrayt*: getAtNDupArraySmallJsonG, \
   2506       smallBoolt*: getAtNDupSmallBoolSmallJsonG, \
   2507       smallBytest*: getAtNDupSmallBytesSmallJsonG, \
   2508       smallDoublet*: getAtNDupSmallDoubleSmallJsonG, \
   2509       smallIntt*: getAtNDupSmallIntSmallJsonG, \
   2510       smallJsont*: getAtNDupSmallJsonSmallJsonG, \
   2511       smallStringt*: getAtNDupSmallStringSmallJsonG, \
   2512       void*: getAtNDupVoidSmallJsonG, \
   2513       smallContainert*: getAtNDupSmallContainerSmallJsonG, \
   2514       default: getAtNDupSmallJsonG), \
   2515     uint8_t: _Generic((returnType), \
   2516       baset*: getAtNDupSmallJsonG, \
   2517       undefinedt*: getAtNDupUndefinedSmallJsonG, \
   2518       bool: getAtNDupBoolSmallJsonG, \
   2519       double: getAtNDupDoubleSmallJsonG, \
   2520       int64_t: getAtNDupIntSmallJsonG, \
   2521       int32_t: getAtNDupInt32SmallJsonG, \
   2522       uint64_t: getAtNDupUintSmallJsonG, \
   2523       uint32_t: getAtNDupUint32SmallJsonG, \
   2524       char*: getAtNDupSSmallJsonG, \
   2525       smallDictt*: getAtNDupDictSmallJsonG, \
   2526       smallArrayt*: getAtNDupArraySmallJsonG, \
   2527       smallBoolt*: getAtNDupSmallBoolSmallJsonG, \
   2528       smallBytest*: getAtNDupSmallBytesSmallJsonG, \
   2529       smallDoublet*: getAtNDupSmallDoubleSmallJsonG, \
   2530       smallIntt*: getAtNDupSmallIntSmallJsonG, \
   2531       smallJsont*: getAtNDupSmallJsonSmallJsonG, \
   2532       smallStringt*: getAtNDupSmallStringSmallJsonG, \
   2533       void*: getAtNDupVoidSmallJsonG, \
   2534       smallContainert*: getAtNDupSmallContainerSmallJsonG, \
   2535       default: getAtNDupSmallJsonG), \
   2536     default: getNDupSmallJsonG), \
   2537   smallBytest*: getAtSmallBytesG, \
   2538   smallStringt*: getAtSmallStringG, \
   2539   smallBoolt*: getBoolSmallBoolG, \
   2540   smallContainert*: getSmallContainerG, \
   2541   smallDoublet*: getDoubleSmallDoubleG, \
   2542   smallIntt*: _Generic((returnType), \
   2543     int64_t: getIntSmallIntG, \
   2544     int32_t: getInt32SmallIntG, \
   2545     uint64_t: getUintSmallIntG, \
   2546     uint32_t: getUint32SmallIntG, \
   2547     default: getIntSmallIntG), \
   2548   char *: getSG, \
   2549   const char *: getSG, \
   2550   char **: listGetG, \
   2551   const char **: listGetCG \
   2552   )(self, returnType, key)
   2553 
   2554 #define getNumO(self, key) (self)->f->getNum(self, key)
   2555 #define getNumG(self, key) _Generic((self), \
   2556   smallDictt*: getNumSmallDictG, \
   2557   smallArrayt*: getNumSmallArrayG, \
   2558   smallJsont*: _Generic(key, \
   2559     char*: getNumSmallJsonG, \
   2560     const char*: getNumSmallJsonG, \
   2561     int64_t: getNumAtSmallJsonG, \
   2562     int32_t: getNumAtSmallJsonG, \
   2563     int16_t: getNumAtSmallJsonG, \
   2564     int8_t: getNumAtSmallJsonG, \
   2565     uint64_t: getNumAtSmallJsonG, \
   2566     uint32_t: getNumAtSmallJsonG, \
   2567     uint16_t: getNumAtSmallJsonG, \
   2568     uint8_t: getNumAtSmallJsonG) \
   2569   )(self, key)
   2570 
   2571 #define appendO(self, obj) (self)->f->append(self, obj)
   2572 #define mergeO(self, obj) (self)->f->merge(self, obj)
   2573 #define mergeG appendG
   2574 #define appendG(self, obj) _Generic((self), \
   2575   smallDictt*: _Generic(obj, \
   2576     smallDictt*: mergeSmallDictG, \
   2577     smallJsont*: mergeSmallJsonSmallDictG, \
   2578     default: mergeSmallDictG), \
   2579   smallArrayt*: _Generic(obj, \
   2580     smallArrayt *: appendSmallArrayG, \
   2581     smallJsont *: appendSmallJsonSmallArrayG, \
   2582     char **: appendArraySmallArrayG, \
   2583     const char **: appendCArraySmallArrayG, \
   2584     default: appendSmallArrayG), \
   2585   smallJsont*: _Generic(obj, \
   2586     smallArrayt *: appendSmallJsonG, \
   2587     char **: appendArraySmallJsonG, \
   2588     const char **: appendCArraySmallJsonG, \
   2589     smallDictt *: mergeDictSmallJsonG, \
   2590     smallJsont *: mergeSmallJsonG, \
   2591     default: mergeSmallJsonG), \
   2592   smallStringt*: _Generic((obj), \
   2593     smallStringt*: appendSmallStringG, \
   2594     smallJsont*: appendSmallJsonSmallStringG, \
   2595     char *: appendSSmallStringG, \
   2596     char: appendCharSmallStringG, \
   2597     int: appendCharSmallStringG, \
   2598     default: appendSSmallStringG), \
   2599   char: appendSChar, \
   2600   int: appendSChar, \
   2601   char *: _Generic(obj, \
   2602     char *: appendS, \
   2603     const char *: appendS, \
   2604     char: appendCharS, \
   2605     int: appendCharS, \
   2606     default: appendS \
   2607     ), \
   2608   const char *: _Generic(obj, \
   2609     char *: appendS, \
   2610     const char *: appendS, \
   2611     char: appendCharS, \
   2612     int: appendCharS, \
   2613     default: appendS \
   2614     ), \
   2615   char **: _Generic(obj, \
   2616     char *: iAppendS, \
   2617     const char *: iAppendS, \
   2618     char: iAppendCharS, \
   2619     int: iAppendCharS, \
   2620     default: iAppendS \
   2621     ), \
   2622   char ***: iListAppendS \
   2623   )(self, obj)
   2624 
   2625 #define appendNSmashO(self, obj) (self)->f->appendNSmash(self, obj)
   2626 #define mergeNSmashO(self, obj) (self)->f->mergeNSmash(self, obj)
   2627 #define mergeNSmashG appendNSmashG
   2628 #define appendNFreeG appendNSmashG
   2629 #define mergeNFreeG appendNSmashG
   2630 #define appendNSmashG(self, obj) _Generic((self), \
   2631   smallDictt*: _Generic(obj, \
   2632     smallDictt*: mergeNSmashSmallDictG, \
   2633     smallJsont*: mergeNSmashSmallJsonSmallDictG, \
   2634     default: mergeNSmashSmallDictG), \
   2635   smallArrayt*: _Generic(obj, \
   2636     smallArrayt *: appendNSmashSmallArrayG, \
   2637     smallJsont *: appendNSmashSmallJsonSmallArrayG, \
   2638     char **: appendNSmashArraySmallArrayG, \
   2639     default: appendNSmashSmallArrayG), \
   2640   smallJsont*: _Generic(obj, \
   2641     smallArrayt *: appendNSmashSmallJsonG, \
   2642     char **: appendNSmashArraySmallJsonG, \
   2643     smallDictt *: mergeDictNSmashSmallJsonG, \
   2644     smallJsont *: mergeNSmashSmallJsonG, \
   2645     default: mergeNSmashSmallJsonG), \
   2646   smallStringt*: _Generic((obj), \
   2647     smallStringt*: appendNSmashSmallStringG, \
   2648     smallJsont*: appendNSmashSmallJsonSmallStringG, \
   2649     char *: appendNSmashSSmallStringG, \
   2650     char: appendCharSmallStringG, \
   2651     int: appendCharSmallStringG, \
   2652     default: appendSSmallStringG), \
   2653   char **: _Generic(obj, \
   2654     char *: iAppendNFreeS, \
   2655     char: iAppendCharS, \
   2656     int: iAppendCharS, \
   2657     default: iAppendNFreeS \
   2658     ), \
   2659   char ***: iListAppendNSmashS \
   2660   )(self, obj)
   2661 
   2662 #define prependO(self, value) (self)->f->prepend(self, value)
   2663 #define prependG(self, value) _Generic((self), \
   2664   smallArrayt*: _Generic((value), \
   2665     baset*: prependSmallArrayG, \
   2666     bool: prependBoolSmallArrayG, \
   2667     double: prependDoubleSmallArrayG, \
   2668     int64_t: prependIntSmallArrayG, \
   2669     int32_t: prependIntSmallArrayG, \
   2670     uint32_t: prependIntSmallArrayG, \
   2671     uint64_t: prependIntSmallArrayG, \
   2672     char*: prependSSmallArrayG, \
   2673     char: prependCharSmallArrayG, \
   2674     const char*: prependSSmallArrayG, \
   2675     smallDictt*: prependDictSmallArrayG, \
   2676     smallArrayt*: prependArraySmallArrayG, \
   2677     char **: prependArraycSmallArrayG, \
   2678     const char **: prependCArraycSmallArrayG, \
   2679     smallBoolt*: prependSmallBoolSmallArrayG, \
   2680     smallBytest*: prependSmallBytesSmallArrayG, \
   2681     smallDoublet*: prependSmallDoubleSmallArrayG, \
   2682     smallIntt*: prependSmallIntSmallArrayG, \
   2683     smallJsont*: prependSmallJsonSmallArrayG, \
   2684     smallStringt*: prependSmallStringSmallArrayG, \
   2685     smallContainert*: prependSmallContainerSmallArrayG, \
   2686     undefinedt*: prependUndefinedSmallArrayG, \
   2687     default: prependVoidSmallArrayG), \
   2688   smallJsont*: _Generic((value), \
   2689     baset*: prependSmallJsonG, \
   2690     bool: prependBoolSmallJsonG, \
   2691     double: prependDoubleSmallJsonG, \
   2692     int64_t: prependIntSmallJsonG, \
   2693     int32_t: prependIntSmallJsonG, \
   2694     uint32_t: prependIntSmallJsonG, \
   2695     uint64_t: prependIntSmallJsonG, \
   2696     char*: prependSSmallJsonG, \
   2697     char: prependCharSmallJsonG, \
   2698     const char*: prependSSmallJsonG, \
   2699     smallDictt*: prependDictSmallJsonG, \
   2700     smallArrayt*: prependArraySmallJsonG, \
   2701     char **: prependArraycSmallJsonG, \
   2702     const char **: prependCArraycSmallJsonG, \
   2703     smallBoolt*: prependSmallBoolSmallJsonG, \
   2704     smallBytest*: prependSmallBytesSmallJsonG, \
   2705     smallDoublet*: prependSmallDoubleSmallJsonG, \
   2706     smallIntt*: prependSmallIntSmallJsonG, \
   2707     smallJsont*: prependSmallJsonSmallJsonG, \
   2708     smallStringt*: prependSmallStringSmallJsonG, \
   2709     smallContainert*: prependSmallContainerSmallJsonG, \
   2710     undefinedt*: prependUndefinedSmallJsonG, \
   2711     default: prependVoidSmallJsonG), \
   2712   smallStringt*: _Generic((value), \
   2713     smallStringt*: prependSmallStringG, \
   2714     smallJsont*: prependSmallJsonSmallStringG, \
   2715     char *: prependSSmallStringG, \
   2716     char: prependCharSmallStringG, \
   2717     int: prependCharSmallStringG, \
   2718     default: prependSSmallStringG), \
   2719   char: prependSChar, \
   2720   int: prependSChar, \
   2721   char *: _Generic(value, \
   2722     char *: prependS, \
   2723     const char *: prependS, \
   2724     char: prependCharS, \
   2725     int: prependCharS, \
   2726     default: prependS \
   2727     ), \
   2728   const char *: _Generic(value, \
   2729     char *: prependS, \
   2730     const char *: prependS, \
   2731     char: prependCharS, \
   2732     int: prependCharS, \
   2733     default: prependS \
   2734     ), \
   2735   char **: _Generic(value, \
   2736     char *: iPrependS, \
   2737     const char *: iPrependS, \
   2738     char: iPrependCharS, \
   2739     int: iPrependCharS, \
   2740     default: iPrependS \
   2741     ), \
   2742   char ***: _Generic(value, \
   2743     char *: listPrependS, \
   2744     const char *: listPrependS, \
   2745     char: listPrependCharS, \
   2746     int: listPrependCharS, \
   2747     default: listPrependS \
   2748     ) \
   2749   )(self, value)
   2750 
   2751 #define prependNFreeO(self, value) (self)->f->prependNFree(self, value)
   2752 #define prependNSmashO(self, string) (self)->f->prependNSmash(self, string)
   2753 #define prependNFreeG(self, obj) _Generic((self), \
   2754   smallArrayt*: _Generic((obj), \
   2755     baset*: prependNFreeSmallArrayG, \
   2756     bool: prependBoolSmallArrayG, \
   2757     double: prependDoubleSmallArrayG, \
   2758     int64_t: prependIntSmallArrayG, \
   2759     int32_t: prependIntSmallArrayG, \
   2760     uint32_t: prependIntSmallArrayG, \
   2761     uint64_t: prependIntSmallArrayG, \
   2762     char*: prependNFreeSSmallArrayG, \
   2763     char: prependCharSmallArrayG, \
   2764     smallDictt*: prependNFreeDictSmallArrayG, \
   2765     smallArrayt*: prependNFreeArraySmallArrayG, \
   2766     char **: prependNFreeArraycSmallArrayG, \
   2767     smallBoolt*: prependNFreeSmallBoolSmallArrayG, \
   2768     smallBytest*: prependNFreeSmallBytesSmallArrayG, \
   2769     smallDoublet*: prependNFreeSmallDoubleSmallArrayG, \
   2770     smallIntt*: prependNFreeSmallIntSmallArrayG, \
   2771     smallJsont*: prependNFreeSmallJsonSmallArrayG, \
   2772     smallStringt*: prependNFreeSmallStringSmallArrayG, \
   2773     smallContainert*: prependNFreeSmallContainerSmallArrayG, \
   2774     undefinedt*: prependNFreeUndefinedSmallArrayG, \
   2775     default: prependVoidSmallArrayG), \
   2776   smallJsont*: _Generic((obj), \
   2777     baset*: prependNFreeSmallJsonG, \
   2778     bool: prependBoolSmallJsonG, \
   2779     double: prependDoubleSmallJsonG, \
   2780     int64_t: prependIntSmallJsonG, \
   2781     int32_t: prependIntSmallJsonG, \
   2782     uint32_t: prependIntSmallJsonG, \
   2783     uint64_t: prependIntSmallJsonG, \
   2784     char*: prependNFreeSSmallJsonG, \
   2785     char: prependCharSmallJsonG, \
   2786     smallDictt*: prependNFreeDictSmallJsonG, \
   2787     smallArrayt*: prependNFreeArraySmallJsonG, \
   2788     char **: prependNFreeArraycSmallJsonG, \
   2789     smallBoolt*: prependNFreeSmallBoolSmallJsonG, \
   2790     smallBytest*: prependNFreeSmallBytesSmallJsonG, \
   2791     smallDoublet*: prependNFreeSmallDoubleSmallJsonG, \
   2792     smallIntt*: prependNFreeSmallIntSmallJsonG, \
   2793     smallJsont*: prependNFreeSmallJsonSmallJsonG, \
   2794     smallStringt*: prependNFreeSmallStringSmallJsonG, \
   2795     smallContainert*: prependNFreeSmallContainerSmallJsonG, \
   2796     undefinedt*: prependNFreeUndefinedSmallJsonG, \
   2797     default: prependVoidSmallJsonG), \
   2798   smallStringt*: _Generic((obj), \
   2799     smallStringt*: prependNSmashSmallStringG, \
   2800     smallJsont*: prependNSmashSmallJsonSmallStringG, \
   2801     char *: prependNSmashSSmallStringG, \
   2802     char: prependCharSmallStringG, \
   2803     int: prependCharSmallStringG, \
   2804     default: prependSSmallStringG), \
   2805   char **: _Generic(obj, \
   2806     char *: iPrependNFreeS, \
   2807     char: iPrependCharS, \
   2808     int: iPrependCharS, \
   2809     default: iPrependNFreeS \
   2810     ), \
   2811   char ***: _Generic(obj, \
   2812     char *: iListPrependS, \
   2813     char: listPrependCharS, \
   2814     int: listPrependCharS, \
   2815     default: iListPrependS \
   2816     ) \
   2817   )(self, obj)
   2818 
   2819 #define shiftO(self, obj) (self)->f->shift(self, obj)
   2820 #define shiftG(self, obj) _Generic((self), \
   2821   smallDictt*: _Generic(obj, \
   2822     smallDictt*: mergeSmallDictG, \
   2823     smallJsont*: mergeSmallJsonSmallDictG, \
   2824     default: mergeSmallDictG), \
   2825   smallArrayt*: _Generic(obj, \
   2826     smallArrayt *: shiftSmallArrayG, \
   2827     smallJsont *: shiftSmallJsonSmallArrayG, \
   2828     default: shiftSmallArrayG), \
   2829   smallJsont*: _Generic(obj, \
   2830     smallArrayt *: shiftSmallJsonG, \
   2831     smallDictt *: mergeDictSmallJsonG, \
   2832     smallJsont *: shiftSmallJsonSmallJsonG, \
   2833     default: mergeSmallJsonG), \
   2834   smallStringt*: _Generic((obj), \
   2835     smallStringt*: prependSmallStringG, \
   2836     smallJsont*: prependSmallJsonSmallStringG, \
   2837     char *: prependSSmallStringG, \
   2838     char: prependCharSmallStringG, \
   2839     int: prependCharSmallStringG, \
   2840     default: prependSSmallStringG), \
   2841   char: prependSChar, \
   2842   int: prependSChar, \
   2843   char *: _Generic(obj, \
   2844     char *: prependS, \
   2845     const char *: prependS, \
   2846     char: prependCharS, \
   2847     int: prependCharS, \
   2848     default: prependS \
   2849     ), \
   2850   const char *: _Generic(obj, \
   2851     char *: prependS, \
   2852     const char *: prependS, \
   2853     char: prependCharS, \
   2854     int: prependCharS, \
   2855     default: prependS \
   2856     ), \
   2857   char **: _Generic(obj, \
   2858     char *: iPrependS, \
   2859     const char *: iPrependS, \
   2860     char: iPrependCharS, \
   2861     int: iPrependCharS, \
   2862     default: iPrependS \
   2863     ), \
   2864   char ***: iListShiftS \
   2865   )(self, obj)
   2866 
   2867 #define shiftNSmashO(self, obj) (self)->f->shiftNSmash(self, obj)
   2868 #define shiftNFreeG shiftNSmashG
   2869 #define shiftNSmashG(self, obj) _Generic((self), \
   2870   smallDictt*: _Generic(obj, \
   2871     smallDictt*: mergeNSmashSmallDictG, \
   2872     smallJsont*: mergeNSmashSmallJsonSmallDictG, \
   2873     default: mergeNSmashSmallDictG), \
   2874   smallArrayt*: _Generic(obj, \
   2875     smallArrayt *: shiftNSmashSmallArrayG, \
   2876     smallJsont *: shiftNSmashSmallJsonSmallArrayG, \
   2877     default: appendNSmashSmallArrayG), \
   2878   smallJsont*: _Generic(obj, \
   2879     smallArrayt *: shiftNSmashSmallJsonG, \
   2880     smallDictt *: mergeDictNSmashSmallJsonG, \
   2881     smallJsont *: shiftNSmashSmallJsonSmallJsonG, \
   2882     default: mergeNSmashSmallJsonG), \
   2883   smallStringt*: _Generic((obj), \
   2884     smallStringt*: prependNSmashSmallStringG, \
   2885     smallJsont*: prependNSmashSmallJsonSmallStringG, \
   2886     char *: prependNSmashSSmallStringG, \
   2887     char: prependCharSmallStringG, \
   2888     int: prependCharSmallStringG, \
   2889     default: prependSSmallStringG), \
   2890   char **: _Generic(obj, \
   2891     char *: iPrependNFreeS, \
   2892     char: iPrependCharS, \
   2893     int: iPrependCharS, \
   2894     default: iPrependNFreeS \
   2895     ), \
   2896   char ***: iListShiftNSmashS \
   2897   )(self, obj)
   2898 
   2899 // Delete an element in an array and move the elements after
   2900 // to fill the gap (delElemG deletes the element and creates a gap)
   2901 // the indices of the elements after are changed (-1)
   2902 #define delElG(self, idx) delG(self, idx, (idx)+1)
   2903 
   2904 #define delO(self, start, end) (self)->f->del(self, start, end)
   2905 #define delG(self, start, end) _Generic((self), \
   2906   smallDictt*: _Generic(start, \
   2907     char *: delSmallDictG, \
   2908     const char *: delSmallDictG, \
   2909     char: delKCharSmallDictG, \
   2910     int: delKCharSmallDictG, \
   2911     default: delSmallDictG \
   2912   ), \
   2913   smallJsont*: _Generic(start, \
   2914     char *: delKeySmallJsonG, \
   2915     const char *: delKeySmallJsonG, \
   2916     int64_t: delSmallJsonG, \
   2917     int32_t: delSmallJsonG, \
   2918     int16_t: delSmallJsonG, \
   2919     int8_t: delSmallJsonG, \
   2920     uint64_t: delSmallJsonG, \
   2921     uint32_t: delSmallJsonG, \
   2922     uint16_t: delSmallJsonG, \
   2923     uint8_t: delSmallJsonG, \
   2924     default: delSmallJsonG \
   2925   ), \
   2926   smallArrayt*: delSmallArrayG, \
   2927   smallStringt*: delSmallStringG, \
   2928   char **: iDelS, \
   2929   char ***: iListDelS \
   2930   )(self, start, end)
   2931 
   2932 #define delElemO(self, index) (self)->f->delElem(self, index)
   2933 #define delElemG(self, index) _Generic((self), \
   2934   smallDictt*: _Generic(index, \
   2935     char *: delElemSmallDictG, \
   2936     const char *: delElemSmallDictG, \
   2937     char: delElemKCharSmallDictG, \
   2938     int: delElemKCharSmallDictG, \
   2939     default: delElemSmallDictG \
   2940   ), \
   2941   smallJsont*: _Generic(index, \
   2942     char *: delElemSmallJsonG, \
   2943     const char *: delElemSmallJsonG, \
   2944     int64_t: delElemIndexSmallJsonG, \
   2945     int32_t: delElemIndexSmallJsonG, \
   2946     int16_t: delElemIndexSmallJsonG, \
   2947     int8_t: delElemIndexSmallJsonG, \
   2948     uint64_t: delElemIndexSmallJsonG, \
   2949     uint32_t: delElemIndexSmallJsonG, \
   2950     uint16_t: delElemIndexSmallJsonG, \
   2951     uint8_t: delElemIndexSmallJsonG, \
   2952     default: delElemSmallJsonG \
   2953   ), \
   2954   smallArrayt*: delElemSmallArrayG, \
   2955   smallStringt*: delElemSmallStringG, \
   2956   char **: iDelElemS, \
   2957   char ***: iListDelElemS \
   2958   )(self, index)
   2959 
   2960 #define removeO(self, start, end) (self)->f->remove(self, start, end)
   2961 #define removeG(self, start, end) _Generic((self), \
   2962   smallDictt*: _Generic(start, \
   2963     char *: removeSmallDictG, \
   2964     const char *: removeSmallDictG, \
   2965     char: removeKCharSmallDictG, \
   2966     int: removeKCharSmallDictG, \
   2967     default: removeSmallDictG \
   2968   ), \
   2969   smallJsont*: _Generic(start, \
   2970     char *: removeKeySmallJsonG, \
   2971     const char *: removeKeySmallJsonG, \
   2972     int64_t: removeSmallJsonG, \
   2973     int32_t: removeSmallJsonG, \
   2974     int16_t: removeSmallJsonG, \
   2975     int8_t: removeSmallJsonG, \
   2976     uint64_t: removeSmallJsonG, \
   2977     uint32_t: removeSmallJsonG, \
   2978     uint16_t: removeSmallJsonG, \
   2979     uint8_t: removeSmallJsonG, \
   2980     default: removeSmallJsonG \
   2981   ), \
   2982   smallArrayt*: removeSmallArrayG, \
   2983   smallStringt*: delSmallStringG, \
   2984   char **: iDelS, \
   2985   char ***: iListRemoveS \
   2986   )(self, start, end)
   2987 
   2988 #define removeElemO(self, index) (self)->f->removeElem(self, index)
   2989 #define removeElemG(self, index) _Generic((self), \
   2990   smallDictt*: _Generic(index, \
   2991     char *: removeElemSmallDictG, \
   2992     const char *: removeElemSmallDictG, \
   2993     char: removeElemKCharSmallDictG, \
   2994     int: removeElemKCharSmallDictG, \
   2995     default: removeElemSmallDictG \
   2996   ), \
   2997   smallJsont*: _Generic(index, \
   2998     char *: removeElemSmallJsonG, \
   2999     const char *: removeElemSmallJsonG, \
   3000     int64_t: removeElemIndexSmallJsonG, \
   3001     int32_t: removeElemIndexSmallJsonG, \
   3002     int16_t: removeElemIndexSmallJsonG, \
   3003     int8_t: removeElemIndexSmallJsonG, \
   3004     uint64_t: removeElemIndexSmallJsonG, \
   3005     uint32_t: removeElemIndexSmallJsonG, \
   3006     uint16_t: removeElemIndexSmallJsonG, \
   3007     uint8_t: removeElemIndexSmallJsonG, \
   3008     default: removeElemSmallJsonG \
   3009   ), \
   3010   smallArrayt*: removeElemSmallArrayG, \
   3011   smallStringt*: delElemSmallStringG, \
   3012   char **: iDelElemS, \
   3013   char ***: iListRemoveElemS \
   3014   )(self, index)
   3015 
   3016 #define popO(self) (self)->f->pop(self)
   3017 #define popG(self, returnType) _Generic((self), \
   3018   smallArrayt*: _Generic((returnType), \
   3019     baset*: popSmallArrayG, \
   3020     undefinedt*: popUndefinedSmallArrayG, \
   3021     bool: popBoolSmallArrayG, \
   3022     double: popDoubleSmallArrayG, \
   3023     int64_t: popIntSmallArrayG, \
   3024     int32_t: popInt32SmallArrayG, \
   3025     uint64_t: popUintSmallArrayG, \
   3026     uint32_t: popUint32SmallArrayG, \
   3027     char*: popSSmallArrayG, \
   3028     smallDictt*: popDictSmallArrayG, \
   3029     smallArrayt*: popArraySmallArrayG, \
   3030     smallBoolt*: popSmallBoolSmallArrayG, \
   3031     smallBytest*: popSmallBytesSmallArrayG, \
   3032     smallDoublet*: popSmallDoubleSmallArrayG, \
   3033     smallIntt*: popSmallIntSmallArrayG, \
   3034     smallJsont*: popSmallJsonSmallArrayG, \
   3035     smallStringt*: popSmallStringSmallArrayG, \
   3036     void*: popVoidSmallArrayG, \
   3037     smallContainert*: popSmallContainerSmallArrayG, \
   3038     default: popSmallArrayG), \
   3039   smallJsont*: _Generic((returnType), \
   3040     baset*: popSmallJsonG, \
   3041     undefinedt*: popUndefinedSmallJsonG, \
   3042     bool: popBoolSmallJsonG, \
   3043     double: popDoubleSmallJsonG, \
   3044     int64_t: popIntSmallJsonG, \
   3045     int32_t: popInt32SmallJsonG, \
   3046     uint64_t: popUintSmallJsonG, \
   3047     uint32_t: popUint32SmallJsonG, \
   3048     char*: popSSmallJsonG, \
   3049     smallDictt*: popDictSmallJsonG, \
   3050     smallArrayt*: popArraySmallJsonG, \
   3051     smallBoolt*: popSmallBoolSmallJsonG, \
   3052     smallBytest*: popSmallBytesSmallJsonG, \
   3053     smallDoublet*: popSmallDoubleSmallJsonG, \
   3054     smallIntt*: popSmallIntSmallJsonG, \
   3055     smallJsont*: popSmallJsonSmallJsonG, \
   3056     smallStringt*: popSmallStringSmallJsonG, \
   3057     void*: popVoidSmallJsonG, \
   3058     smallContainert*: popSmallContainerSmallJsonG, \
   3059     default: popSmallJsonG), \
   3060   char ***: listPopG \
   3061   )(self, returnType)
   3062 
   3063 #define dequeueO(self) (self)->f->dequeue(self)
   3064 #define dequeueG(self, returnType) _Generic((self), \
   3065   smallArrayt*: _Generic((returnType), \
   3066     baset*: dequeueSmallArrayG, \
   3067     undefinedt*: dequeueUndefinedSmallArrayG, \
   3068     bool: dequeueBoolSmallArrayG, \
   3069     double: dequeueDoubleSmallArrayG, \
   3070     int64_t: dequeueIntSmallArrayG, \
   3071     int32_t: dequeueInt32SmallArrayG, \
   3072     uint64_t: dequeueUintSmallArrayG, \
   3073     uint32_t: dequeueUint32SmallArrayG, \
   3074     char*: dequeueSSmallArrayG, \
   3075     smallDictt*: dequeueDictSmallArrayG, \
   3076     smallArrayt*: dequeueArraySmallArrayG, \
   3077     smallBoolt*: dequeueSmallBoolSmallArrayG, \
   3078     smallBytest*: dequeueSmallBytesSmallArrayG, \
   3079     smallDoublet*: dequeueSmallDoubleSmallArrayG, \
   3080     smallIntt*: dequeueSmallIntSmallArrayG, \
   3081     smallJsont*: dequeueSmallJsonSmallArrayG, \
   3082     smallStringt*: dequeueSmallStringSmallArrayG, \
   3083     void*: dequeueVoidSmallArrayG, \
   3084     smallContainert*: dequeueSmallContainerSmallArrayG, \
   3085     default: dequeueSmallArrayG), \
   3086   smallJsont*: _Generic((returnType), \
   3087     baset*: dequeueSmallJsonG, \
   3088     undefinedt*: dequeueUndefinedSmallJsonG, \
   3089     bool: dequeueBoolSmallJsonG, \
   3090     double: dequeueDoubleSmallJsonG, \
   3091     int64_t: dequeueIntSmallJsonG, \
   3092     int32_t: dequeueInt32SmallJsonG, \
   3093     uint64_t: dequeueUintSmallJsonG, \
   3094     uint32_t: dequeueUint32SmallJsonG, \
   3095     char*: dequeueSSmallJsonG, \
   3096     smallDictt*: dequeueDictSmallJsonG, \
   3097     smallArrayt*: dequeueArraySmallJsonG, \
   3098     smallBoolt*: dequeueSmallBoolSmallJsonG, \
   3099     smallBytest*: dequeueSmallBytesSmallJsonG, \
   3100     smallDoublet*: dequeueSmallDoubleSmallJsonG, \
   3101     smallIntt*: dequeueSmallIntSmallJsonG, \
   3102     smallJsont*: dequeueSmallJsonSmallJsonG, \
   3103     smallStringt*: dequeueSmallStringSmallJsonG, \
   3104     void*: dequeueVoidSmallJsonG, \
   3105     smallContainert*: dequeueSmallContainerSmallJsonG, \
   3106     default: dequeueSmallJsonG), \
   3107   char ***: listDequeueG \
   3108   )(self, returnType)
   3109 
   3110 
   3111 
   3112 #define getProgPathG(returnType) _Generic((returnType), \
   3113   char *: getProgPath, \
   3114   const char *: getProgPath, \
   3115   smallJsont *: getProgPathJO, \
   3116   smallStringt *: getProgPathO \
   3117   )()
   3118 
   3119 #define getRealProgPathG(returnType) _Generic((returnType), \
   3120   char *: getRealProgPath, \
   3121   const char *: getRealProgPath, \
   3122   smallJsont *: getRealProgPathJO, \
   3123   smallStringt *: getRealProgPathO \
   3124   )()
   3125 
   3126 #define systemG(cmd) _Generic((cmd), \
   3127   char *: system, \
   3128   const char *: system, \
   3129   smallJsont *: systemJO, \
   3130   smallStringt *: systemO \
   3131   )(cmd)
   3132 
   3133 #define systemNFreeG(cmd) _Generic((cmd), \
   3134   char *: systemNFreeF, \
   3135   smallJsont *: systemNFreeJOF, \
   3136   smallStringt *: systemNFreeOF \
   3137   )(cmd, __LINE__, __func__, __FILE__)
   3138 
   3139 #define getModificationTimeG(path) _Generic(path, \
   3140   char *: getModificationTime, \
   3141   const char *: getModificationTime, \
   3142   smallJsont *: getModificationTimeJO, \
   3143   smallStringt *: getModificationTimeO \
   3144   )(path)
   3145 
   3146 #define setModificationTimeG(path, mtime) _Generic(path, \
   3147   char *: setModificationTime, \
   3148   const char *: setModificationTime, \
   3149   smallJsont *: setModificationTimeJO, \
   3150   smallStringt *: setModificationTimeO \
   3151   )(path, mtime)
   3152 
   3153 #define equalModificationTimesG(path1, path2) _Generic(path1, \
   3154   char *: _Generic(path2, \
   3155     char *: equalModificationTimes, \
   3156     const char *: equalModificationTimes, \
   3157     smallJsont *: equalModificationTimesSJO, \
   3158     smallStringt *: equalModificationTimesSO \
   3159     ), \
   3160   const char *: _Generic(path2, \
   3161     char *: equalModificationTimes, \
   3162     const char *: equalModificationTimes, \
   3163     smallJsont *: equalModificationTimesSJO, \
   3164     smallStringt *: equalModificationTimesSO \
   3165     ),\
   3166   smallJsont *: _Generic(path2, \
   3167     char *: equalModificationTimesJOS, \
   3168     const char *: equalModificationTimesJOS, \
   3169     smallJsont *: equalModificationTimesJO, \
   3170     smallStringt *: equalModificationTimesJOO \
   3171     ),\
   3172   smallStringt *: _Generic(path2, \
   3173     char *: equalModificationTimesOS, \
   3174     const char *: equalModificationTimesOS, \
   3175     smallJsont *: equalModificationTimesOJO, \
   3176     smallStringt *: equalModificationTimesO \
   3177     )\
   3178   )(path1, path2)
   3179 
   3180 #define timeToSG(returnType, t) _Generic((returnType), \
   3181   char *: timeToS, \
   3182   smallJsont *: timeToJO, \
   3183   smallStringt *: timeToSO \
   3184   )(t)
   3185 
   3186 #define shDirnameG(path) _Generic((path), \
   3187   char *: shDirname, \
   3188   const char *: shDirname, \
   3189   smallJsont *: shDirnameJO, \
   3190   smallStringt *: shDirnameO \
   3191   )(path)
   3192 
   3193 #define expandHomeG(path) _Generic((path), \
   3194   char *: expandHome, \
   3195   const char *: expandHome, \
   3196   char **: iExpandHome, \
   3197   smallJsont *: expandHomeJO, \
   3198   smallStringt *: expandHomeO \
   3199   )(path)
   3200 
   3201 #define normalizePathG(path) _Generic((path), \
   3202   char *: normalizePath, \
   3203   const char *: normalizePath, \
   3204   char **: iNormalizePath, \
   3205   smallJsont *: normalizePathJO, \
   3206   smallStringt *: normalizePathO \
   3207   )(path)
   3208 
   3209 #define getCwdG(returnType) _Generic((returnType), \
   3210   char *: getCwd, \
   3211   const char *: getCwd, \
   3212   smallJsont *: getCwdJO, \
   3213   smallStringt *: getCwdO \
   3214   )()
   3215 
   3216 #define chDirG(path) _Generic((path), \
   3217   char *: chDir, \
   3218   const char *: chDir, \
   3219   smallJsont *: chDirJO, \
   3220   smallStringt *: chDirO \
   3221   )(path)
   3222 
   3223 #define isDirG(path) _Generic((path), \
   3224   char *: isDir, \
   3225   const char *: isDir, \
   3226   smallJsont *: isDirJO, \
   3227   smallStringt *: isDirO \
   3228   )(path)
   3229 
   3230 #define isLinkG(path) _Generic((path), \
   3231   char *: isLink, \
   3232   const char *: isLink, \
   3233   smallJsont *: isLinkJO, \
   3234   smallStringt *: isLinkO \
   3235   )(path)
   3236 
   3237 #define fileExistsG(path) _Generic((path), \
   3238   char *: fileExists, \
   3239   const char *: fileExists, \
   3240   smallJsont *: fileExistsJO, \
   3241   smallStringt *: fileExistsO \
   3242   )(path)
   3243 
   3244 #define fileChmodG(path, mode) _Generic((path), \
   3245   char *: fileChmod, \
   3246   const char *: fileChmod, \
   3247   smallJsont *: fileChmodJO, \
   3248   smallStringt *: fileChmodO \
   3249   )(path, mode)
   3250 
   3251 #define fileSizeG(path) _Generic((path), \
   3252   char *: fileSize, \
   3253   const char *: fileSize, \
   3254   smallJsont *: fileSizeJO, \
   3255   smallStringt *: fileSizeO, \
   3256   FILE *: fileSizeFP \
   3257   )(path)
   3258 
   3259 #define readFileO(self, filePath) (self)->f->readFile(self, filePath)
   3260 #define readTextO(self, filePath) (self)->f->readText(self, filePath)
   3261 #define readFileG(self, path) _Generic((self), \
   3262   smallArrayt *: _Generic(path, \
   3263     char *: readTextSmallArrayG, \
   3264     const char*: readTextSmallArrayG, \
   3265     FILE *: readStreamSmallArrayG, \
   3266     smallJsont *: readTextSmallJsonSmallArrayG, \
   3267     smallStringt *: readTextSmallStringSmallArrayG \
   3268     ), \
   3269   smallBoolt *: _Generic(path, \
   3270     char *: readFileSmallBoolG, \
   3271     const char*: readFileSmallBoolG, \
   3272     FILE *: readStreamSmallBoolG, \
   3273     smallJsont *: readFileSmallJsonSmallBoolG, \
   3274     smallStringt *: readFileSmallStringSmallBoolG \
   3275     ), \
   3276   smallDoublet *: _Generic(path, \
   3277     char *: readFileSmallDoubleG, \
   3278     const char*: readFileSmallDoubleG, \
   3279     FILE *: readStreamSmallDoubleG, \
   3280     smallJsont *: readFileSmallJsonSmallDoubleG, \
   3281     smallStringt *: readFileSmallStringSmallDoubleG \
   3282     ), \
   3283   smallIntt *: _Generic(path, \
   3284     char *: readFileSmallIntG, \
   3285     const char*: readFileSmallIntG, \
   3286     FILE *: readStreamSmallIntG, \
   3287     smallJsont *: readFileSmallJsonSmallIntG, \
   3288     smallStringt *: readFileSmallStringSmallIntG \
   3289     ), \
   3290   smallStringt *: _Generic(path, \
   3291     char *: readFileSmallStringG, \
   3292     const char*: readFileSmallStringG, \
   3293     FILE *: readStreamSmallStringG, \
   3294     smallJsont *: readFileSmallJsonSmallStringG, \
   3295     smallStringt *: readFileSmallStringSmallStringG \
   3296     ), \
   3297   smallBytest *: _Generic(path, \
   3298     char *: readFileSmallBytesG, \
   3299     const char*: readFileSmallBytesG, \
   3300     FILE *: readStreamSmallBytesG, \
   3301     smallJsont *: readFileSmallJsonSmallBytesG, \
   3302     smallStringt *: readFileSmallStringSmallBytesG \
   3303     ), \
   3304   smallJsont *: _Generic(path, \
   3305     char *: readFileSmallJsonG, \
   3306     const char*: readFileSmallJsonG, \
   3307     FILE *: readStreamSmallJsonG, \
   3308     smallJsont *: readFileJsonSmallJsonG, \
   3309     smallStringt *: readFileSmallStringSmallJsonG \
   3310     ), \
   3311   char **:  _Generic(path, \
   3312     char *: readFileToG, \
   3313     const char *: readFileToG, \
   3314     FILE *: readStreamToG, \
   3315     smallJsont *: readToFileSmallJsonNotSupported, \
   3316     smallStringt *: readToFileSmallStringNotSupported \
   3317     ), \
   3318   char ***:  _Generic(path, \
   3319     char *: readTextSG, \
   3320     const char *: readTextSG, \
   3321     FILE *: readTextStreamG, \
   3322     smallJsont *: readTextSmallJsonNotSupported, \
   3323     smallStringt *: readTextSmallStringNotSupported \
   3324     ), \
   3325   char *:  _Generic(path, \
   3326     char *: readFileToNewG, \
   3327     const char *: readFileToNewG, \
   3328     FILE *: readStreamToNewG, \
   3329     smallJsont *: readToFileSmallJsonNotSupported, \
   3330     smallStringt *: readToFileSmallStringNotSupported \
   3331     ), \
   3332   default: _Generic(path, \
   3333     char *: readFileToNewG, \
   3334     const char *: readFileToNewG, \
   3335     FILE *: readStreamToNewG, \
   3336     smallJsont *: readToFileSmallJsonNotSupported, \
   3337     smallStringt *: readToFileSmallStringNotSupported \
   3338     ) \
   3339   )(self, path)
   3340 
   3341 #define readTextG(self, path) _Generic((self), \
   3342   smallArrayt *: _Generic(path, \
   3343     char *: readTextSmallArrayG, \
   3344     const char*: readTextSmallArrayG, \
   3345     FILE *: readStreamSmallArrayG, \
   3346     smallJsont *: readTextSmallJsonSmallArrayG, \
   3347     smallStringt *: readTextSmallStringSmallArrayG \
   3348     ), \
   3349   smallStringt *: _Generic(path, \
   3350     char *: readFileSmallStringG, \
   3351     const char*: readFileSmallStringG, \
   3352     FILE *: readStreamSmallStringG, \
   3353     smallJsont *: readFileSmallJsonSmallStringG, \
   3354     smallStringt *: readFileSmallStringSmallStringG \
   3355     ), \
   3356   smallJsont *: _Generic(path, \
   3357     char *: readTextSmallJsonG, \
   3358     const char*: readTextSmallJsonG, \
   3359     FILE *: readTextStreamSmallJsonG, \
   3360     smallJsont *: readTextJsonSmallJsonG, \
   3361     smallStringt *: readTextSmallStringSmallJsonG \
   3362     ), \
   3363   char **:  _Generic(path, \
   3364     char *: readFileToG, \
   3365     const char *: readFileToG, \
   3366     FILE *: readStreamToG, \
   3367     smallJsont *: readToFileSmallJsonNotSupported, \
   3368     smallStringt *: readToFileSmallStringNotSupported \
   3369     ), \
   3370   char ***:  _Generic(path, \
   3371     char *: readTextSG, \
   3372     const char *: readTextSG, \
   3373     FILE *: readTextStreamG, \
   3374     smallJsont *: readTextSmallJsonNotSupported, \
   3375     smallStringt *: readTextSmallStringNotSupported \
   3376     ), \
   3377   char *:  _Generic(path, \
   3378     char *: readFileToNewG, \
   3379     const char *: readFileToNewG, \
   3380     FILE *: readStreamToNewG, \
   3381     smallJsont *: readToFileSmallJsonNotSupported, \
   3382     smallStringt *: readToFileSmallStringNotSupported \
   3383     ), \
   3384   default: _Generic(path, \
   3385     char *: readFileToNewG, \
   3386     const char *: readFileToNewG, \
   3387     FILE *: readStreamToNewG, \
   3388     smallJsont *: readToFileSmallJsonNotSupported, \
   3389     smallStringt *: readToFileSmallStringNotSupported \
   3390     ) \
   3391   )(self, path)
   3392 
   3393 #define writeFileO(self, filePath) (self)->f->writeFile(self, filePath)
   3394 #define writeTextO(self, filePath) (self)->f->writeText(self, filePath)
   3395 #define writeFileG(self, path) _Generic((self), \
   3396   smallArrayt *: _Generic(path, \
   3397     char *: writeTextSmallArrayG, \
   3398     const char *: writeTextSmallArrayG, \
   3399     FILE *: writeStreamSmallArrayG, \
   3400     smallJsont *: writeTextSmallJsonSmallArrayG, \
   3401     smallStringt *: writeTextSmallStringSmallArrayG \
   3402     ), \
   3403   smallBoolt *: _Generic(path, \
   3404     char *: writeFileSmallBoolG, \
   3405     const char *: writeFileSmallBoolG, \
   3406     FILE *: writeStreamSmallBoolG, \
   3407     smallJsont *: writeFileSmallJsonSmallBoolG, \
   3408     smallStringt *: writeFileSmallStringSmallBoolG \
   3409     ), \
   3410   smallDoublet *: _Generic(path, \
   3411     char *: writeFileSmallDoubleG, \
   3412     const char *: writeFileSmallDoubleG, \
   3413     FILE *: writeStreamSmallDoubleG, \
   3414     smallJsont *: writeFileSmallJsonSmallDoubleG, \
   3415     smallStringt *: writeFileSmallStringSmallDoubleG \
   3416     ), \
   3417   smallIntt *: _Generic(path, \
   3418     char *: writeFileSmallIntG, \
   3419     const char *: writeFileSmallIntG, \
   3420     FILE *: writeStreamSmallIntG, \
   3421     smallJsont *: writeFileSmallJsonSmallIntG, \
   3422     smallStringt *: writeFileSmallStringSmallIntG \
   3423     ), \
   3424   smallStringt *: _Generic(path, \
   3425     char *: writeFileSmallStringG, \
   3426     const char *: writeFileSmallStringG, \
   3427     FILE *: writeStreamSmallStringG, \
   3428     smallJsont *: writeFileSmallJsonSmallStringG, \
   3429     smallStringt *: writeFileSmallStringSmallStringG \
   3430     ), \
   3431   smallBytest *: _Generic(path, \
   3432     char *: writeFileSmallBytesG, \
   3433     const char *: writeFileSmallBytesG, \
   3434     FILE *: writeStreamSmallBytesG, \
   3435     smallJsont *: writeFileSmallJsonSmallBytesG, \
   3436     smallStringt *: writeFileSmallStringSmallBytesG \
   3437     ), \
   3438   smallDictt *: _Generic(path, \
   3439     char *: writeFileSmallDictG, \
   3440     const char *: writeFileSmallDictG, \
   3441     FILE *: writeStreamSmallDictG, \
   3442     smallJsont *: writeFileSmallJsonSmallDictG, \
   3443     smallStringt *: writeFileSmallStringSmallDictG \
   3444     ), \
   3445   smallJsont *: _Generic(path, \
   3446     char *: writeFileSmallJsonG, \
   3447     const char *: writeFileSmallJsonG, \
   3448     FILE *: writeStreamSmallJsonG, \
   3449     smallJsont *: writeFileJsonSmallJsonG, \
   3450     smallStringt *: writeFileSmallStringSmallJsonG \
   3451     ), \
   3452   char **:  _Generic(path, \
   3453     char *: writeTextSG, \
   3454     const char *: writeTextSG, \
   3455     FILE *: writeTextStreamG, \
   3456     smallJsont *: writeTextSmallJsonNotSupported, \
   3457     smallStringt *: writeTextSmallStringNotSupported \
   3458     ), \
   3459   const char **:  _Generic(path, \
   3460     char *: writeTextCG, \
   3461     const char *: writeTextCG, \
   3462     FILE *: writeTextStreamCG, \
   3463     smallJsont *: writeTextCCSmallJsonNotSupported, \
   3464     smallStringt *: writeTextCCSmallStringNotSupported \
   3465     ), \
   3466   const char *: _Generic(path, \
   3467     char *: writeFileFromG, \
   3468     const char *: writeFileFromG, \
   3469     FILE *: writeStreamFromG, \
   3470     default: writeFileFromG \
   3471     ), \
   3472   char *: _Generic(path, \
   3473     char *: writeFileFromG, \
   3474     const char *: writeFileFromG, \
   3475     FILE *: writeStreamFromG, \
   3476     default: writeFileFromG \
   3477     ) \
   3478   )(self, path)
   3479 
   3480 #define writeTextG(self, path) _Generic((self), \
   3481   smallArrayt *: _Generic(path, \
   3482     char *: writeTextSmallArrayG, \
   3483     const char *: writeTextSmallArrayG, \
   3484     FILE *: writeStreamSmallArrayG, \
   3485     smallJsont *: writeTextSmallJsonSmallArrayG, \
   3486     smallStringt *: writeTextSmallStringSmallArrayG \
   3487     ), \
   3488   smallStringt *: _Generic(path, \
   3489     char *: writeFileSmallStringG, \
   3490     const char *: writeFileSmallStringG, \
   3491     FILE *: writeStreamSmallStringG, \
   3492     smallJsont *: writeFileSmallJsonSmallStringG, \
   3493     smallStringt *: writeFileSmallStringSmallStringG \
   3494     ), \
   3495   smallJsont *: _Generic(path, \
   3496     char *: writeTextSmallJsonG, \
   3497     const char *: writeTextSmallJsonG, \
   3498     FILE *: writeTextStreamSmallJsonG, \
   3499     smallJsont *: writeTextJsonSmallJsonG, \
   3500     smallStringt *: writeTextSmallStringSmallJsonG \
   3501     ), \
   3502   char **:  _Generic(path, \
   3503     char *: writeTextSG, \
   3504     const char *: writeTextSG, \
   3505     FILE *: writeTextStreamG, \
   3506     smallJsont *: writeTextSmallJsonNotSupported, \
   3507     smallStringt *: writeTextSmallStringNotSupported \
   3508     ), \
   3509   const char **:  _Generic(path, \
   3510     char *: writeTextCG, \
   3511     const char *: writeTextCG, \
   3512     FILE *: writeTextStreamCG, \
   3513     smallJsont *: writeTextCCSmallJsonNotSupported, \
   3514     smallStringt *: writeTextCCSmallStringNotSupported \
   3515     ), \
   3516   const char *: _Generic(path, \
   3517     char *: writeFileFromG, \
   3518     const char *: writeFileFromG, \
   3519     FILE *: writeStreamFromG, \
   3520     default: writeFileFromG \
   3521     ), \
   3522   char *: _Generic(path, \
   3523     char *: writeFileFromG, \
   3524     const char *: writeFileFromG, \
   3525     FILE *: writeStreamFromG, \
   3526     default: writeFileFromG \
   3527     ) \
   3528   )(self, path)
   3529 
   3530 #define appendFileO(self, filePath) (self)->f->appendFile(self, filePath)
   3531 #define appendFileG(self, path) _Generic((self), \
   3532   smallArrayt *: _Generic(path, \
   3533     char *: appendTextSmallArrayG, \
   3534     const char *: appendTextSmallArrayG, \
   3535     smallStringt *: appendTextSmallStringSmallArrayG, \
   3536     default: appendTextSmallArrayG), \
   3537   smallBytest *: _Generic(path, \
   3538     char *: appendFileSmallBytesG, \
   3539     const char *: appendFileSmallBytesG, \
   3540     smallStringt *: appendFileSmallStringSmallBytesG, \
   3541     default: appendFileSmallBytesG), \
   3542   smallDictt *: _Generic(path, \
   3543     char *: appendFileSmallDictG, \
   3544     const char *: appendFileSmallDictG, \
   3545     smallStringt *: appendFileSmallStringSmallDictG, \
   3546     default: appendFileSmallDictG), \
   3547   smallJsont *: _Generic(path, \
   3548     char *: appendFileSmallJsonG, \
   3549     const char *: appendFileSmallJsonG, \
   3550     smallStringt *: appendFileSmallStringSmallJsonG, \
   3551     smallJsont *: appendFileJsonSmallJsonG), \
   3552   char *: appendFileSG, \
   3553   const char *: appendFileSG, \
   3554   char **: appendTextSG, \
   3555   const char **: appendTextCG \
   3556   )(self, path)
   3557 
   3558 //TODO typeStringSmallArray rtChar rtSmallStringt
   3559 //TODO typeStringsSmallArray
   3560 
   3561 //TODO keys rtChar rtSmallArrayt
   3562 
   3563 #define zipO(self, keys, values) (self)->f->zip(self, keys, values)
   3564 #define zipG(self, keys, values) _Generic(self, \
   3565   smallJsont *: _Generic(keys, \
   3566     smallArrayt *: _Generic(values, \
   3567       smallArrayt *: zipSmallJsonG, \
   3568       smallJsont *: zipSmallArrayJsonSmallJsonG, \
   3569       char **: zipCharSmallJsonG, \
   3570       const char **: zipCCharSmallJsonG \
   3571       ), \
   3572     smallJsont *: _Generic(values, \
   3573       smallArrayt *: zipJsonSmallArraySmallJsonG, \
   3574       smallJsont *: zipJsonSmallJsonG, \
   3575       char **: zipJsonArraySmallJsonG, \
   3576       const char **: zipJsonCArraySmallJsonG \
   3577       ), \
   3578     char **: _Generic(values, \
   3579       smallArrayt *: zipArraySmallJsonG, \
   3580       smallJsont *: zipArrayJsonSmallJsonG, \
   3581       char **: zipArrayCharSmallJsonG, \
   3582       const char **: zipArrayCCharSmallJsonG \
   3583       ), \
   3584     const char **: _Generic(values, \
   3585       smallArrayt *: zipCArraySmallJsonG, \
   3586       smallJsont *: zipCArrayJsonSmallJsonG, \
   3587       char **: zipCArrayCharSmallJsonG, \
   3588       const char **: zipCArrayCCharSmallJsonG \
   3589       ) \
   3590     ), \
   3591   smallDictt *: _Generic(keys, \
   3592     smallArrayt *: _Generic(values, \
   3593       smallArrayt *: zipSmallDictG, \
   3594       smallJsont *: zipSmallJsonSmallDictG, \
   3595       char **: zipVArraySmallDictG, \
   3596       const char **: zipVCArraySmallDictG \
   3597       ), \
   3598     smallJsont *: _Generic(values, \
   3599       smallArrayt *: zipSmallJsonSmallArraySmallDictG, \
   3600       smallJsont *: zipSmallJsonSmallJsonSmallDictG, \
   3601       char **: zipSmallJsonVArraySmallDictG, \
   3602       const char **: zipSmallJsonVCArraySmallDictG \
   3603       ), \
   3604     char **: _Generic(values, \
   3605       smallArrayt *: zipArraySmallDictG, \
   3606       smallJsont *: zipArraySmallJsonSmallDictG, \
   3607       char **: zipArrayArraySmallDictG, \
   3608       const char **: zipArrayCArraySmallDictG \
   3609       ), \
   3610     const char **: _Generic(values, \
   3611       smallArrayt *: zipCArraySmallDictG, \
   3612       smallJsont *: zipCArraySmallJsonSmallDictG, \
   3613       char **: zipCArrayArraySmallDictG, \
   3614       const char **: zipCArrayCArraySmallDictG \
   3615       ) \
   3616     ), \
   3617   smallArrayt *: _Generic(keys, \
   3618     smallArrayt *: _Generic(values, \
   3619       smallArrayt *: zipSmallArrayG, \
   3620       smallJsont *: zipSmallJsonSmallArrayG, \
   3621       char **: zipCharSmallArrayG, \
   3622       const char **: zipCCharSmallArrayG \
   3623       ), \
   3624     smallJsont *: _Generic(values, \
   3625       smallArrayt *: zipSmallJsonSmallArraySmallArrayG, \
   3626       smallJsont *: zipSmallJsonSmallJsonSmallArrayG, \
   3627       char **: zipSmallJsonCharSmallArrayG, \
   3628       const char **: zipSmallJsonCCharSmallArrayG \
   3629       ), \
   3630     char **: _Generic(values, \
   3631       smallArrayt *: zipArraySmallArrayG, \
   3632       smallJsont *: zipArraySmallJsonSmallArrayG, \
   3633       char **: zipArrayCharSmallArrayG, \
   3634       const char **: zipArrayCCharSmallArrayG \
   3635       ), \
   3636     const char **: _Generic(values, \
   3637       smallArrayt *: zipCArraySmallArrayG, \
   3638       smallJsont *: zipCArraySmallJsonSmallArrayG, \
   3639       char **: zipCArrayCharSmallArrayG, \
   3640       const char **: zipCArrayCCharSmallArrayG \
   3641       ) \
   3642     ) \
   3643   )(self, keys, values)
   3644 
   3645 #define walkDirG(returnType, path) _Generic((returnType), \
   3646   char **: walkDir, \
   3647   smallArrayt *:  _Generic(path, \
   3648     char *: walkDirO, \
   3649     const char *: walkDirO, \
   3650     smallJsont *: walkDirSmallJsonO, \
   3651     smallStringt *: walkDirSmallStringO \
   3652     ) \
   3653   )(path)
   3654 
   3655 #define walkDirDirG(returnType, path) _Generic((returnType), \
   3656   char **: walkDirDir, \
   3657   smallArrayt *: _Generic(path, \
   3658     char *: walkDirDirO, \
   3659     const char *: walkDirDirO, \
   3660     smallJsont *: walkDirDirSmallJsonO, \
   3661     smallStringt *: walkDirDirSmallStringO \
   3662     )\
   3663   )(path)
   3664 
   3665 #define readDirG(returnType, path) _Generic((returnType), \
   3666   char **: readDir, \
   3667   smallArrayt *:  _Generic(path, \
   3668     char *: readDirO, \
   3669     const char *: readDirO, \
   3670     smallJsont *: readDirSmallJsonO, \
   3671     smallStringt *: readDirSmallStringO \
   3672     )\
   3673   )(path)
   3674 
   3675 #define readDirDirG(returnType, path) _Generic((returnType), \
   3676   char **: readDirDir, \
   3677   smallArrayt *:  _Generic(path, \
   3678     char *: readDirDirO, \
   3679     const char *: readDirDirO, \
   3680     smallJsont *: readDirDirSmallJsonO, \
   3681     smallStringt *: readDirDirSmallStringO \
   3682     )\
   3683   )(path)
   3684 
   3685 #define walkDirAllG(returnType, path) _Generic((returnType), \
   3686   char **: walkDirAll, \
   3687   smallArrayt *: _Generic(path, \
   3688     char *: walkDirAllO, \
   3689     const char *: walkDirAllO, \
   3690     smallJsont *: walkDirAllSmallJsonO, \
   3691     smallStringt *: walkDirAllSmallStringO \
   3692     ) \
   3693   )(path)
   3694 
   3695 #define readDirAllG(returnType, path) _Generic((returnType), \
   3696   char **: readDirAll, \
   3697   smallArrayt *:  _Generic(path, \
   3698     char *: readDirAllO, \
   3699     const char *: readDirAllO, \
   3700     smallJsont *: readDirAllSmallJsonO, \
   3701     smallStringt *: readDirAllSmallStringO \
   3702     )\
   3703   )(path)
   3704 
   3705 #define mkdirParentsG(path) _Generic((path), \
   3706   char *: mkdirParents, \
   3707   const char *: mkdirParents, \
   3708   smallJsont *: mkdirParentsSmallJsonO, \
   3709   smallStringt *: mkdirParentsO \
   3710   )(path)
   3711 
   3712 #define rmAllG(path) _Generic((path), \
   3713   char *: rmAll, \
   3714   const char *: rmAll, \
   3715   smallJsont *: rmAllSmallJsonO, \
   3716   smallStringt *: rmAllO \
   3717   )(path)
   3718 
   3719 #define copyG(path1, path2) _Generic((path1), \
   3720   char *: _Generic((path2), \
   3721     char *: copy, \
   3722     const char *: copy, \
   3723     smallJsont *: copySSmallJsonO, \
   3724     smallStringt *: copySO), \
   3725   const char *: _Generic((path2), \
   3726     char *: copy, \
   3727     const char *: copy, \
   3728     smallJsont *: copySSmallJsonO, \
   3729     smallStringt *: copySO), \
   3730   smallJsont *: _Generic((path2), \
   3731     char *: copySmallJsonOS, \
   3732     const char*: copySmallJsonOS, \
   3733     smallJsont *: copySmallJsonSmallJson, \
   3734     smallStringt *: copySmallJsonO), \
   3735   smallStringt *: _Generic((path2), \
   3736     char *: copyOS, \
   3737     const char*: copyOS, \
   3738     smallJsont *: copyOSmallJson, \
   3739     smallStringt *: copyO) \
   3740   )(path1, path2)
   3741 
   3742 #define randomSG(returnType, length) _Generic((returnType), \
   3743   char *: randomS, \
   3744   smallJsont *: randomSmallJsonO, \
   3745   smallStringt *: randomSO \
   3746   )(length)
   3747 
   3748 #define randomAlphaNumSG(returnType, length) _Generic((returnType), \
   3749   char *: randomAlphaNumS, \
   3750   smallJsont *: randomAlphaNumSmallJsonO, \
   3751   smallStringt *: randomAlphaNumSO \
   3752   )(length)
   3753 
   3754 #define readG(returnType) _Generic((returnType), \
   3755   char *: readS, \
   3756   smallJsont *: readSmallJsonO, \
   3757   smallStringt *: readO \
   3758   )()
   3759 
   3760 #define readLineG(returnType, fp) _Generic((returnType), \
   3761   char *: readLine, \
   3762   smallJsont *: readLineSmallJsonO, \
   3763   smallStringt *: readLineO \
   3764   )(fp)
   3765 
   3766 #define dupG(self) _Generic((self), \
   3767   smallArrayt*: duplicateSmallArrayG, \
   3768   smallBoolt*: duplicateSmallBoolG, \
   3769   smallBytest*: duplicateSmallBytesG, \
   3770   smallContainert*: duplicateSmallContainerG, \
   3771   smallDictt*: duplicateSmallDictG, \
   3772   smallDoublet*: duplicateSmallDoubleG, \
   3773   smallIntt*: duplicateSmallIntG, \
   3774   smallJsont*: duplicateSmallJsonG, \
   3775   smallStringt*: duplicateSmallStringG, \
   3776   undefinedt*: duplicateUndefinedG, \
   3777   baset*: duplicateBaseG, \
   3778   char *: dupS,\
   3779   const char *: dupS,\
   3780   char **: listDupS, \
   3781   const char **: listDupCG, \
   3782   btt: dupB, \
   3783   btt*: dupPB \
   3784   )(self)
   3785 
   3786 #define replaceO(self, olds, news, max) (self)->f->replace(self, olds, news, max)
   3787 #define replaceG(self, olds, news, max) _Generic((self), \
   3788   char *: _Generic(olds, \
   3789     char *: _Generic(news, \
   3790       char *: replaceS, \
   3791       const char *: replaceS, \
   3792       char: replaceSCharS, \
   3793       int: replaceSCharS, \
   3794       default: replaceS \
   3795       ) , \
   3796     const char *: _Generic(news, \
   3797       char *: replaceS, \
   3798       const char *: replaceS, \
   3799       char: replaceSCharS, \
   3800       int: replaceSCharS, \
   3801       default: replaceS \
   3802       ), \
   3803     char: _Generic(news, \
   3804       char *: replaceCharSS, \
   3805       const char *: replaceCharSS, \
   3806       char: replaceCharCharS, \
   3807       int: replaceCharCharS, \
   3808       default: replaceCharSS \
   3809       ), \
   3810     int: _Generic(news, \
   3811       char *: replaceCharSS, \
   3812       const char *: replaceCharSS, \
   3813       char: replaceCharCharS, \
   3814       int: replaceCharCharS, \
   3815       default: replaceCharSS \
   3816       ), \
   3817     default: replaceS \
   3818     ), \
   3819   char **: _Generic(olds, \
   3820     char *: _Generic(news, \
   3821       char *: iReplaceS, \
   3822       const char *: iReplaceS, \
   3823       char: iReplaceSCharS, \
   3824       int: iReplaceSCharS, \
   3825       default: iReplaceS \
   3826       ) , \
   3827     const char *: _Generic(news, \
   3828       char *: iReplaceS, \
   3829       const char *: iReplaceS, \
   3830       char: iReplaceSCharS, \
   3831       int: iReplaceSCharS, \
   3832       default: iReplaceS \
   3833       ), \
   3834     char: _Generic(news, \
   3835       char *: iReplaceCharSS, \
   3836       const char *: iReplaceCharSS, \
   3837       char: iReplaceCharCharS, \
   3838       int: iReplaceCharCharS, \
   3839       default: iReplaceCharSS \
   3840       ) , \
   3841     int: _Generic(news, \
   3842       char *: iReplaceCharSS, \
   3843       const char *: iReplaceCharSS, \
   3844       char: iReplaceCharCharS, \
   3845       int: iReplaceCharCharS, \
   3846       default: iReplaceCharSS \
   3847       ), \
   3848     default: iReplaceS \
   3849     ), \
   3850   smallJsont *: _Generic(olds, \
   3851     char *: _Generic(news, \
   3852       char *: replaceSmallJsonG,\
   3853       const char *: replaceSmallJsonG,\
   3854       char: replaceSCharSmallJsonG,\
   3855       int: replaceSCharSmallJsonG,\
   3856       smallJsont *: replaceSJsonSmallJsonG, \
   3857       smallStringt *: replaceSSmallStringSmallJsonG \
   3858       ), \
   3859     const char *: _Generic(news, \
   3860       char *: replaceSmallJsonG,\
   3861       const char *: replaceSmallJsonG,\
   3862       char: replaceSCharSmallJsonG,\
   3863       int: replaceSCharSmallJsonG,\
   3864       smallJsont *: replaceSJsonSmallJsonG, \
   3865       smallStringt *: replaceSSmallStringSmallJsonG \
   3866       ), \
   3867     char: _Generic(news, \
   3868       char *: replaceCharSSmallJsonG, \
   3869       const char *: replaceCharSSmallJsonG, \
   3870       char: replaceCharCharSmallJsonG, \
   3871       int: replaceCharCharSmallJsonG, \
   3872       smallJsont *: replaceCharJsonSmallJsonG, \
   3873       smallStringt *: replaceCharSmallStringSmallJsonG \
   3874       ), \
   3875     int: _Generic(news, \
   3876       char *: replaceCharSSmallJsonG, \
   3877       const char *: replaceCharSSmallJsonG, \
   3878       char: replaceCharCharSmallJsonG, \
   3879       int: replaceCharCharSmallJsonG, \
   3880       smallJsont *: replaceCharJsonSmallJsonG, \
   3881       smallStringt *: replaceCharSmallStringSmallJsonG \
   3882       ), \
   3883     smallJsont *: _Generic(news, \
   3884       char *: replaceJsonSSmallJsonG, \
   3885       const char *: replaceJsonSSmallJsonG, \
   3886       char: replaceJsonCharSmallJsonG, \
   3887       int: replaceJsonCharSmallJsonG, \
   3888       smallJsont *: replaceJsonJsonSmallJsonG, \
   3889       smallStringt *: replaceJsonSmallStringSmallJsonG \
   3890       ), \
   3891     smallStringt *: _Generic(news, \
   3892       char *: replaceSmallStringSSmallJsonG, \
   3893       const char *: replaceSmallStringSSmallJsonG, \
   3894       char: replaceSmallStringCharSmallJsonG, \
   3895       int: replaceSmallStringCharSmallJsonG, \
   3896       smallJsont *: replaceSmallStringJsonSmallJsonG, \
   3897       smallStringt *: replaceSmallStringSmallStringSmallJsonG \
   3898       ) \
   3899     ), \
   3900   smallStringt *: _Generic(olds, \
   3901     char *: _Generic(news, \
   3902       char *: replaceSmallStringG,\
   3903       const char *: replaceSmallStringG,\
   3904       char: replaceSCharSmallStringG,\
   3905       int: replaceSCharSmallStringG,\
   3906       smallJsont *: replaceSSmallJsonSmallStringG, \
   3907       smallStringt *: replaceSSmallStringSmallStringG \
   3908       ), \
   3909     const char *: _Generic(news, \
   3910       char *: replaceSmallStringG,\
   3911       const char *: replaceSmallStringG,\
   3912       char: replaceSCharSmallStringG,\
   3913       int: replaceSCharSmallStringG,\
   3914       smallJsont *: replaceSSmallJsonSmallStringG, \
   3915       smallStringt *: replaceSSmallStringSmallStringG \
   3916       ), \
   3917     char: _Generic(news, \
   3918       char *: replaceCharSSmallStringG, \
   3919       const char *: replaceCharSSmallStringG, \
   3920       char: replaceCharCharSmallStringG, \
   3921       int: replaceCharCharSmallStringG, \
   3922       smallJsont *: replaceCharSmallJsonSmallStringG, \
   3923       smallStringt *: replaceCharSmallStringSmallStringG \
   3924       ), \
   3925     int: _Generic(news, \
   3926       char *: replaceCharSSmallStringG, \
   3927       const char *: replaceCharSSmallStringG, \
   3928       char: replaceCharCharSmallStringG, \
   3929       int: replaceCharCharSmallStringG, \
   3930       smallJsont *: replaceCharSmallJsonSmallStringG, \
   3931       smallStringt *: replaceCharSmallStringSmallStringG \
   3932       ), \
   3933     smallJsont *: _Generic(news, \
   3934       char *: replaceSmallJsonSSmallStringG, \
   3935       const char *: replaceSmallJsonSSmallStringG, \
   3936       char: replaceSmallJsonCharSmallStringG, \
   3937       int: replaceSmallJsonCharSmallStringG, \
   3938       smallJsont *: replaceSmallJsonSmallJsonSmallStringG, \
   3939       smallStringt *: replaceSmallJsonSmallStringSmallStringG \
   3940       ), \
   3941     smallStringt *: _Generic(news, \
   3942       char *: replaceSmallStringSSmallStringG, \
   3943       const char *: replaceSmallStringSSmallStringG, \
   3944       char: replaceSmallStringCharSmallStringG, \
   3945       int: replaceSmallStringCharSmallStringG, \
   3946       smallJsont *: replaceSmallStringSmallJsonSmallStringG, \
   3947       smallStringt *: replaceSmallStringSmallStringSmallStringG \
   3948       ) \
   3949     ) \
   3950   )(self, olds, news, max)
   3951 
   3952 #define icReplaceO(self, olds, news, max) (self)->f->icReplace(self, olds, news, max)
   3953 #define icReplaceG(self, olds, news, max) _Generic((self), \
   3954   char *: _Generic(olds, \
   3955     char *: _Generic(news, \
   3956       char *: icReplaceS, \
   3957       const char *: icReplaceS, \
   3958       char: icReplaceSCharS, \
   3959       int: icReplaceSCharS, \
   3960       default: icReplaceS \
   3961       ) , \
   3962     const char *: _Generic(news, \
   3963       char *: icReplaceS, \
   3964       const char *: icReplaceS, \
   3965       char: icReplaceSCharS, \
   3966       int: icReplaceSCharS, \
   3967       default: icReplaceS \
   3968       ), \
   3969     char: _Generic(news, \
   3970       char *: icReplaceCharSS, \
   3971       const char *: icReplaceCharSS, \
   3972       char: icReplaceCharCharS, \
   3973       int: icReplaceCharCharS, \
   3974       default: icReplaceCharSS \
   3975       ), \
   3976     int: _Generic(news, \
   3977       char *: icReplaceCharSS, \
   3978       const char *: icReplaceCharSS, \
   3979       char: icReplaceCharCharS, \
   3980       int: icReplaceCharCharS, \
   3981       default: icReplaceCharSS \
   3982       ), \
   3983     default: icReplaceS \
   3984     ), \
   3985   char **: _Generic(olds, \
   3986     char *: _Generic(news, \
   3987       char *: iicReplaceS, \
   3988       const char *: iicReplaceS, \
   3989       char: iicReplaceSCharS, \
   3990       int: iicReplaceSCharS, \
   3991       default: iicReplaceS \
   3992       ) , \
   3993     const char *: _Generic(news, \
   3994       char *: iicReplaceS, \
   3995       const char *: iicReplaceS, \
   3996       char: iicReplaceSCharS, \
   3997       int: iicReplaceSCharS, \
   3998       default: iicReplaceS \
   3999       ), \
   4000     char: _Generic(news, \
   4001       char *: iicReplaceCharSS, \
   4002       const char *: iicReplaceCharSS, \
   4003       char: iicReplaceCharCharS, \
   4004       int: iicReplaceCharCharS, \
   4005       default: iicReplaceCharSS \
   4006       ) , \
   4007     int: _Generic(news, \
   4008       char *: iicReplaceCharSS, \
   4009       const char *: iicReplaceCharSS, \
   4010       char: iicReplaceCharCharS, \
   4011       int: iicReplaceCharCharS, \
   4012       default: iicReplaceCharSS \
   4013       ), \
   4014     default: iicReplaceS \
   4015     ), \
   4016   smallJsont *: _Generic(olds, \
   4017     char *: _Generic(news, \
   4018       char *: icReplaceSmallJsonG,\
   4019       const char *: icReplaceSmallJsonG,\
   4020       char: icReplaceSCharSmallJsonG,\
   4021       int: icReplaceSCharSmallJsonG,\
   4022       smallJsont *: icReplaceSJsonSmallJsonG, \
   4023       smallStringt *: icReplaceSSmallStringSmallJsonG, \
   4024       default: icReplaceSmallJsonG \
   4025       ), \
   4026     const char *: _Generic(news, \
   4027       char *: icReplaceSmallJsonG,\
   4028       const char *: icReplaceSmallJsonG,\
   4029       char: icReplaceSCharSmallJsonG,\
   4030       int: icReplaceSCharSmallJsonG,\
   4031       smallJsont *: icReplaceSJsonSmallJsonG, \
   4032       smallStringt *: icReplaceSSmallStringSmallJsonG, \
   4033       default: icReplaceSmallJsonG \
   4034       ), \
   4035     char: _Generic(news, \
   4036       char *: icReplaceCharSSmallJsonG, \
   4037       const char *: icReplaceCharSSmallJsonG, \
   4038       char: icReplaceCharCharSmallJsonG, \
   4039       int: icReplaceCharCharSmallJsonG, \
   4040       smallJsont *: icReplaceCharJsonSmallJsonG, \
   4041       smallStringt *: icReplaceCharSmallStringSmallJsonG, \
   4042       default: icReplaceCharSSmallJsonG \
   4043       ), \
   4044     int: _Generic(news, \
   4045       char *: icReplaceCharSSmallJsonG, \
   4046       const char *: icReplaceCharSSmallJsonG, \
   4047       char: icReplaceCharCharSmallJsonG, \
   4048       int: icReplaceCharCharSmallJsonG, \
   4049       smallJsont *: icReplaceCharJsonSmallJsonG, \
   4050       smallStringt *: icReplaceCharSmallStringSmallJsonG, \
   4051       default: icReplaceCharSSmallJsonG \
   4052       ), \
   4053     smallJsont *: _Generic(news, \
   4054       char *: icReplaceJsonSSmallJsonG, \
   4055       const char *: icReplaceJsonSSmallJsonG, \
   4056       char: icReplaceJsonCharSmallJsonG, \
   4057       smallJsont *: icReplaceJsonJsonSmallJsonG, \
   4058       smallStringt *: icReplaceJsonSmallStringSmallJsonG, \
   4059       default: icReplaceCharSSmallJsonG \
   4060       ), \
   4061     smallStringt *: _Generic(news, \
   4062       char *: icReplaceSmallStringSSmallJsonG, \
   4063       const char *: icReplaceSmallStringSSmallJsonG, \
   4064       char: icReplaceSmallStringCharSmallJsonG, \
   4065       smallJsont *: icReplaceSmallStringJsonSmallJsonG, \
   4066       smallStringt *: icReplaceSmallStringSmallStringSmallJsonG, \
   4067       default: icReplaceSmallStringSSmallJsonG \
   4068       ) \
   4069     ), \
   4070   smallStringt *: _Generic(olds, \
   4071     char *: _Generic(news, \
   4072       char *: icReplaceSmallStringG,\
   4073       const char *: icReplaceSmallStringG,\
   4074       char: icReplaceSCharSmallStringG,\
   4075       int: icReplaceSCharSmallStringG,\
   4076       smallJsont *: icReplaceSSmallJsonSmallStringG, \
   4077       smallStringt *: icReplaceSSmallStringSmallStringG, \
   4078       default: icReplaceSmallStringG \
   4079       ), \
   4080     const char *: _Generic(news, \
   4081       char *: icReplaceSmallStringG,\
   4082       const char *: icReplaceSmallStringG,\
   4083       char: icReplaceSCharSmallStringG,\
   4084       int: icReplaceSCharSmallStringG,\
   4085       smallJsont *: icReplaceSSmallJsonSmallStringG, \
   4086       smallStringt *: icReplaceSSmallStringSmallStringG, \
   4087       default: icReplaceSmallStringG \
   4088       ), \
   4089     char: _Generic(news, \
   4090       char *: icReplaceCharSSmallStringG, \
   4091       const char *: icReplaceCharSSmallStringG, \
   4092       char: icReplaceCharCharSmallStringG, \
   4093       int: icReplaceCharCharSmallStringG, \
   4094       smallJsont *: icReplaceCharSmallJsonSmallStringG, \
   4095       smallStringt *: icReplaceCharSmallStringSmallStringG, \
   4096       default: icReplaceCharSSmallStringG \
   4097       ), \
   4098     int: _Generic(news, \
   4099       char *: icReplaceCharSSmallStringG, \
   4100       const char *: icReplaceCharSSmallStringG, \
   4101       char: icReplaceCharCharSmallStringG, \
   4102       int: icReplaceCharCharSmallStringG, \
   4103       smallJsont *: icReplaceCharSmallJsonSmallStringG, \
   4104       smallStringt *: icReplaceCharSmallStringSmallStringG, \
   4105       default: icReplaceCharSSmallStringG \
   4106       ), \
   4107     smallJsont *: _Generic(news, \
   4108       char *: icReplaceSmallJsonSSmallStringG, \
   4109       const char *: icReplaceSmallJsonSSmallStringG, \
   4110       char: icReplaceSmallJsonCharSmallStringG, \
   4111       smallJsont *: icReplaceSmallJsonSmallJsonSmallStringG, \
   4112       smallStringt *: icReplaceSmallJsonSmallStringSmallStringG, \
   4113       default: icReplaceSmallJsonSSmallStringG \
   4114       ), \
   4115     smallStringt *: _Generic(news, \
   4116       char *: icReplaceSmallStringSSmallStringG, \
   4117       const char *: icReplaceSmallStringSSmallStringG, \
   4118       char: icReplaceSmallStringCharSmallStringG, \
   4119       smallJsont *: icReplaceSmallStringSmallJsonSmallStringG, \
   4120       smallStringt *: icReplaceSmallStringSmallStringSmallStringG, \
   4121       default: icReplaceSmallStringSSmallStringG \
   4122       ) \
   4123     ) \
   4124   )(self, olds, news, max)
   4125 
   4126 /**
   4127  * is self a libsheepy object
   4128  */
   4129 #define isLSheepyObject(self) _Generic((self), default: 0,\
   4130    baset *: 1,\
   4131    smallArrayt*: 1,\
   4132    smallBoolt*: 1,\
   4133    smallBytest*: 1,\
   4134    smallDictt *: 1,\
   4135    smallDoublet *: 1,\
   4136    smallIntt *: 1,\
   4137    smallJsont *: 1,\
   4138    smallStringt *: 1,\
   4139    smallContainert *: 1,\
   4140    undefinedt *: 1\
   4141    )
   4142 
   4143 /**
   4144  * return true when self value and obj value are equal
   4145  * Checks if self is NULL before calling the methods
   4146  */
   4147 #define eqG(self, obj) FUNC(\
   4148     bool UNIQVAR(r);\
   4149     /* if self is NULL and sheepy object, return false */\
   4150     if (isLSheepyObject(self) and !(self)) UNIQVAR(r) = false;\
   4151     else UNIQVAR(r) = eqDirectG(self, obj);\
   4152     /*return*/UNIQVAR(r);\
   4153     )
   4154 
   4155 /**
   4156  * return true when self value and obj value are equal
   4157  * Directly calls the methods without NULL check
   4158  */
   4159 #define eqDirectG(self, obj) _Generic((self), \
   4160   char: _Generic(obj, \
   4161     char *: eqCharS, \
   4162     const char *: eqCharS, \
   4163     char: eqCharChar, \
   4164     baset*: equalChaOG, \
   4165     bool: equalChaBoolG, \
   4166     double: equalChaDoubleG, \
   4167     int64_t: equalChaInt64G, \
   4168     int32_t: equalChaInt32G, \
   4169     uint32_t: equalChaUint32G, \
   4170     uint64_t: equalChaUint64G, \
   4171     smallBytest*: equalChaSmallBytesG, \
   4172     smallDoublet*: equalChaSmallDoubleG, \
   4173     smallIntt*: equalChaSmallIntG, \
   4174     smallJsont*: equalChaSmallJsonG, \
   4175     smallStringt*: equalChaSmallStringG, \
   4176     default: notEqualCharG \
   4177     ) , \
   4178   char *: _Generic((obj), \
   4179     char *: eqS, \
   4180     const char *: eqS, \
   4181     char: eqSChar, \
   4182     baset*: equalCharOG, \
   4183     bool: equalCharBoolG, \
   4184     double: equalCharDoubleG, \
   4185     int64_t: equalCharInt64G, \
   4186     int32_t: equalCharInt32G, \
   4187     uint32_t: equalCharUint32G, \
   4188     uint64_t: equalCharUint64G, \
   4189     smallBoolt*: equalCharSmallBoolG, \
   4190     smallBytest*: equalCharSmallBytesG, \
   4191     smallDoublet*: equalCharSmallDoubleG, \
   4192     smallIntt*: equalCharSmallIntG, \
   4193     smallJsont*: equalCharPSmallJsonG, \
   4194     smallStringt*: equalCharPSmallStringG, \
   4195     default: notEqualOG), \
   4196   const char *: _Generic((obj), \
   4197     char *: eqS, \
   4198     const char *: eqS, \
   4199     char: eqSChar, \
   4200     baset*: equalCharOG, \
   4201     bool: equalCharBoolG, \
   4202     double: equalCharDoubleG, \
   4203     int64_t: equalCharInt64G, \
   4204     int32_t: equalCharInt32G, \
   4205     uint32_t: equalCharUint32G, \
   4206     uint64_t: equalCharUint64G, \
   4207     smallBoolt*: equalCharSmallBoolG, \
   4208     smallBytest*: equalCharSmallBytesG, \
   4209     smallDoublet*: equalCharSmallDoubleG, \
   4210     smallIntt*: equalCharSmallIntG, \
   4211     smallJsont*: equalCharPSmallJsonG, \
   4212     smallStringt*: equalCharPSmallStringG, \
   4213     default: notEqualCCOG), \
   4214   char **: _Generic((obj) , \
   4215     char: notEqualOCharG, \
   4216     char **: listEqS, \
   4217     const char **: listEqCG, \
   4218     baset*: equalArrayOG, \
   4219     bool: notEqualOBoolG, \
   4220     double: notEqualDoubleG, \
   4221     int64_t: notEqualOInt64G, \
   4222     int32_t: notEqualOInt32G, \
   4223     uint32_t: notEqualOUint32G, \
   4224     uint64_t: notEqualOUint64G, \
   4225     smallJsont*: equalArraySmallJsonG, \
   4226     smallArrayt*: equalArraySmallArrayG, \
   4227     default: notEqualOG), \
   4228   const char **: _Generic((obj) , \
   4229     char: notEqualOCharG, \
   4230     char **: listEqC1G, \
   4231     const char **: listEqCCG, \
   4232     baset*: equalCArrayOG, \
   4233     bool: notEqualOBoolG, \
   4234     double: notEqualDoubleG, \
   4235     int64_t: notEqualOInt64G, \
   4236     int32_t: notEqualOInt32G, \
   4237     uint32_t: notEqualOUint32G, \
   4238     uint64_t: notEqualOUint64G, \
   4239     smallJsont*: equalCArraySmallJsonG, \
   4240     smallArrayt*: equalCArraySmallArrayG, \
   4241     default: notEqualOG), \
   4242   baset*: _Generic((obj), \
   4243     char: equalOChaG, \
   4244     char *: equalOCharG, \
   4245     const char *: equalOCharG, \
   4246     char **: equalOArrayG, \
   4247     const char **: equalOCArrayG, \
   4248     baset*: equalOOG, \
   4249     bool: equalOBoolG, \
   4250     double: equalODoubleG, \
   4251     int64_t: equalOInt64G, \
   4252     int32_t: equalOInt32G, \
   4253     uint32_t: equalOUint32G, \
   4254     uint64_t: equalOUint64G, \
   4255     smallArrayt*: equalOSmallArrayG, \
   4256     smallBoolt*: equalOSmallBoolG, \
   4257     smallBytest*: equalOSmallBytesG, \
   4258     smallDoublet*: equalOSmallDoubleG, \
   4259     smallDictt*: equalOSmallDictG, \
   4260     smallIntt*: equalOSmallIntG, \
   4261     smallJsont*: equalOSmallJsonG, \
   4262     smallStringt*: equalOSmallStringG, \
   4263     default: notEqualOG), \
   4264   bool: _Generic((obj), \
   4265     char: equalBoolChaG, \
   4266     char *: equalBoolCharG, \
   4267     const char *: equalBoolCharG, \
   4268     baset*: equalBoolOG, \
   4269     bool: equalBoolFG, \
   4270     double: equalBoolDoubleG, \
   4271     int64_t: equalBoolInt64G, \
   4272     int32_t: equalBoolInt32G, \
   4273     uint32_t: equalBoolUint32G, \
   4274     uint64_t: equalBoolUint64G, \
   4275     smallBoolt*: equalBoolSmallBoolG, \
   4276     smallBytest*: equalBoolSmallBytesG, \
   4277     smallDoublet*: equalBoolSmallDoubleG, \
   4278     smallIntt*: equalBoolSmallIntG, \
   4279     smallJsont*: equalBoolSmallJsonG, \
   4280     smallStringt*: equalBoolSmallStringG, \
   4281     default: notEqualBoolOG), \
   4282   double: _Generic((obj), \
   4283     char: equalDoubleChaG, \
   4284     char *: equalDoubleCharG, \
   4285     const char *: equalDoubleCharG, \
   4286     baset*: equalDoubleBaseG, \
   4287     bool: equalDoubleBoolG, \
   4288     double: equalDoubleFG, \
   4289     int64_t: equalDoubleInt64G, \
   4290     int32_t: equalDoubleInt32G, \
   4291     uint32_t: equalDoubleUint32G, \
   4292     uint64_t: equalDoubleUint64G, \
   4293     smallBoolt*: equalDoubleSmallBoolG, \
   4294     smallBytest*: equalDoubleSmallBytesG, \
   4295     smallDoublet*: equalDoubleSmallDoubleG, \
   4296     smallIntt*: equalDoubleSmallIntG, \
   4297     smallJsont*: equalDoubleSmallJsonG, \
   4298     smallStringt*: equalDoubleSmallStringG, \
   4299     default: notEqualDoubleOG), \
   4300   int64_t: _Generic((obj), \
   4301     char: equalInt64ChaG, \
   4302     char *: equalInt64CharG, \
   4303     const char *: equalInt64CharG, \
   4304     baset*: equalInt64BaseG, \
   4305     bool: equalInt64BoolG, \
   4306     double: equalInt64DoubleG, \
   4307     int64_t: equalInt64FG, \
   4308     int32_t: equalInt64Int32G, \
   4309     uint32_t: equalInt64Uint32G, \
   4310     uint64_t: equalInt64Uint64G, \
   4311     smallBoolt*: equalInt64SmallBoolG, \
   4312     smallBytest*: equalInt64SmallBytesG, \
   4313     smallDoublet*: equalInt64SmallDoubleG, \
   4314     smallIntt*: equalInt64SmallIntG, \
   4315     smallJsont*: equalInt64SmallJsonG, \
   4316     smallStringt*: equalInt64SmallStringG, \
   4317     default: notEqualInt64OG), \
   4318   int32_t: _Generic((obj), \
   4319     char: equalInt32ChaG, \
   4320     char *: equalInt32CharG, \
   4321     const char *: equalInt32CharG, \
   4322     baset*: equalInt32BaseG, \
   4323     bool: equalInt32BoolG, \
   4324     double: equalInt32DoubleG, \
   4325     int64_t: equalInt32Int64G, \
   4326     int32_t: equalInt32FG, \
   4327     uint32_t: equalInt32Uint32G, \
   4328     uint64_t: equalInt32Uint64G, \
   4329     smallBoolt*: equalInt32SmallBoolG, \
   4330     smallBytest*: equalInt32SmallBytesG, \
   4331     smallDoublet*: equalInt32SmallDoubleG, \
   4332     smallIntt*: equalInt32SmallIntG, \
   4333     smallJsont*: equalInt32SmallJsonG, \
   4334     smallStringt*: equalInt32SmallStringG, \
   4335     default: notEqualInt32OG), \
   4336   uint32_t: _Generic((obj), \
   4337     char: equalUint32ChaG, \
   4338     char *: equalUint32CharG, \
   4339     const char *: equalUint32CharG, \
   4340     baset*: equalUint32BaseG, \
   4341     bool: equalUint32BoolG, \
   4342     double: equalUint32DoubleG, \
   4343     int64_t: equalUint32Int64G, \
   4344     int32_t: equalUint32Int32G, \
   4345     uint32_t: equalUint32FG, \
   4346     uint64_t: equalUint32Uint64G, \
   4347     smallBoolt*: equalUint32SmallBoolG, \
   4348     smallBytest*: equalUint32SmallBytesG, \
   4349     smallDoublet*: equalUint32SmallDoubleG, \
   4350     smallIntt*: equalUint32SmallIntG, \
   4351     smallJsont*: equalUint32SmallJsonG, \
   4352     smallStringt*: equalUint32SmallStringG, \
   4353     default: notEqualUint32OG), \
   4354   uint64_t: _Generic((obj), \
   4355     char: equalUint64ChaG, \
   4356     char *: equalUint64CharG, \
   4357     const char *: equalUint64CharG, \
   4358     baset*: equalUint64BaseG, \
   4359     bool: equalUint64BoolG, \
   4360     double: equalUint64DoubleG, \
   4361     int64_t: equalUint64Int64G, \
   4362     int32_t: equalUint64Int32G, \
   4363     uint32_t: equalUint64Uint32G, \
   4364     uint64_t: equalUint64FG, \
   4365     smallBoolt*: equalUint64SmallBoolG, \
   4366     smallBytest*: equalUint64SmallBytesG, \
   4367     smallDoublet*: equalUint64SmallDoubleG, \
   4368     smallIntt*: equalUint64SmallIntG, \
   4369     smallJsont*: equalUint64SmallJsonG, \
   4370     smallStringt*: equalUint64SmallStringG, \
   4371     default: notEqualUint64OG), \
   4372   smallArrayt*: _Generic((obj), \
   4373     char: notEqualOCharG, \
   4374     char **: equalSmallArrayArrayG, \
   4375     const char **: equalSmallArrayCArrayG, \
   4376     baset*: equalSmallArrayBaseG, \
   4377     bool: notEqualOBoolG, \
   4378     double: notEqualDoubleG, \
   4379     int64_t: notEqualOInt64G, \
   4380     int32_t: notEqualOInt32G, \
   4381     uint32_t: notEqualOUint32G, \
   4382     uint64_t: notEqualOUint32G, \
   4383     smallJsont*: equalSmallArraySmallJsonG, \
   4384     smallArrayt*: equalSmallArrayG, \
   4385     default: notEqualOG), \
   4386   smallBoolt*: _Generic((obj), \
   4387     char: notEqualOCharG, \
   4388     char *: equalSmallBoolCharG, \
   4389     const char *: equalSmallBoolCharG, \
   4390     baset*: equalSmallBoolBaseG, \
   4391     bool: equalSmallBoolBoolG, \
   4392     double: equalSmallBoolDoubleG, \
   4393     int64_t: equalSmallBoolInt64G, \
   4394     int32_t: equalSmallBoolInt32G, \
   4395     uint32_t: equalSmallBoolUint32G, \
   4396     uint64_t: equalSmallBoolUint64G, \
   4397     smallBoolt*: equalSmallBoolFG, \
   4398     smallBytest*: equalSmallBoolSmallBytesG, \
   4399     smallDoublet*: equalSmallBoolSmallDoubleG, \
   4400     smallIntt*: equalSmallBoolSmallIntG, \
   4401     smallJsont*: equalSmallBoolSmallJsonG, \
   4402     smallStringt*: equalSmallBoolSmallStringG, \
   4403     default: notEqualOG), \
   4404   smallBytest*: _Generic((obj), \
   4405     char: notEqualOCharG, \
   4406     char *: equalSmallBytesCharG, \
   4407     const char *: equalSmallBytesCharG, \
   4408     baset*: equalSmallBytesBaseG, \
   4409     bool: equalSmallBytesBoolG, \
   4410     double: equalSmallBytesDoubleG, \
   4411     int64_t: equalSmallBytesInt64G, \
   4412     int32_t: equalSmallBytesInt32G, \
   4413     uint32_t: equalSmallBytesUint32G, \
   4414     uint64_t: equalSmallBytesUint64G, \
   4415     smallBoolt*: equalSmallBytesSmallBoolG, \
   4416     smallBytest*: equalSmallBytesG, \
   4417     smallDoublet*: equalSmallBytesSmallDoubleG, \
   4418     smallIntt*: equalSmallBytesSmallIntG, \
   4419     smallStringt*: equalSmallBytesSmallStringG, \
   4420     default: notEqualOG), \
   4421   smallDoublet*: _Generic((obj), \
   4422     char: equalSmallDoubleChaG, \
   4423     char *: equalSmallDoubleCharG, \
   4424     const char *: equalSmallDoubleCharG, \
   4425     baset*: equalSmallDoubleBaseG, \
   4426     bool: equalSmallDoubleBoolG, \
   4427     double: equalSmallDoubleDoubleG, \
   4428     int64_t: equalSmallDoubleInt64G, \
   4429     int32_t: equalSmallDoubleInt32G, \
   4430     uint32_t: equalSmallDoubleUint32G, \
   4431     uint64_t: equalSmallDoubleUint64G, \
   4432     smallBoolt*: equalSmallDoubleSmallBoolG, \
   4433     smallBytest*: equalSmallDoubleSmallBytesG, \
   4434     smallDoublet*: equalSmallDoubleFG, \
   4435     smallIntt*: equalSmallDoubleSmallIntG, \
   4436     smallJsont*: equalSmallDoubleSmallJsonG, \
   4437     smallStringt*: equalSmallDoubleSmallStringG, \
   4438     default: notEqualOG), \
   4439   smallDictt*: _Generic((obj), \
   4440     char: notEqualOCharG, \
   4441     baset*: equalSmallDictBaseG, \
   4442     bool: notEqualOBoolG, \
   4443     double: notEqualDoubleG, \
   4444     int64_t: notEqualOInt64G, \
   4445     int32_t: notEqualOInt32G, \
   4446     uint32_t: notEqualOUint32G, \
   4447     uint64_t: notEqualOUint64G, \
   4448     smallJsont*: equalSmallDictSmallJsonG, \
   4449     smallDictt*: equalSmallDictG, \
   4450     default: notEqualOG), \
   4451   smallIntt*: _Generic((obj), \
   4452     char: equalSmallIntChaG, \
   4453     char *: equalSmallIntCharG, \
   4454     const char *: equalSmallIntCharG, \
   4455     baset*: equalSmallIntBaseG, \
   4456     bool: equalSmallIntBoolG, \
   4457     double: equalSmallIntDoubleG, \
   4458     int64_t: equalSmallIntInt64G, \
   4459     int32_t: equalSmallIntInt32G, \
   4460     uint32_t: equalSmallIntUint32G, \
   4461     uint64_t: equalSmallIntUint64G, \
   4462     smallBoolt*: equalSmallIntSmallBoolG, \
   4463     smallBytest*: equalSmallIntSmallBytesG, \
   4464     smallDoublet*: equalSmallIntSmallDoubleG, \
   4465     smallIntt*: equalSmallIntFG, \
   4466     smallJsont*: equalSmallIntSmallJsonG, \
   4467     smallStringt*: equalSmallIntSmallStringG, \
   4468     default: notEqualOG), \
   4469   smallJsont*: _Generic((obj), \
   4470     char: equalSmallJsonChaG, \
   4471     char *: equalSmallJsonCharG, \
   4472     const char *: equalSmallJsonCharG, \
   4473     char **: equalSmallJsonArrayG, \
   4474     const char **: equalSmallJsonCArrayG, \
   4475     baset*: equalSmallJsonBaseG, \
   4476     bool: equalSmallJsonBoolG, \
   4477     double: equalSmallJsonDoubleG, \
   4478     int64_t: equalSmallJsonInt64G, \
   4479     int32_t: equalSmallJsonInt32G, \
   4480     uint32_t: equalSmallJsonUint32G, \
   4481     uint64_t: equalSmallJsonUint64G, \
   4482     smallArrayt*: equalSmallJsonSmallArrayG, \
   4483     smallBoolt*: equalSmallJsonSmallBoolG, \
   4484     smallBytest*: equalSmallJsonSmallBytesG, \
   4485     smallDictt*: equalSmallJsonSmallDictG, \
   4486     smallDoublet*: equalSmallJsonSmallDoubleG, \
   4487     smallIntt*: equalSmallJsonSmallIntG, \
   4488     smallJsont*: equalSmallJsonSmallJsonG, \
   4489     smallStringt*: equalSmallJsonSmallStringG, \
   4490     default: notEqualOG), \
   4491   smallStringt*: _Generic((obj), \
   4492     char *: equalSSmallStringG, \
   4493     const char *: equalSSmallStringG, \
   4494     char: equalCharSmallStringG, \
   4495     baset*: equalSmallStringBaseG, \
   4496     bool: equalSmallStringBoolG, \
   4497     double: equalSmallStringDoubleG, \
   4498     int64_t: equalSmallStringInt64G, \
   4499     int32_t: equalSmallStringInt32G, \
   4500     uint32_t: equalSmallStringUint32G, \
   4501     uint64_t: equalSmallStringUint64G, \
   4502     smallBoolt*: equalSmallStringSmallBoolG, \
   4503     smallBytest*: equalSmallStringSmallBytesG, \
   4504     smallDoublet*: equalSmallStringSmallDoubleG, \
   4505     smallIntt*: equalSmallStringSmallIntG, \
   4506     smallJsont*: equalSmallStringSmallJsonG, \
   4507     smallStringt*: equalSmallStringFG, \
   4508     default: notEqualOG) \
   4509   )(self, obj)
   4510 
   4511 /**
   4512  * ignore case and return true when self value and obj value are equal
   4513  * Checks if self is NULL before calling the methods
   4514  */
   4515 #define icEqG(self, obj) FUNC(\
   4516     bool UNIQVAR(r);\
   4517     /* if self is NULL and sheepy object, return false */\
   4518     if (isLSheepyObject(self) and !(self)) UNIQVAR(r) = false;\
   4519     else UNIQVAR(r) = icEqDirectG(self, obj);\
   4520     /*return*/UNIQVAR(r);\
   4521     )
   4522 
   4523 /**
   4524  * ignore case and return true when self value and obj value are equal
   4525  * Directly calls the methods without NULL check
   4526  */
   4527 #define icEqDirectG(self, obj) _Generic((self), \
   4528   char: _Generic(obj, \
   4529     char *: icEqCharS, \
   4530     const char *: icEqCharS, \
   4531     char: icEqCharChar, \
   4532     baset*: icEqualChaOG, \
   4533     bool: equalChaBoolG, \
   4534     double: equalChaDoubleG, \
   4535     int64_t: equalChaInt64G, \
   4536     int32_t: equalChaInt32G, \
   4537     uint32_t: equalChaUint32G, \
   4538     uint64_t: equalChaUint64G, \
   4539     smallDoublet*: equalChaSmallDoubleG, \
   4540     smallIntt*: equalChaSmallIntG, \
   4541     smallJsont*: icEqualChaSmallJsonG, \
   4542     smallStringt*: icEqualChaSmallStringG, \
   4543     default: notEqualCharG \
   4544     ) , \
   4545   char *: _Generic((obj), \
   4546     char *: icEqS, \
   4547     const char *: icEqS, \
   4548     char: icEqSChar, \
   4549     baset*: icEqualCharOG, \
   4550     bool: equalCharBoolG, \
   4551     double: equalCharDoubleG, \
   4552     int64_t: equalCharInt64G, \
   4553     int32_t: equalCharInt32G, \
   4554     uint32_t: equalCharUint32G, \
   4555     uint64_t: equalCharUint64G, \
   4556     smallBoolt*: equalCharSmallBoolG, \
   4557     smallBytest*: equalCharSmallBytesG, \
   4558     smallDoublet*: equalCharSmallDoubleG, \
   4559     smallIntt*: equalCharSmallIntG, \
   4560     smallJsont*: icEqualCharPSmallJsonG, \
   4561     smallStringt*: icEqualCharPSmallStringG, \
   4562     default: notEqualOG), \
   4563   const char *: _Generic((obj), \
   4564     char *: icEqS, \
   4565     const char *: icEqS, \
   4566     char: icEqSChar, \
   4567     baset*: icEqualCharOG, \
   4568     bool: equalCharBoolG, \
   4569     double: equalCharDoubleG, \
   4570     int64_t: equalCharInt64G, \
   4571     int32_t: equalCharInt32G, \
   4572     uint32_t: equalCharUint32G, \
   4573     uint64_t: equalCharUint64G, \
   4574     smallBoolt*: equalCharSmallBoolG, \
   4575     smallBytest*: equalCharSmallBytesG, \
   4576     smallDoublet*: equalCharSmallDoubleG, \
   4577     smallIntt*: equalCharSmallIntG, \
   4578     smallJsont*: icEqualCharPSmallJsonG, \
   4579     smallStringt*: icEqualCharPSmallStringG, \
   4580     default: notEqualCCOG), \
   4581   char **: _Generic((obj) , \
   4582     char: notEqualOCharG, \
   4583     char **: icListEqS, \
   4584     const char **: icListEqCG, \
   4585     baset*: icEqualArrayOG, \
   4586     bool: notEqualOBoolG, \
   4587     double: notEqualDoubleG, \
   4588     int64_t: notEqualOInt64G, \
   4589     int32_t: notEqualOInt32G, \
   4590     uint32_t: notEqualOUint32G, \
   4591     uint64_t: notEqualOUint64G, \
   4592     smallJsont*: icEqualArraySmallJsonG, \
   4593     smallArrayt*: icEqualArraySmallArrayG, \
   4594     default: notEqualOG), \
   4595   const char **: _Generic((obj) , \
   4596     char: notEqualOCharG, \
   4597     char **: icListEqC1G, \
   4598     const char **: icListEqCCG, \
   4599     baset*: icEqualCArrayOG, \
   4600     bool: notEqualOBoolG, \
   4601     double: notEqualDoubleG, \
   4602     int64_t: notEqualOInt64G, \
   4603     int32_t: notEqualOInt32G, \
   4604     uint32_t: notEqualOUint32G, \
   4605     uint64_t: notEqualOUint64G, \
   4606     smallJsont*: icEqualCArraySmallJsonG, \
   4607     smallArrayt*: icEqualCArraySmallArrayG, \
   4608     default: notEqualOG), \
   4609   baset*: _Generic((obj), \
   4610     char: icEqualOChaG, \
   4611     char *: icEqualOCharG, \
   4612     const char *: icEqualOCharG, \
   4613     char **: icEqualOArrayG, \
   4614     const char **: icEqualOCArrayG, \
   4615     baset*: icEqualOOG, \
   4616     bool: equalOBoolG, \
   4617     double: equalODoubleG, \
   4618     int64_t: equalOInt64G, \
   4619     int32_t: equalOInt32G, \
   4620     uint32_t: equalOUint32G, \
   4621     uint64_t: equalOUint64G, \
   4622     smallArrayt*: icEqualOSmallArrayG, \
   4623     smallBoolt*: equalOSmallBoolG, \
   4624     smallBytest*: equalOSmallBytesG, \
   4625     smallDoublet*: equalOSmallDoubleG, \
   4626     smallDictt*: icEqualOSmallDictG, \
   4627     smallIntt*: equalOSmallIntG, \
   4628     smallJsont*: icEqualOSmallJsonG, \
   4629     smallStringt*: icEqualOSmallStringG, \
   4630     default: notEqualOG), \
   4631   bool: _Generic((obj), \
   4632     char: equalBoolChaG, \
   4633     char *: equalBoolCharG, \
   4634     const char *: equalBoolCharG, \
   4635     baset*: equalBoolOG, \
   4636     bool: equalBoolFG, \
   4637     double: equalBoolDoubleG, \
   4638     int64_t: equalBoolInt64G, \
   4639     int32_t: equalBoolInt32G, \
   4640     uint32_t: equalBoolUint32G, \
   4641     uint64_t: equalBoolUint64G, \
   4642     smallBoolt*: equalBoolSmallBoolG, \
   4643     smallBytest*: equalBoolSmallBytesG, \
   4644     smallDoublet*: equalBoolSmallDoubleG, \
   4645     smallIntt*: equalBoolSmallIntG, \
   4646     smallJsont*: equalBoolSmallJsonG, \
   4647     smallStringt*: equalBoolSmallStringG, \
   4648     default: notEqualBoolOG), \
   4649   double: _Generic((obj), \
   4650     char: equalDoubleChaG, \
   4651     char *: equalDoubleCharG, \
   4652     const char *: equalDoubleCharG, \
   4653     baset*: equalDoubleBaseG, \
   4654     bool: equalDoubleBoolG, \
   4655     double: equalDoubleFG, \
   4656     int64_t: equalDoubleInt64G, \
   4657     int32_t: equalDoubleInt32G, \
   4658     uint32_t: equalDoubleUint32G, \
   4659     uint64_t: equalDoubleUint64G, \
   4660     smallBoolt*: equalDoubleSmallBoolG, \
   4661     smallBytest*: equalDoubleSmallBytesG, \
   4662     smallDoublet*: equalDoubleSmallDoubleG, \
   4663     smallIntt*: equalDoubleSmallIntG, \
   4664     smallJsont*: equalDoubleSmallJsonG, \
   4665     smallStringt*: equalDoubleSmallStringG, \
   4666     default: notEqualDoubleOG), \
   4667   int64_t: _Generic((obj), \
   4668     char: equalInt64ChaG, \
   4669     char *: equalInt64CharG, \
   4670     const char *: equalInt64CharG, \
   4671     baset*: equalInt64BaseG, \
   4672     bool: equalInt64BoolG, \
   4673     double: equalInt64DoubleG, \
   4674     int64_t: equalInt64FG, \
   4675     int32_t: equalInt64Int32G, \
   4676     uint32_t: equalInt64Uint32G, \
   4677     uint64_t: equalInt64Uint64G, \
   4678     smallBoolt*: equalInt64SmallBoolG, \
   4679     smallBytest*: equalInt64SmallBytesG, \
   4680     smallDoublet*: equalInt64SmallDoubleG, \
   4681     smallIntt*: equalInt64SmallIntG, \
   4682     smallJsont*: equalInt64SmallJsonG, \
   4683     smallStringt*: equalInt64SmallStringG, \
   4684     default: notEqualInt64OG), \
   4685   int32_t: _Generic((obj), \
   4686     char: equalInt32ChaG, \
   4687     char *: equalInt32CharG, \
   4688     const char *: equalInt32CharG, \
   4689     baset*: equalInt32BaseG, \
   4690     bool: equalInt32BoolG, \
   4691     double: equalInt32DoubleG, \
   4692     int64_t: equalInt32Int64G, \
   4693     int32_t: equalInt32FG, \
   4694     uint32_t: equalInt32Uint32G, \
   4695     uint64_t: equalInt32Uint64G, \
   4696     smallBoolt*: equalInt32SmallBoolG, \
   4697     smallBytest*: equalInt32SmallBytesG, \
   4698     smallDoublet*: equalInt32SmallDoubleG, \
   4699     smallIntt*: equalInt32SmallIntG, \
   4700     smallJsont*: equalInt32SmallJsonG, \
   4701     smallStringt*: equalInt32SmallStringG, \
   4702     default: notEqualInt32OG), \
   4703   uint32_t: _Generic((obj), \
   4704     char: equalUint32ChaG, \
   4705     char *: equalUint32CharG, \
   4706     const char *: equalUint32CharG, \
   4707     baset*: equalUint32BaseG, \
   4708     bool: equalUint32BoolG, \
   4709     double: equalUint32DoubleG, \
   4710     int64_t: equalUint32Int64G, \
   4711     int32_t: equalUint32Int32G, \
   4712     uint32_t: equalUint32FG, \
   4713     uint64_t: equalUint32Uint64G, \
   4714     smallBoolt*: equalUint32SmallBoolG, \
   4715     smallBytest*: equalUint32SmallBytesG, \
   4716     smallDoublet*: equalUint32SmallDoubleG, \
   4717     smallIntt*: equalUint32SmallIntG, \
   4718     smallJsont*: equalUint32SmallJsonG, \
   4719     smallStringt*: equalUint32SmallStringG, \
   4720     default: notEqualUint32OG), \
   4721   uint64_t: _Generic((obj), \
   4722     char: equalUint64ChaG, \
   4723     char *: equalUint64CharG, \
   4724     const char *: equalUint64CharG, \
   4725     baset*: equalUint64BaseG, \
   4726     bool: equalUint64BoolG, \
   4727     double: equalUint64DoubleG, \
   4728     int64_t: equalUint64Int64G, \
   4729     int32_t: equalUint64Int32G, \
   4730     uint32_t: equalUint64Uint32G, \
   4731     uint64_t: equalUint64FG, \
   4732     smallBoolt*: equalUint64SmallBoolG, \
   4733     smallBytest*: equalUint64SmallBytesG, \
   4734     smallDoublet*: equalUint64SmallDoubleG, \
   4735     smallIntt*: equalUint64SmallIntG, \
   4736     smallJsont*: equalUint64SmallJsonG, \
   4737     smallStringt*: equalUint64SmallStringG, \
   4738     default: notEqualUint64OG), \
   4739   smallArrayt*: _Generic((obj), \
   4740     char: notEqualOCharG, \
   4741     char **: icEqualSmallArrayArrayG, \
   4742     const char **: icEqualSmallArrayCArrayG, \
   4743     baset*: icEqualSmallArrayBaseG, \
   4744     bool: notEqualOBoolG, \
   4745     double: notEqualDoubleG, \
   4746     int64_t: notEqualOInt64G, \
   4747     int32_t: notEqualOInt32G, \
   4748     uint32_t: notEqualOUint32G, \
   4749     uint64_t: notEqualOUint32G, \
   4750     smallJsont*: icEqualSmallArraySmallJsonG, \
   4751     smallArrayt*: icEqualSmallArrayG, \
   4752     default: notEqualOG), \
   4753   smallBoolt*: _Generic((obj), \
   4754     char: notEqualOCharG, \
   4755     char *: equalSmallBoolCharG, \
   4756     const char *: equalSmallBoolCharG, \
   4757     baset*: equalSmallBoolBaseG, \
   4758     bool: equalSmallBoolBoolG, \
   4759     double: equalSmallBoolDoubleG, \
   4760     int64_t: equalSmallBoolInt64G, \
   4761     int32_t: equalSmallBoolInt32G, \
   4762     uint32_t: equalSmallBoolUint32G, \
   4763     uint64_t: equalSmallBoolUint64G, \
   4764     smallBoolt*: equalSmallBoolFG, \
   4765     smallBytest*: equalSmallBoolSmallBytesG, \
   4766     smallDoublet*: equalSmallBoolSmallDoubleG, \
   4767     smallIntt*: equalSmallBoolSmallIntG, \
   4768     smallJsont*: equalSmallBoolSmallJsonG, \
   4769     smallStringt*: equalSmallBoolSmallStringG, \
   4770     default: notEqualOG), \
   4771   smallBytest*: _Generic((obj), \
   4772     char: notEqualOCharG, \
   4773     char *: equalSmallBytesCharG, \
   4774     const char *: equalSmallBytesCharG, \
   4775     baset*: equalSmallBytesBaseG, \
   4776     bool: equalSmallBytesBoolG, \
   4777     double: equalSmallBytesDoubleG, \
   4778     int64_t: equalSmallBytesInt64G, \
   4779     int32_t: equalSmallBytesInt32G, \
   4780     uint32_t: equalSmallBytesUint32G, \
   4781     uint64_t: equalSmallBytesUint64G, \
   4782     smallBoolt*: equalSmallBytesSmallBoolG, \
   4783     smallBytest*: equalSmallBytesG, \
   4784     smallDoublet*: equalSmallBytesSmallDoubleG, \
   4785     smallIntt*: equalSmallBytesSmallIntG, \
   4786     smallStringt*: equalSmallBytesSmallStringG, \
   4787     default: notEqualOG), \
   4788   smallDoublet*: _Generic((obj), \
   4789     char: equalSmallDoubleChaG, \
   4790     char *: equalSmallDoubleCharG, \
   4791     const char *: equalSmallDoubleCharG, \
   4792     baset*: equalSmallDoubleBaseG, \
   4793     bool: equalSmallDoubleBoolG, \
   4794     double: equalSmallDoubleDoubleG, \
   4795     int64_t: equalSmallDoubleInt64G, \
   4796     int32_t: equalSmallDoubleInt32G, \
   4797     uint32_t: equalSmallDoubleUint32G, \
   4798     uint64_t: equalSmallDoubleUint64G, \
   4799     smallBoolt*: equalSmallDoubleSmallBoolG, \
   4800     smallBytest*: equalSmallDoubleSmallBytesG, \
   4801     smallDoublet*: equalSmallDoubleFG, \
   4802     smallIntt*: equalSmallDoubleSmallIntG, \
   4803     smallJsont*: equalSmallDoubleSmallJsonG, \
   4804     smallStringt*: equalSmallDoubleSmallStringG, \
   4805     default: notEqualOG), \
   4806   smallDictt*: _Generic((obj), \
   4807     char: notEqualOCharG, \
   4808     baset*: icEqualSmallDictBaseG, \
   4809     bool: notEqualOBoolG, \
   4810     double: notEqualDoubleG, \
   4811     int64_t: notEqualOInt64G, \
   4812     int32_t: notEqualOInt32G, \
   4813     uint32_t: notEqualOUint32G, \
   4814     uint64_t: notEqualOUint64G, \
   4815     smallJsont*: icEqualSmallDictSmallJsonG, \
   4816     smallDictt*: icEqualSmallDictG, \
   4817     default: notEqualOG), \
   4818   smallIntt*: _Generic((obj), \
   4819     char: equalSmallIntChaG, \
   4820     char *: equalSmallIntCharG, \
   4821     const char *: equalSmallIntCharG, \
   4822     baset*: equalSmallIntBaseG, \
   4823     bool: equalSmallIntBoolG, \
   4824     double: equalSmallIntDoubleG, \
   4825     int64_t: equalSmallIntInt64G, \
   4826     int32_t: equalSmallIntInt32G, \
   4827     uint32_t: equalSmallIntUint32G, \
   4828     uint64_t: equalSmallIntUint64G, \
   4829     smallBoolt*: equalSmallIntSmallBoolG, \
   4830     smallBytest*: equalSmallIntSmallBytesG, \
   4831     smallDoublet*: equalSmallIntSmallDoubleG, \
   4832     smallIntt*: equalSmallIntFG, \
   4833     smallJsont*: equalSmallIntSmallJsonG, \
   4834     smallStringt*: equalSmallIntSmallStringG, \
   4835     default: notEqualOG), \
   4836   smallJsont*: _Generic((obj), \
   4837     char *: icEqualSSmallJsonG, \
   4838     const char *: icEqualSSmallJsonG, \
   4839     char: icEqualCharSmallJsonG, \
   4840     char **: icEqualSmallJsonArrayG, \
   4841     const char **: icEqualSmallJsonCArrayG, \
   4842     baset*: icEqualSmallJsonBaseG, \
   4843     bool: equalSmallJsonBoolG, \
   4844     double: equalSmallJsonDoubleG, \
   4845     int64_t: equalSmallJsonInt64G, \
   4846     int32_t: equalSmallJsonInt32G, \
   4847     uint32_t: equalSmallJsonUint32G, \
   4848     uint64_t: equalSmallJsonUint64G, \
   4849     smallArrayt*: icEqualSmallJsonSmallArrayG, \
   4850     smallBoolt*: equalSmallJsonSmallBoolG, \
   4851     smallBytest*: equalSmallJsonSmallBytesG, \
   4852     smallDictt*: icEqualSmallJsonSmallDictG, \
   4853     smallDoublet*: equalSmallJsonSmallDoubleG, \
   4854     smallIntt*: equalSmallJsonSmallIntG, \
   4855     smallJsont*: icEqualSmallJsonSmallJsonG, \
   4856     smallStringt*: icEqualSmallJsonSmallStringG, \
   4857     default: notEqualOG), \
   4858   smallStringt*: _Generic((obj), \
   4859     char *: icEqualSSmallStringG, \
   4860     const char *: icEqualSSmallStringG, \
   4861     char: icEqualCharSmallStringG, \
   4862     baset*: icEqualSmallStringBaseG, \
   4863     bool: equalSmallStringBoolG, \
   4864     double: equalSmallStringDoubleG, \
   4865     int64_t: equalSmallStringInt64G, \
   4866     int32_t: equalSmallStringInt32G, \
   4867     uint32_t: equalSmallStringUint32G, \
   4868     uint64_t: equalSmallStringUint64G, \
   4869     smallBoolt*: equalSmallStringSmallBoolG, \
   4870     smallBytest*: equalSmallStringSmallBytesG, \
   4871     smallDoublet*: equalSmallStringSmallDoubleG, \
   4872     smallIntt*: equalSmallStringSmallIntG, \
   4873     smallJsont*: icEqualSmallStringSmallJsonG, \
   4874     smallStringt*: icEqualSmallStringFG, \
   4875     default: notEqualOG) \
   4876   )(self, obj)
   4877 
   4878 #define eqIG(self, obj, index) _Generic((self), \
   4879   char *: _Generic(obj, \
   4880     char *: eqIS, \
   4881     const char *: eqIS, \
   4882     char: eqICharS, \
   4883     int: eqICharS, \
   4884     default: eqIS \
   4885     ), \
   4886   const char *: _Generic(obj, \
   4887     char *: eqIS, \
   4888     const char *: eqIS, \
   4889     char: eqICharS, \
   4890     int: eqICharS, \
   4891     default: eqIS \
   4892     ), \
   4893   smallJsont *: _Generic(obj, \
   4894     char *: equalISSmallJsonG, \
   4895     const char *: equalISSmallJsonG, \
   4896     char: equalICharSmallJsonG, \
   4897     int: equalICharSmallJsonG, \
   4898     smallJsont *: equalIJsonSmallJsonG, \
   4899     smallStringt *: equalISmallStringSmallJsonG, \
   4900     default: equalISSmallJsonG \
   4901     ), \
   4902   smallStringt *: _Generic(obj, \
   4903     char *: equalISSmallStringG, \
   4904     const char *: equalISSmallStringG, \
   4905     char: equalICharSmallStringG, \
   4906     int: equalICharSmallStringG, \
   4907     smallJsont *: equalISmallJsonSmallStringG, \
   4908     smallStringt *: equalISmallStringSmallStringG, \
   4909     default: equalISSmallStringG \
   4910     ) \
   4911   )(self, obj, index)
   4912 
   4913 #define startsWithG(self, obj) _Generic((self), \
   4914   char *: _Generic(obj, \
   4915     char *: startsWithS, \
   4916     const char *: startsWithS, \
   4917     char: startsWithCharS, \
   4918     int: startsWithCharS, \
   4919     default: startsWithS \
   4920     ), \
   4921   const char *: _Generic(obj, \
   4922     char *: startsWithS, \
   4923     const char *: startsWithS, \
   4924     char: startsWithCharS, \
   4925     int: startsWithCharS, \
   4926     default: startsWithS \
   4927     ), \
   4928   smallJsont *: _Generic(obj, \
   4929     char *: startsWithSSmallJsonG, \
   4930     const char *: startsWithSSmallJsonG, \
   4931     char: startsWithCharSmallJsonG, \
   4932     int: startsWithCharSmallJsonG, \
   4933     smallJsont *: startsWithJsonSmallJsonG, \
   4934     smallStringt *: startsWithSmallStringSmallJsonG \
   4935     ), \
   4936   smallStringt *: _Generic(obj, \
   4937     char *: startsWithSSmallStringG, \
   4938     const char *: startsWithSSmallStringG, \
   4939     char: startsWithCharSmallStringG, \
   4940     int: startsWithCharSmallStringG, \
   4941     smallJsont *: startsWithSmallJsonSmallStringG, \
   4942     smallStringt *: startsWithSmallStringSmallStringG \
   4943     ) \
   4944   )(self, obj)
   4945 
   4946 #define endsWithG(self, obj) _Generic((self), \
   4947   char *: _Generic(obj, \
   4948     char *: endsWithS, \
   4949     const char *: endsWithS, \
   4950     char: endsWithCharS, \
   4951     int: endsWithCharS, \
   4952     default: endsWithS \
   4953     ), \
   4954   const char *: _Generic(obj, \
   4955     char *: endsWithS, \
   4956     const char *: endsWithS, \
   4957     char: endsWithCharS, \
   4958     int: endsWithCharS, \
   4959     default: endsWithS \
   4960     ), \
   4961   smallJsont *: _Generic(obj, \
   4962     char *: endsWithSSmallJsonG, \
   4963     const char *: endsWithSSmallJsonG, \
   4964     char: endsWithCharSmallJsonG, \
   4965     int: endsWithCharSmallJsonG, \
   4966     smallJsont *: endsWithJsonSmallJsonG, \
   4967     smallStringt *: endsWithSmallStringSmallJsonG \
   4968     ), \
   4969   smallStringt *: _Generic(obj, \
   4970     char *: endsWithSSmallStringG, \
   4971     const char *: endsWithSSmallStringG, \
   4972     char: endsWithCharSmallStringG, \
   4973     int: endsWithCharSmallStringG, \
   4974     smallJsont *: endsWithSmallJsonSmallStringG, \
   4975     smallStringt *: endsWithSmallStringSmallStringG \
   4976     ) \
   4977   )(self, obj)
   4978 
   4979 #define countG(self, obj) _Generic((self), \
   4980   char *: _Generic(obj, \
   4981     char *: countS, \
   4982     const char *: countS, \
   4983     char: countCharS, \
   4984     int: countCharS, \
   4985     default: countS \
   4986     ), \
   4987   const char *: _Generic(obj, \
   4988     char *: countS, \
   4989     const char *: countS, \
   4990     char: countCharS, \
   4991     int: countCharS, \
   4992     default: countS \
   4993     ), \
   4994   smallJsont *: _Generic(obj, \
   4995     char *: countSSmallJsonG, \
   4996     const char *: countSSmallJsonG, \
   4997     char: countCharSmallJsonG, \
   4998     int: countCharSmallJsonG, \
   4999     smallJsont *: countJsonSmallJsonG, \
   5000     smallStringt *: countSmallStringSmallJsonG \
   5001     ), \
   5002   smallStringt *: _Generic(obj, \
   5003     char *: countSSmallStringG, \
   5004     const char *: countSSmallStringG, \
   5005     char: countCharSmallStringG, \
   5006     int: countCharSmallStringG, \
   5007     smallJsont *: countSmallJsonSmallStringG, \
   5008     smallStringt *: countSmallStringSmallStringG \
   5009     ) \
   5010   )(self, obj)
   5011 
   5012 #define icStartsWithG(self, obj) _Generic((self), \
   5013   char *: _Generic(obj, \
   5014     char *: icStartsWithS, \
   5015     const char *: icStartsWithS, \
   5016     char: icStartsWithCharS, \
   5017     int: icStartsWithCharS, \
   5018     default: icStartsWithS \
   5019     ), \
   5020   const char *: _Generic(obj, \
   5021     char *: icStartsWithS, \
   5022     const char *: icStartsWithS, \
   5023     char: icStartsWithCharS, \
   5024     int: icStartsWithCharS, \
   5025     default: icStartsWithS \
   5026     ), \
   5027   smallJsont *: _Generic(obj, \
   5028     char *: icStartsWithSSmallJsonG, \
   5029     const char *: icStartsWithSSmallJsonG, \
   5030     char: icStartsWithCharSmallJsonG, \
   5031     int: icStartsWithCharSmallJsonG, \
   5032     smallJsont *: icStartsWithJsonSmallJsonG, \
   5033     smallStringt *: icStartsWithSmallStringSmallJsonG \
   5034     ), \
   5035   smallStringt *: _Generic(obj, \
   5036     char *: icStartsWithSSmallStringG, \
   5037     const char *: icStartsWithSSmallStringG, \
   5038     char: icStartsWithCharSmallStringG, \
   5039     int: icStartsWithCharSmallStringG, \
   5040     smallJsont *: icStartsWithSmallJsonSmallStringG, \
   5041     smallStringt *: icStartsWithSmallStringSmallStringG \
   5042     ) \
   5043   )(self, obj)
   5044 
   5045 #define icEndsWithG(self, obj) _Generic((self), \
   5046   char *: _Generic(obj, \
   5047     char *: icEndsWithS, \
   5048     const char *: icEndsWithS, \
   5049     char: icEndsWithCharS, \
   5050     int: icEndsWithCharS, \
   5051     default: icEndsWithS \
   5052     ), \
   5053   const char *: _Generic(obj, \
   5054     char *: icEndsWithS, \
   5055     const char *: icEndsWithS, \
   5056     char: icEndsWithCharS, \
   5057     int: icEndsWithCharS, \
   5058     default: icEndsWithS \
   5059     ), \
   5060   smallJsont *: _Generic(obj, \
   5061     char *: icEndsWithSSmallJsonG, \
   5062     const char *: icEndsWithSSmallJsonG, \
   5063     char: icEndsWithCharSmallJsonG, \
   5064     int: icEndsWithCharSmallJsonG, \
   5065     smallJsont *: icEndsWithJsonSmallJsonG, \
   5066     smallStringt *: icEndsWithSmallStringSmallJsonG \
   5067     ), \
   5068   smallStringt *: _Generic(obj, \
   5069     char *: icEndsWithSSmallStringG, \
   5070     const char *: icEndsWithSSmallStringG, \
   5071     char: icEndsWithCharSmallStringG, \
   5072     int: icEndsWithCharSmallStringG, \
   5073     smallJsont *: icEndsWithSmallJsonSmallStringG, \
   5074     smallStringt *: icEndsWithSmallStringSmallStringG \
   5075     ) \
   5076   )(self, obj)
   5077 
   5078 #define icCountG(self, obj) _Generic((self), \
   5079   char *: _Generic(obj, \
   5080     char *: icCountS, \
   5081     const char *: icCountS, \
   5082     char: icCountCharS, \
   5083     int: icCountCharS, \
   5084     default: icCountS \
   5085     ), \
   5086   const char *: _Generic(obj, \
   5087     char *: icCountS, \
   5088     const char *: icCountS, \
   5089     char: icCountCharS, \
   5090     int: icCountCharS, \
   5091     default: icCountS \
   5092     ), \
   5093   smallJsont *: _Generic(obj, \
   5094     char *: icCountSSmallJsonG, \
   5095     const char *: icCountSSmallJsonG, \
   5096     char: icCountCharSmallJsonG, \
   5097     int: icCountCharSmallJsonG, \
   5098     smallJsont *: icCountJsonSmallJsonG, \
   5099     smallStringt *: icCountSmallStringSmallJsonG \
   5100     ), \
   5101   smallStringt *: _Generic(obj, \
   5102     char *: icCountSSmallStringG, \
   5103     const char *: icCountSSmallStringG, \
   5104     char: icCountCharSmallStringG, \
   5105     int: icCountCharSmallStringG, \
   5106     smallJsont *: icCountSmallJsonSmallStringG, \
   5107     smallStringt *: icCountSmallStringSmallStringG \
   5108     ) \
   5109   )(self, obj)
   5110 
   5111 #define isNumberO(self) (self)->f->isNumber(self)
   5112 #define isNumberG(self) _Generic((self), \
   5113   char *: isNumber, \
   5114   const char *: isNumber, \
   5115   smallJsont *: isNumberSmallJsonG, \
   5116   smallStringt *: isNumberSmallStringG \
   5117   )(self)
   5118 
   5119 #define isIntO(self) (self)->f->isInt(self)
   5120 #define isIntG(self) _Generic((self), \
   5121   char *: isInt, \
   5122   const char *: isInt, \
   5123   smallJsont *: isIntSmallJsonG, \
   5124   smallStringt *: isIntSmallStringG \
   5125   )(self)
   5126 
   5127 
   5128 #define parseIntO(self) (self)->f->parseInt(self)
   5129 #define parseIntG(self) _Generic((self), \
   5130   char: parseIntChar, \
   5131   int: parseIntChar, \
   5132   char *: parseInt, \
   5133   const char *: parseInt, \
   5134   smallJsont *: parseIntSmallJsonG, \
   5135   smallStringt *: parseIntSmallStringG \
   5136   )(self)
   5137 
   5138 #define intToO(self, n) (self)->f->intTo(self, n)
   5139 #define intToG(self, n) _Generic((self), \
   5140   char *: intToSG, \
   5141   smallJsont *: intToSmallJsonG, \
   5142   smallStringt *: intToSmallStringG \
   5143   )(self, n)
   5144 
   5145 #define parseDoubleO(self) (self)->f->parseDouble(self)
   5146 #define parseDoubleG(self) _Generic((self), \
   5147   char: parseDoubleChar, \
   5148   int: parseDoubleChar, \
   5149   char *: parseDouble, \
   5150   const char *: parseDouble, \
   5151   smallJsont *: parseDoubleSmallJsonG, \
   5152   smallStringt *: parseDoubleSmallStringG \
   5153   )(self)
   5154 
   5155 #define doubleToO(self, n) (self)->f->doubleTo(self, n)
   5156 #define doubleToG(self, n) _Generic((self), \
   5157   char *: doubleToSG, \
   5158   smallJsont *: doubleToSmallJsonG, \
   5159   smallStringt *: doubleToSmallStringG \
   5160   )(self, n)
   5161 
   5162 #define lenO(self) (self)->f->len(self)
   5163 #define lenG(self) _Generic((self), \
   5164   char *: lenS, \
   5165   const char *: lenS, \
   5166   char **: listLengthS, \
   5167   const char **: listLengthCG, \
   5168   smallArrayt *: lenSmallArrayG, \
   5169   smallBytest *: lenSmallBytesG, \
   5170   smallDictt *: lenSmallDictG, \
   5171   smallJsont *: lenSmallJsonG, \
   5172   smallStringt *: lenSmallStringG \
   5173   )(self)
   5174 
   5175 #define upperO(self) (self)->f->upper(self)
   5176 #define upperG(self) _Generic((self), \
   5177   char *: upperS, \
   5178   const char *: upperS, \
   5179   char **: iUpperS, \
   5180   smallJsont *: upperSmallJsonG, \
   5181   smallStringt *: upperSmallStringG \
   5182   )(self)
   5183 
   5184 #define lowerO(self) (self)->f->lower(self)
   5185 #define lowerG(self) _Generic((self), \
   5186   char *: lowerS, \
   5187   const char *: lowerS, \
   5188   char **: iLowerS, \
   5189   smallJsont *: lowerSmallJsonG, \
   5190   smallStringt *: lowerSmallStringG \
   5191   )(self)
   5192 
   5193 #define trimO(self) (self)->f->trim(self)
   5194 #define trimG(self) _Generic((self), \
   5195   char *: trimS, \
   5196   const char *: trimS, \
   5197   char **: iTrimS, \
   5198   smallArrayt *: trimSmallArrayG, \
   5199   smallDictt *: trimSmallDictG, \
   5200   smallJsont *: trimSmallJsonG, \
   5201   smallStringt *: trimSmallStringG, \
   5202   btt: trimB, \
   5203   const btt: trimB, \
   5204   btt*: bTrimB, \
   5205   const btt*: trimPB \
   5206   )(self)
   5207 
   5208 #define lTrimO(self) (self)->f->lTrim(self)
   5209 #define lTrimG(self) _Generic((self), \
   5210   char *: lTrimS, \
   5211   const char *: lTrimS, \
   5212   char **: iLTrimS, \
   5213   smallJsont *: lTrimSmallJsonG, \
   5214   smallStringt *: lTrimSmallStringG \
   5215   )(self)
   5216 
   5217 #define rTrimO(self) (self)->f->rTrim(self)
   5218 #define rTrimG(self) _Generic((self), \
   5219   char *: rTrimS, \
   5220   const char *: rTrimS, \
   5221   char **: iRTrimS, \
   5222   smallJsont *: rTrimSmallJsonG, \
   5223   smallStringt *: rTrimSmallStringG \
   5224   )(self)
   5225 
   5226 #define uniqO(self, c) (self)->f->uniq(self, c)
   5227 #define uniqG(self, c) _Generic((self), \
   5228   char *: uniqS, \
   5229   const char *: uniqS, \
   5230   char **: iUniqS, \
   5231   char ***: iListUniqG, \
   5232   smallArrayt *: uniqSmallArrayG, \
   5233   smallJsont *: uniqSmallJsonG, \
   5234   smallStringt *: uniqSmallStringG \
   5235   )(self, c)
   5236 
   5237 #define icUniqO(self, c) (self)->f->icUniq(self, c)
   5238 #define icUniqG(self, c) _Generic((self), \
   5239   char *: icUniqS, \
   5240   const char *: icUniqS, \
   5241   char **: iicUniqS, \
   5242   char ***: iicListUniqG, \
   5243   smallArrayt *: icUniqSmallArrayG, \
   5244   smallJsont *: icUniqSmallJsonG, \
   5245   smallStringt *: icUniqSmallStringG \
   5246   )(self, c)
   5247 
   5248 #define sliceO(self, start, end) (self)->f->slice(self, start, end)
   5249 #define sliceG(self, start, end) _Generic((self), \
   5250   char *: sliceS, \
   5251   const char *: sliceS, \
   5252   char **: iSliceS, \
   5253   char ***: iListSliceS, \
   5254   smallArrayt *: sliceSmallArrayG, \
   5255   smallJsont *: sliceSmallJsonG, \
   5256   smallStringt *: sliceSmallStringG, \
   5257   btt: sliceB, \
   5258   const btt: sliceB, \
   5259   btt*: bSliceB, \
   5260   const btt*: slicePB \
   5261   )(self, start, end)
   5262 
   5263 
   5264 #define cropO(self, start, end) (self)->f->crop(self, start, end)
   5265 #define cropG(self, start, end) _Generic((self), \
   5266   char *: cropS, \
   5267   char **: listCropS, \
   5268   char ***: iListCropS, \
   5269   smallArrayt *: cropSmallArrayG, \
   5270   smallJsont *: cropSmallJsonG, \
   5271   smallStringt *: cropSmallStringG \
   5272   )(self, start, end)
   5273 
   5274 #define cropElemO(self, index) (self)->f->cropElem(self, index)
   5275 #define cropElemG(self, returnType, index) _Generic((self), \
   5276   smallDictt*: _Generic(index, \
   5277     char *: _Generic(returnType, \
   5278       baset*: cropElemSmallDictG, \
   5279       undefinedt*: cropElemUndefinedSmallDictG, \
   5280       bool: cropElemBoolSmallDictG, \
   5281       double: cropElemDoubleSmallDictG, \
   5282       int64_t: cropElemIntSmallDictG, \
   5283       int32_t: cropElemInt32SmallDictG, \
   5284       uint64_t: cropElemUintSmallDictG, \
   5285       uint32_t: cropElemUint32SmallDictG, \
   5286       char*: cropElemSSmallDictG, \
   5287       smallDictt*: cropElemDictSmallDictG, \
   5288       smallArrayt*: cropElemArraySmallDictG, \
   5289       smallBoolt*: cropElemSmallBoolSmallDictG, \
   5290       smallBytest*: cropElemSmallBytesSmallDictG, \
   5291       smallDoublet*: cropElemSmallDoubleSmallDictG, \
   5292       smallIntt*: cropElemSmallIntSmallDictG, \
   5293       smallJsont*: cropElemSmallJsonSmallDictG, \
   5294       smallStringt*: cropElemSmallStringSmallDictG, \
   5295       void*: cropElemVoidSmallDictG, \
   5296       smallContainert*: cropElemSmallContainerSmallDictG, \
   5297       default: cropElemSmallDictG), \
   5298     const char *: _Generic(returnType, \
   5299       baset*: cropElemSmallDictG, \
   5300       undefinedt*: cropElemUndefinedSmallDictG, \
   5301       bool: cropElemBoolSmallDictG, \
   5302       double: cropElemDoubleSmallDictG, \
   5303       int64_t: cropElemIntSmallDictG, \
   5304       int32_t: cropElemInt32SmallDictG, \
   5305       uint64_t: cropElemUintSmallDictG, \
   5306       uint32_t: cropElemUint32SmallDictG, \
   5307       char*: cropElemSSmallDictG, \
   5308       smallDictt*: cropElemDictSmallDictG, \
   5309       smallArrayt*: cropElemArraySmallDictG, \
   5310       smallBoolt*: cropElemSmallBoolSmallDictG, \
   5311       smallBytest*: cropElemSmallBytesSmallDictG, \
   5312       smallDoublet*: cropElemSmallDoubleSmallDictG, \
   5313       smallIntt*: cropElemSmallIntSmallDictG, \
   5314       smallJsont*: cropElemSmallJsonSmallDictG, \
   5315       smallStringt*: cropElemSmallStringSmallDictG, \
   5316       void*: cropElemVoidSmallDictG, \
   5317       smallContainert*: cropElemSmallContainerSmallDictG, \
   5318       default: cropElemSmallDictG), \
   5319     default: cropElemSmallDictG \
   5320   ), \
   5321   smallJsont*: _Generic(index, \
   5322     char *: _Generic(returnType, \
   5323       baset*: cropElemKeySmallJsonG, \
   5324       undefinedt*: cropElemKeyUndefinedSmallJsonG, \
   5325       bool: cropElemKeyBoolSmallJsonG, \
   5326       double: cropElemKeyDoubleSmallJsonG, \
   5327       int64_t: cropElemKeyIntSmallJsonG, \
   5328       int32_t: cropElemKeyInt32SmallJsonG, \
   5329       uint64_t: cropElemKeyUintSmallJsonG, \
   5330       uint32_t: cropElemKeyUint32SmallJsonG, \
   5331       char*: cropElemKeySSmallJsonG, \
   5332       smallDictt*: cropElemKeyDictSmallJsonG, \
   5333       smallArrayt*: cropElemKeyArraySmallJsonG, \
   5334       smallBoolt*: cropElemKeySmallBoolSmallJsonG, \
   5335       smallBytest*: cropElemKeySmallBytesSmallJsonG, \
   5336       smallDoublet*: cropElemKeySmallDoubleSmallJsonG, \
   5337       smallIntt*: cropElemKeySmallIntSmallJsonG, \
   5338       smallJsont*: cropElemKeySmallJsonSmallJsonG, \
   5339       smallStringt*: cropElemKeySmallStringSmallJsonG, \
   5340       void*: cropElemKeyVoidSmallJsonG, \
   5341       smallContainert*: cropElemKeySmallContainerSmallJsonG, \
   5342       default: cropElemKeySmallJsonG), \
   5343     const char *: _Generic(returnType, \
   5344       baset*: cropElemKeySmallJsonG, \
   5345       undefinedt*: cropElemKeyUndefinedSmallJsonG, \
   5346       bool: cropElemKeyBoolSmallJsonG, \
   5347       double: cropElemKeyDoubleSmallJsonG, \
   5348       int64_t: cropElemKeyIntSmallJsonG, \
   5349       int32_t: cropElemKeyInt32SmallJsonG, \
   5350       uint64_t: cropElemKeyUintSmallJsonG, \
   5351       uint32_t: cropElemKeyUint32SmallJsonG, \
   5352       char*: cropElemKeySSmallJsonG, \
   5353       smallDictt*: cropElemKeyDictSmallJsonG, \
   5354       smallArrayt*: cropElemKeyArraySmallJsonG, \
   5355       smallBoolt*: cropElemKeySmallBoolSmallJsonG, \
   5356       smallBytest*: cropElemKeySmallBytesSmallJsonG, \
   5357       smallDoublet*: cropElemKeySmallDoubleSmallJsonG, \
   5358       smallIntt*: cropElemKeySmallIntSmallJsonG, \
   5359       smallJsont*: cropElemKeySmallJsonSmallJsonG, \
   5360       smallStringt*: cropElemKeySmallStringSmallJsonG, \
   5361       void*: cropElemKeyVoidSmallJsonG, \
   5362       smallContainert*: cropElemKeySmallContainerSmallJsonG, \
   5363       default: cropElemKeySmallJsonG), \
   5364     int64_t: _Generic(returnType, \
   5365       baset*: cropElemAtSmallJsonG, \
   5366       undefinedt*: cropElemAtUndefinedSmallJsonG, \
   5367       bool: cropElemAtBoolSmallJsonG, \
   5368       double: cropElemAtDoubleSmallJsonG, \
   5369       int64_t: cropElemAtIntSmallJsonG, \
   5370       int32_t: cropElemAtInt32SmallJsonG, \
   5371       uint64_t: cropElemAtUintSmallJsonG, \
   5372       uint32_t: cropElemAtUint32SmallJsonG, \
   5373       char*: cropElemAtSSmallJsonG, \
   5374       smallDictt*: cropElemAtDictSmallJsonG, \
   5375       smallArrayt*: cropElemAtArraySmallJsonG, \
   5376       smallBoolt*: cropElemAtSmallBoolSmallJsonG, \
   5377       smallBytest*: cropElemAtSmallBytesSmallJsonG, \
   5378       smallDoublet*: cropElemAtSmallDoubleSmallJsonG, \
   5379       smallIntt*: cropElemAtSmallIntSmallJsonG, \
   5380       smallJsont*: cropElemAtSmallJsonSmallJsonG, \
   5381       smallStringt*: cropElemAtSmallStringSmallJsonG, \
   5382       void*: cropElemAtVoidSmallJsonG, \
   5383       smallContainert*: cropElemAtSmallContainerSmallJsonG, \
   5384       default: cropElemAtSmallJsonG), \
   5385     int32_t: _Generic(returnType, \
   5386       baset*: cropElemAtSmallJsonG, \
   5387       undefinedt*: cropElemAtUndefinedSmallJsonG, \
   5388       bool: cropElemAtBoolSmallJsonG, \
   5389       double: cropElemAtDoubleSmallJsonG, \
   5390       int64_t: cropElemAtIntSmallJsonG, \
   5391       int32_t: cropElemAtInt32SmallJsonG, \
   5392       uint64_t: cropElemAtUintSmallJsonG, \
   5393       uint32_t: cropElemAtUint32SmallJsonG, \
   5394       char*: cropElemAtSSmallJsonG, \
   5395       smallDictt*: cropElemAtDictSmallJsonG, \
   5396       smallArrayt*: cropElemAtArraySmallJsonG, \
   5397       smallBoolt*: cropElemAtSmallBoolSmallJsonG, \
   5398       smallBytest*: cropElemAtSmallBytesSmallJsonG, \
   5399       smallDoublet*: cropElemAtSmallDoubleSmallJsonG, \
   5400       smallIntt*: cropElemAtSmallIntSmallJsonG, \
   5401       smallJsont*: cropElemAtSmallJsonSmallJsonG, \
   5402       smallStringt*: cropElemAtSmallStringSmallJsonG, \
   5403       void*: cropElemAtVoidSmallJsonG, \
   5404       smallContainert*: cropElemAtSmallContainerSmallJsonG, \
   5405       default: cropElemAtSmallJsonG), \
   5406     int16_t: _Generic(returnType, \
   5407       baset*: cropElemAtSmallJsonG, \
   5408       undefinedt*: cropElemAtUndefinedSmallJsonG, \
   5409       bool: cropElemAtBoolSmallJsonG, \
   5410       double: cropElemAtDoubleSmallJsonG, \
   5411       int64_t: cropElemAtIntSmallJsonG, \
   5412       int32_t: cropElemAtInt32SmallJsonG, \
   5413       uint64_t: cropElemAtUintSmallJsonG, \
   5414       uint32_t: cropElemAtUint32SmallJsonG, \
   5415       char*: cropElemAtSSmallJsonG, \
   5416       smallDictt*: cropElemAtDictSmallJsonG, \
   5417       smallArrayt*: cropElemAtArraySmallJsonG, \
   5418       smallBoolt*: cropElemAtSmallBoolSmallJsonG, \
   5419       smallBytest*: cropElemAtSmallBytesSmallJsonG, \
   5420       smallDoublet*: cropElemAtSmallDoubleSmallJsonG, \
   5421       smallIntt*: cropElemAtSmallIntSmallJsonG, \
   5422       smallJsont*: cropElemAtSmallJsonSmallJsonG, \
   5423       smallStringt*: cropElemAtSmallStringSmallJsonG, \
   5424       void*: cropElemAtVoidSmallJsonG, \
   5425       smallContainert*: cropElemAtSmallContainerSmallJsonG, \
   5426       default: cropElemAtSmallJsonG), \
   5427     int8_t: _Generic(returnType, \
   5428       baset*: cropElemAtSmallJsonG, \
   5429       undefinedt*: cropElemAtUndefinedSmallJsonG, \
   5430       bool: cropElemAtBoolSmallJsonG, \
   5431       double: cropElemAtDoubleSmallJsonG, \
   5432       int64_t: cropElemAtIntSmallJsonG, \
   5433       int32_t: cropElemAtInt32SmallJsonG, \
   5434       uint64_t: cropElemAtUintSmallJsonG, \
   5435       uint32_t: cropElemAtUint32SmallJsonG, \
   5436       char*: cropElemAtSSmallJsonG, \
   5437       smallDictt*: cropElemAtDictSmallJsonG, \
   5438       smallArrayt*: cropElemAtArraySmallJsonG, \
   5439       smallBoolt*: cropElemAtSmallBoolSmallJsonG, \
   5440       smallBytest*: cropElemAtSmallBytesSmallJsonG, \
   5441       smallDoublet*: cropElemAtSmallDoubleSmallJsonG, \
   5442       smallIntt*: cropElemAtSmallIntSmallJsonG, \
   5443       smallJsont*: cropElemAtSmallJsonSmallJsonG, \
   5444       smallStringt*: cropElemAtSmallStringSmallJsonG, \
   5445       void*: cropElemAtVoidSmallJsonG, \
   5446       smallContainert*: cropElemAtSmallContainerSmallJsonG, \
   5447       default: cropElemAtSmallJsonG), \
   5448     uint64_t: _Generic(returnType, \
   5449       baset*: cropElemAtSmallJsonG, \
   5450       undefinedt*: cropElemAtUndefinedSmallJsonG, \
   5451       bool: cropElemAtBoolSmallJsonG, \
   5452       double: cropElemAtDoubleSmallJsonG, \
   5453       int64_t: cropElemAtIntSmallJsonG, \
   5454       int32_t: cropElemAtInt32SmallJsonG, \
   5455       uint64_t: cropElemAtUintSmallJsonG, \
   5456       uint32_t: cropElemAtUint32SmallJsonG, \
   5457       char*: cropElemAtSSmallJsonG, \
   5458       smallDictt*: cropElemAtDictSmallJsonG, \
   5459       smallArrayt*: cropElemAtArraySmallJsonG, \
   5460       smallBoolt*: cropElemAtSmallBoolSmallJsonG, \
   5461       smallBytest*: cropElemAtSmallBytesSmallJsonG, \
   5462       smallDoublet*: cropElemAtSmallDoubleSmallJsonG, \
   5463       smallIntt*: cropElemAtSmallIntSmallJsonG, \
   5464       smallJsont*: cropElemAtSmallJsonSmallJsonG, \
   5465       smallStringt*: cropElemAtSmallStringSmallJsonG, \
   5466       void*: cropElemAtVoidSmallJsonG, \
   5467       smallContainert*: cropElemAtSmallContainerSmallJsonG, \
   5468       default: cropElemAtSmallJsonG), \
   5469     uint32_t: _Generic(returnType, \
   5470       baset*: cropElemAtSmallJsonG, \
   5471       undefinedt*: cropElemAtUndefinedSmallJsonG, \
   5472       bool: cropElemAtBoolSmallJsonG, \
   5473       double: cropElemAtDoubleSmallJsonG, \
   5474       int64_t: cropElemAtIntSmallJsonG, \
   5475       int32_t: cropElemAtInt32SmallJsonG, \
   5476       uint64_t: cropElemAtUintSmallJsonG, \
   5477       uint32_t: cropElemAtUint32SmallJsonG, \
   5478       char*: cropElemAtSSmallJsonG, \
   5479       smallDictt*: cropElemAtDictSmallJsonG, \
   5480       smallArrayt*: cropElemAtArraySmallJsonG, \
   5481       smallBoolt*: cropElemAtSmallBoolSmallJsonG, \
   5482       smallBytest*: cropElemAtSmallBytesSmallJsonG, \
   5483       smallDoublet*: cropElemAtSmallDoubleSmallJsonG, \
   5484       smallIntt*: cropElemAtSmallIntSmallJsonG, \
   5485       smallJsont*: cropElemAtSmallJsonSmallJsonG, \
   5486       smallStringt*: cropElemAtSmallStringSmallJsonG, \
   5487       void*: cropElemAtVoidSmallJsonG, \
   5488       smallContainert*: cropElemAtSmallContainerSmallJsonG, \
   5489       default: cropElemAtSmallJsonG), \
   5490     uint16_t: _Generic(returnType, \
   5491       baset*: cropElemAtSmallJsonG, \
   5492       undefinedt*: cropElemAtUndefinedSmallJsonG, \
   5493       bool: cropElemAtBoolSmallJsonG, \
   5494       double: cropElemAtDoubleSmallJsonG, \
   5495       int64_t: cropElemAtIntSmallJsonG, \
   5496       int32_t: cropElemAtInt32SmallJsonG, \
   5497       uint64_t: cropElemAtUintSmallJsonG, \
   5498       uint32_t: cropElemAtUint32SmallJsonG, \
   5499       char*: cropElemAtSSmallJsonG, \
   5500       smallDictt*: cropElemAtDictSmallJsonG, \
   5501       smallArrayt*: cropElemAtArraySmallJsonG, \
   5502       smallBoolt*: cropElemAtSmallBoolSmallJsonG, \
   5503       smallBytest*: cropElemAtSmallBytesSmallJsonG, \
   5504       smallDoublet*: cropElemAtSmallDoubleSmallJsonG, \
   5505       smallIntt*: cropElemAtSmallIntSmallJsonG, \
   5506       smallJsont*: cropElemAtSmallJsonSmallJsonG, \
   5507       smallStringt*: cropElemAtSmallStringSmallJsonG, \
   5508       void*: cropElemAtVoidSmallJsonG, \
   5509       smallContainert*: cropElemAtSmallContainerSmallJsonG, \
   5510       default: cropElemAtSmallJsonG), \
   5511     uint8_t: _Generic(returnType, \
   5512       baset*: cropElemAtSmallJsonG, \
   5513       undefinedt*: cropElemAtUndefinedSmallJsonG, \
   5514       bool: cropElemAtBoolSmallJsonG, \
   5515       double: cropElemAtDoubleSmallJsonG, \
   5516       int64_t: cropElemAtIntSmallJsonG, \
   5517       int32_t: cropElemAtInt32SmallJsonG, \
   5518       uint64_t: cropElemAtUintSmallJsonG, \
   5519       uint32_t: cropElemAtUint32SmallJsonG, \
   5520       char*: cropElemAtSSmallJsonG, \
   5521       smallDictt*: cropElemAtDictSmallJsonG, \
   5522       smallArrayt*: cropElemAtArraySmallJsonG, \
   5523       smallBoolt*: cropElemAtSmallBoolSmallJsonG, \
   5524       smallBytest*: cropElemAtSmallBytesSmallJsonG, \
   5525       smallDoublet*: cropElemAtSmallDoubleSmallJsonG, \
   5526       smallIntt*: cropElemAtSmallIntSmallJsonG, \
   5527       smallJsont*: cropElemAtSmallJsonSmallJsonG, \
   5528       smallStringt*: cropElemAtSmallStringSmallJsonG, \
   5529       void*: cropElemAtVoidSmallJsonG, \
   5530       smallContainert*: cropElemAtSmallContainerSmallJsonG, \
   5531       default: cropElemAtSmallJsonG), \
   5532     default: cropElemKeySmallJsonG \
   5533   ), \
   5534   smallArrayt*: _Generic(returnType, \
   5535     baset*: cropElemSmallArrayG, \
   5536     undefinedt*: cropElemUndefinedSmallArrayG, \
   5537     bool: cropElemBoolSmallArrayG, \
   5538     double: cropElemDoubleSmallArrayG, \
   5539     int64_t: cropElemIntSmallArrayG, \
   5540     int32_t: cropElemInt32SmallArrayG, \
   5541     uint64_t: cropElemUintSmallArrayG, \
   5542     uint32_t: cropElemUint32SmallArrayG, \
   5543     char*: cropElemSSmallArrayG, \
   5544     smallDictt*: cropElemDictSmallArrayG, \
   5545     smallArrayt*: cropElemArraySmallArrayG, \
   5546     smallBoolt*: cropElemSmallBoolSmallArrayG, \
   5547     smallBytest*: cropElemSmallBytesSmallArrayG, \
   5548     smallDoublet*: cropElemSmallDoubleSmallArrayG, \
   5549     smallIntt*: cropElemSmallIntSmallArrayG, \
   5550     smallJsont*: cropElemSmallJsonSmallArrayG, \
   5551     smallStringt*: cropElemSmallStringSmallArrayG, \
   5552     void*: cropElemVoidSmallArrayG, \
   5553     smallContainert*: cropElemSmallContainerSmallArrayG, \
   5554     default: cropElemSmallArrayG), \
   5555   smallStringt*: cropElemSmallStringG, \
   5556   char *: cropElemS, \
   5557   char **: listCropElemS, \
   5558   char ***: iListCropElemS \
   5559   )(self, index)
   5560 
   5561 
   5562 #define cropSmallJsonO(self, start, end) (self)->f->cropSmallJson(self, start, end)
   5563 #define cropElemAtSmallJsonO(self, index) (self)->f->cropElemAtSmallJson(self, index)
   5564 #define cropElemKeySmallJsonO(self, key) (self)->f->cropElemKeySmallJson(self, key)
   5565 #define cropSmallStringO(self, start, end) (self)->f->cropSmallString(self, start, end)
   5566 #define cropElemSmallStringO(self, index) (self)->f->cropElemSmallString(self, index)
   5567 
   5568 #define copyRngO(self, start, end) (self)->f->copy(self, start, end)
   5569 #define copyRngG(self, start, end) _Generic((self), \
   5570   char *: sliceS, \
   5571   const char *: sliceS, \
   5572   char **: iListCopyS, \
   5573   smallArrayt *: copySmallArrayG, \
   5574   smallJsont *: copySmallJsonG, \
   5575   smallStringt *: copySmallStringG \
   5576   )(self, start, end)
   5577 
   5578 #define insertO(self, index, toInsert) (self)->f->insert(self, index, toInsert)
   5579 #define insertG(self, index, toInsert) _Generic((self), \
   5580   char *: _Generic((toInsert), \
   5581     char *: insertS, \
   5582     char: injectS, \
   5583     int: injectS, \
   5584     default: injectS \
   5585     ), \
   5586   const char *: _Generic((toInsert), \
   5587     char *: insertS, \
   5588     char: injectS, \
   5589     int: injectS, \
   5590     default: injectS \
   5591     ), \
   5592   char **: _Generic((toInsert), \
   5593     char *: iInsertS, \
   5594     char: iInjectS, \
   5595     int: iInjectS, \
   5596     default: iInjectS \
   5597     ), \
   5598   char ***: _Generic((toInsert), \
   5599     char **: iListInsertS, \
   5600     char *: iListInjectS, \
   5601     char: iListInjectCharS, \
   5602     int: iListInjectCharS, \
   5603     default: iListInjectS \
   5604     ), \
   5605   smallArrayt*: _Generic((toInsert), \
   5606     baset*: injectSmallArrayG, \
   5607     bool: injectBoolSmallArrayG, \
   5608     double: injectDoubleSmallArrayG, \
   5609     int64_t: injectIntSmallArrayG, \
   5610     int32_t: injectIntSmallArrayG, \
   5611     uint32_t: injectIntSmallArrayG, \
   5612     uint64_t: injectIntSmallArrayG, \
   5613     char*: injectSSmallArrayG, \
   5614     char: injectCharSmallArrayG, \
   5615     const char*: injectSSmallArrayG, \
   5616     smallDictt*: injectDictSmallArrayG, \
   5617     smallArrayt*: insertSmallArrayG, \
   5618     char **: injectArraycSmallArrayG, \
   5619     const char **: injectCArraycSmallArrayG, \
   5620     smallBoolt*: injectSmallBoolSmallArrayG, \
   5621     smallBytest*: injectSmallBytesSmallArrayG, \
   5622     smallDoublet*: injectSmallDoubleSmallArrayG, \
   5623     smallIntt*: injectSmallIntSmallArrayG, \
   5624     smallJsont*: insertSmallJsonSmallArrayG, \
   5625     smallStringt*: injectSmallStringSmallArrayG, \
   5626     smallContainert*: injectSmallContainerSmallArrayG, \
   5627     undefinedt*: injectUndefinedSmallArrayG, \
   5628     default: injectVoidSmallArrayG \
   5629     ), \
   5630   smallJsont*: _Generic((toInsert), \
   5631     baset*: injectSmallJsonG, \
   5632     bool: injectBoolSmallJsonG, \
   5633     double: injectDoubleSmallJsonG, \
   5634     int64_t: injectIntSmallJsonG, \
   5635     int32_t: injectIntSmallJsonG, \
   5636     uint32_t: injectIntSmallJsonG, \
   5637     uint64_t: injectIntSmallJsonG, \
   5638     char*: injectSSmallJsonG, \
   5639     char: injectCharSmallJsonG, \
   5640     const char*: injectSSmallJsonG, \
   5641     smallDictt*: injectDictSmallJsonG, \
   5642     smallArrayt*: insertSmallJsonG, \
   5643     char **: injectArraycSmallJsonG, \
   5644     const char **: injectCArraycSmallJsonG, \
   5645     smallBoolt*: injectSmallBoolSmallJsonG, \
   5646     smallBytest*: injectSmallBytesSmallJsonG, \
   5647     smallDoublet*: injectSmallDoubleSmallJsonG, \
   5648     smallIntt*: injectSmallIntSmallJsonG, \
   5649     smallJsont*: insertSmallJsonSmallJsonG, \
   5650     smallStringt*: injectSmallStringSmallJsonG, \
   5651     smallContainert*: injectSmallContainerSmallJsonG, \
   5652     undefinedt*: injectUndefinedSmallJsonG, \
   5653     default: injectVoidSmallJsonG \
   5654     ), \
   5655   smallStringt *: _Generic(toInsert, \
   5656     char *: insertSSmallStringG, \
   5657     const char *: insertSSmallStringG, \
   5658     char: injectSmallStringG, \
   5659     int: injectSmallStringG, \
   5660     smallJsont *: insertSmallJsonSmallStringG, \
   5661     smallStringt *: insertSmallStringG, \
   5662     default: insertSSmallStringG \
   5663     ) \
   5664   )(self, index, toInsert)
   5665 
   5666 #define insertNSmashO(self, index, toInsert) (self)->f->insertNSmash(self, index, toInsert)
   5667 #define insertNFreeO insertNSmashO
   5668 #define insertNFreeG insertNSmashG
   5669 #define insertNSmashG(self, index, toInsert) _Generic((self), \
   5670   char *: _Generic((toInsert), \
   5671     char *: insertNFreeS, \
   5672     char: injectS, \
   5673     int: injectS, \
   5674     default: injectS \
   5675     ), \
   5676   const char *: _Generic((toInsert), \
   5677     char *: insertNFreeS, \
   5678     char: injectS, \
   5679     int: injectS, \
   5680     default: injectS \
   5681     ), \
   5682   char **: _Generic((toInsert), \
   5683     char *: iInsertNFreeS, \
   5684     char: iInjectS, \
   5685     int: iInjectS, \
   5686     default: iInjectS \
   5687     ), \
   5688   char ***: _Generic((toInsert), \
   5689     char **: iListInsertNFreeS, \
   5690     char *: iListInjectS, \
   5691     char: iListInjectCharS, \
   5692     int: iListInjectCharS, \
   5693     default: iListInjectS \
   5694     ), \
   5695   smallArrayt*: _Generic((toInsert), \
   5696     baset*: injectNFreeSmallArrayG, \
   5697     bool: injectBoolSmallArrayG, \
   5698     double: injectDoubleSmallArrayG, \
   5699     int64_t: injectIntSmallArrayG, \
   5700     int32_t: injectIntSmallArrayG, \
   5701     uint32_t: injectIntSmallArrayG, \
   5702     uint64_t: injectIntSmallArrayG, \
   5703     char*: injectNFreeSSmallArrayG, \
   5704     char: injectCharSmallArrayG, \
   5705     smallDictt*: injectNFreeDictSmallArrayG, \
   5706     smallArrayt*: insertNSmashSmallArrayG, \
   5707     char **: injectNFreeArraycSmallArrayG, \
   5708     smallBoolt*: injectNFreeSmallBoolSmallArrayG, \
   5709     smallBytest*: injectNFreeSmallBytesSmallArrayG, \
   5710     smallDoublet*: injectNFreeSmallDoubleSmallArrayG, \
   5711     smallIntt*: injectNFreeSmallIntSmallArrayG, \
   5712     smallJsont*: insertNSmashSmallJsonSmallArrayG, \
   5713     smallStringt*: injectNFreeSmallStringSmallArrayG, \
   5714     smallContainert*: injectNFreeSmallContainerSmallArrayG, \
   5715     undefinedt*: injectNFreeUndefinedSmallArrayG, \
   5716     default: injectVoidSmallArrayG \
   5717     ), \
   5718   smallJsont*: _Generic((toInsert), \
   5719     baset*: injectNFreeSmallJsonG, \
   5720     bool: injectBoolSmallJsonG, \
   5721     double: injectDoubleSmallJsonG, \
   5722     int64_t: injectIntSmallJsonG, \
   5723     int32_t: injectIntSmallJsonG, \
   5724     uint32_t: injectIntSmallJsonG, \
   5725     uint64_t: injectIntSmallJsonG, \
   5726     char*: injectNFreeSSmallJsonG, \
   5727     char: injectCharSmallJsonG, \
   5728     smallDictt*: injectNFreeDictSmallJsonG, \
   5729     smallArrayt*: insertNSmashSmallJsonG, \
   5730     char **: injectNFreeArraycSmallJsonG, \
   5731     smallBoolt*: injectNFreeSmallBoolSmallJsonG, \
   5732     smallBytest*: injectNFreeSmallBytesSmallJsonG, \
   5733     smallDoublet*: injectNFreeSmallDoubleSmallJsonG, \
   5734     smallIntt*: injectNFreeSmallIntSmallJsonG, \
   5735     smallJsont*: insertNSmashSmallJsonSmallJsonG, \
   5736     smallStringt*: injectNFreeSmallStringSmallJsonG, \
   5737     smallContainert*: injectNFreeSmallContainerSmallJsonG, \
   5738     undefinedt*: injectNFreeUndefinedSmallJsonG, \
   5739     default: injectVoidSmallJsonG \
   5740     ), \
   5741   smallStringt *: _Generic(toInsert, \
   5742     char *: insertSNFreeSmallStringG, \
   5743     char: injectSmallStringG, \
   5744     int: injectSmallStringG, \
   5745     smallJsont *: insertNFreeSmallJsonSmallStringG, \
   5746     smallStringt *: insertNFreeSmallStringG, \
   5747     default: insertSNFreeSmallStringG \
   5748     ) \
   5749   )(self, index, toInsert)
   5750 
   5751 #define injectG(self, index, value) _Generic((self), \
   5752   char *: injectS, \
   5753   const char *: injectS, \
   5754   char **: iInjectS, \
   5755   char ***: _Generic(value, \
   5756     char *: iListInjectS, \
   5757     char: iListInjectCharS, \
   5758     int: iListInjectCharS, \
   5759     default: iListInjectS \
   5760     ), \
   5761   smallArrayt*: _Generic((value), \
   5762     baset*: injectSmallArrayG, \
   5763     bool: injectBoolSmallArrayG, \
   5764     double: injectDoubleSmallArrayG, \
   5765     int64_t: injectIntSmallArrayG, \
   5766     int32_t: injectIntSmallArrayG, \
   5767     uint32_t: injectIntSmallArrayG, \
   5768     uint64_t: injectIntSmallArrayG, \
   5769     char*: injectSSmallArrayG, \
   5770     char: injectCharSmallArrayG, \
   5771     const char*: injectSSmallArrayG, \
   5772     smallDictt*: injectDictSmallArrayG, \
   5773     smallArrayt*: injectArraySmallArrayG, \
   5774     char **: injectArraycSmallArrayG, \
   5775     const char **: injectCArraycSmallArrayG, \
   5776     smallBoolt*: injectSmallBoolSmallArrayG, \
   5777     smallBytest*: injectSmallBytesSmallArrayG, \
   5778     smallDoublet*: injectSmallDoubleSmallArrayG, \
   5779     smallIntt*: injectSmallIntSmallArrayG, \
   5780     smallJsont*: injectSmallJsonSmallArrayG, \
   5781     smallStringt*: injectSmallStringSmallArrayG, \
   5782     smallContainert*: injectSmallContainerSmallArrayG, \
   5783     undefinedt*: injectUndefinedSmallArrayG, \
   5784     default: injectVoidSmallArrayG), \
   5785   smallJsont*: _Generic((value), \
   5786     baset*: injectSmallJsonG, \
   5787     bool: injectBoolSmallJsonG, \
   5788     double: injectDoubleSmallJsonG, \
   5789     int64_t: injectIntSmallJsonG, \
   5790     int32_t: injectIntSmallJsonG, \
   5791     uint32_t: injectIntSmallJsonG, \
   5792     uint64_t: injectIntSmallJsonG, \
   5793     char*: injectSSmallJsonG, \
   5794     char: injectCharSmallJsonG, \
   5795     const char*: injectSSmallJsonG, \
   5796     smallDictt*: injectDictSmallJsonG, \
   5797     smallArrayt*: injectArraySmallJsonG, \
   5798     char **: injectArraycSmallJsonG, \
   5799     const char **: injectCArraycSmallJsonG, \
   5800     smallBoolt*: injectSmallBoolSmallJsonG, \
   5801     smallBytest*: injectSmallBytesSmallJsonG, \
   5802     smallDoublet*: injectSmallDoubleSmallJsonG, \
   5803     smallIntt*: injectSmallIntSmallJsonG, \
   5804     smallJsont*: injectSmallJsonSmallJsonG, \
   5805     smallStringt*: injectSmallStringSmallJsonG, \
   5806     smallContainert*: injectSmallContainerSmallJsonG, \
   5807     undefinedt*: injectUndefinedSmallJsonG, \
   5808     default: injectVoidSmallJsonG), \
   5809   smallStringt *: injectSmallStringG\
   5810   )(self, index, value)
   5811 
   5812 #define injectNFreeG(self, index, value) _Generic((self), \
   5813   char *: injectS, \
   5814   const char *: injectS, \
   5815   char **: iInjectS, \
   5816   char ***: iListInjectS, \
   5817   smallArrayt*: _Generic((value), \
   5818     baset*: injectNFreeSmallArrayG, \
   5819     bool: injectBoolSmallArrayG, \
   5820     double: injectDoubleSmallArrayG, \
   5821     int64_t: injectIntSmallArrayG, \
   5822     int32_t: injectIntSmallArrayG, \
   5823     uint32_t: injectIntSmallArrayG, \
   5824     uint64_t: injectIntSmallArrayG, \
   5825     char*: injectNFreeSSmallArrayG, \
   5826     char: injectCharSmallArrayG, \
   5827     smallDictt*: injectNFreeDictSmallArrayG, \
   5828     smallArrayt*: injectNFreeArraySmallArrayG, \
   5829     char **: injectNFreeArraycSmallArrayG, \
   5830     smallBoolt*: injectNFreeSmallBoolSmallArrayG, \
   5831     smallBytest*: injectNFreeSmallBytesSmallArrayG, \
   5832     smallDoublet*: injectNFreeSmallDoubleSmallArrayG, \
   5833     smallIntt*: injectNFreeSmallIntSmallArrayG, \
   5834     smallJsont*: injectNFreeSmallJsonSmallArrayG, \
   5835     smallStringt*: injectNFreeSmallStringSmallArrayG, \
   5836     smallContainert*: injectNFreeSmallContainerSmallArrayG, \
   5837     undefinedt*: injectNFreeUndefinedSmallArrayG, \
   5838     default: injectVoidSmallArrayG), \
   5839   smallJsont*: _Generic((value), \
   5840     baset*: injectNFreeSmallJsonG, \
   5841     bool: injectBoolSmallJsonG, \
   5842     double: injectDoubleSmallJsonG, \
   5843     int64_t: injectIntSmallJsonG, \
   5844     int32_t: injectIntSmallJsonG, \
   5845     uint32_t: injectIntSmallJsonG, \
   5846     uint64_t: injectIntSmallJsonG, \
   5847     char*: injectNFreeSSmallJsonG, \
   5848     char: injectCharSmallJsonG, \
   5849     smallDictt*: injectNFreeDictSmallJsonG, \
   5850     smallArrayt*: injectNFreeArraySmallJsonG, \
   5851     char **: injectNFreeArraycSmallJsonG, \
   5852     smallBoolt*: injectNFreeSmallBoolSmallJsonG, \
   5853     smallBytest*: injectNFreeSmallBytesSmallJsonG, \
   5854     smallDoublet*: injectNFreeSmallDoubleSmallJsonG, \
   5855     smallIntt*: injectNFreeSmallIntSmallJsonG, \
   5856     smallJsont*: injectNFreeSmallJsonSmallJsonG, \
   5857     smallStringt*: injectNFreeSmallStringSmallJsonG, \
   5858     smallContainert*: injectNFreeSmallContainerSmallJsonG, \
   5859     undefinedt*: injectNFreeUndefinedSmallJsonG, \
   5860     default: injectVoidSmallJsonG), \
   5861   smallStringt *: injectSmallStringG\
   5862   )(self, index, value)
   5863 
   5864 #define findO(self, needle) (self)->f->find(self, needle)
   5865 #define findG(self, needle) _Generic((self), \
   5866   char *: _Generic(needle, \
   5867     char *: findS, \
   5868     const char *: findS, \
   5869     char: findCharS, \
   5870     int: findCharS, \
   5871     default: findS \
   5872     ), \
   5873   const char *: _Generic(needle, \
   5874     char *: findS, \
   5875     const char *: findS, \
   5876     char: findCharS, \
   5877     int: findCharS, \
   5878     default: findS \
   5879     ), \
   5880   char **: listIndexOfS , \
   5881   const char **: listIndexOfCG, \
   5882   smallArrayt *: _Generic(needle, \
   5883     char *: indexOfSSmallArrayG, \
   5884     const char *: indexOfSSmallArrayG, \
   5885     char: indexOfCharSmallArrayG, \
   5886     int: indexOfCharSmallArrayG, \
   5887     smallJsont*: indexOfSmallJsonSmallArrayG, \
   5888     smallStringt*: indexOfSmallStringSmallArrayG, \
   5889     default: indexOfSSmallArrayG), \
   5890   smallJsont *: _Generic(needle, \
   5891     char *: findSmallJsonG, \
   5892     const char *: findSmallJsonG, \
   5893     char: findCharSmallJsonG, \
   5894     int: findCharSmallJsonG, \
   5895     smallJsont *: findJsonSmallJsonG, \
   5896     smallStringt *: findSmallStringSmallJsonG \
   5897     ), \
   5898   smallStringt *: _Generic(needle, \
   5899     char *: findSmallStringG, \
   5900     const char *: findSmallStringG, \
   5901     char: findCharSmallStringG, \
   5902     int: findCharSmallStringG, \
   5903     smallJsont *: findSmallJsonSmallStringG, \
   5904     smallStringt *: findSmallStringSmallStringG \
   5905     ) \
   5906   )(self, needle)
   5907 
   5908 #define hasO(self, key) (self)->f->has(self, key)
   5909 #define hasG(self, needle) _Generic((self), \
   5910   char *: _Generic(needle, \
   5911     char *: hasS, \
   5912     const char *: hasS, \
   5913     char: hasCharS, \
   5914     int: hasCharS, \
   5915     default: hasS \
   5916     ), \
   5917   const char *: _Generic(needle, \
   5918     char *: hasS, \
   5919     const char *: hasS, \
   5920     char: hasCharS, \
   5921     int: hasCharS, \
   5922     default: hasS \
   5923     ), \
   5924   char **: _Generic(needle, \
   5925     char *: listHasS , \
   5926     const char *: listHasS , \
   5927     char: listHasCharS, \
   5928     int: listHasCharS, \
   5929     default: listHasS \
   5930     ), \
   5931   const char **: _Generic(needle, \
   5932     char *: listHasCG , \
   5933     const char *: listHasCG , \
   5934     char: listHasCharCG, \
   5935     int: listHasCharCG, \
   5936     default: listHasCG \
   5937     ), \
   5938   smallArrayt*: _Generic((needle), \
   5939     baset*: hasSmallArrayG, \
   5940     bool: hasBoolSmallArrayG, \
   5941     double: hasDoubleSmallArrayG, \
   5942     int64_t: hasIntSmallArrayG, \
   5943     int32_t: hasIntSmallArrayG, \
   5944     uint32_t: hasIntSmallArrayG, \
   5945     uint64_t: hasIntSmallArrayG, \
   5946     char*: hasSSmallArrayG, \
   5947     char: hasCharSmallArrayG, \
   5948     const char*: hasSSmallArrayG, \
   5949     smallDictt*: hasDictSmallArrayG, \
   5950     smallArrayt*: hasArraySmallArrayG, \
   5951     char **: hasArraycSmallArrayG, \
   5952     const char **: hasCArraycSmallArrayG, \
   5953     smallBoolt*: hasSmallBoolSmallArrayG, \
   5954     smallBytest*: hasSmallBytesSmallArrayG, \
   5955     smallDoublet*: hasSmallDoubleSmallArrayG, \
   5956     smallIntt*: hasSmallIntSmallArrayG, \
   5957     smallJsont*: hasSmallJsonSmallArrayG, \
   5958     smallStringt*: hasSmallStringSmallArrayG, \
   5959     smallContainert*: hasSmallContainerSmallArrayG, \
   5960     undefinedt*: hasUndefinedSmallArrayG, \
   5961     default: hasUndefinedSmallArrayG), \
   5962   smallJsont*: _Generic((needle), \
   5963     baset*: hasSmallJsonG, \
   5964     bool: hasBoolSmallJsonG, \
   5965     double: hasDoubleSmallJsonG, \
   5966     int64_t: hasIntSmallJsonG, \
   5967     int32_t: hasIntSmallJsonG, \
   5968     uint32_t: hasIntSmallJsonG, \
   5969     uint64_t: hasIntSmallJsonG, \
   5970     char*: hasSSmallJsonG, \
   5971     char: hasCharSmallJsonG, \
   5972     const char*: hasSSmallJsonG, \
   5973     smallDictt*: hasDictSmallJsonG, \
   5974     smallArrayt*: hasArraySmallJsonG, \
   5975     char **: hasArraycSmallJsonG, \
   5976     const char **: hasCArraycSmallJsonG, \
   5977     smallBoolt*: hasSmallBoolSmallJsonG, \
   5978     smallBytest*: hasSmallBytesSmallJsonG, \
   5979     smallDoublet*: hasSmallDoubleSmallJsonG, \
   5980     smallIntt*: hasSmallIntSmallJsonG, \
   5981     smallJsont*: hasSmallJsonSmallJsonG, \
   5982     smallStringt*: hasSmallStringSmallJsonG, \
   5983     smallContainert*: hasSmallContainerSmallJsonG, \
   5984     undefinedt*: hasUndefinedSmallJsonG, \
   5985     default: hasUndefinedSmallJsonG), \
   5986   smallDictt *: _Generic(needle, \
   5987     char *: hasSmallDictG, \
   5988     const char *: hasSmallDictG, \
   5989     char: hasKCharSmallDictG, \
   5990     int: hasKCharSmallDictG, \
   5991     default: hasSmallDictG \
   5992     ), \
   5993   smallStringt *: _Generic(needle, \
   5994     char *: hasSmallStringG, \
   5995     const char *: hasSmallStringG, \
   5996     char: hasCharSmallStringG, \
   5997     int: hasCharSmallStringG, \
   5998     smallJsont *: hasSmallJsonSmallStringG, \
   5999     smallStringt *: hasSmallStringSmallStringG, \
   6000     default: hasSmallStringG \
   6001     ) \
   6002   )(self, needle)
   6003 
   6004 #define indexOfO(self, key) (self)->f->indexOf(self, key)
   6005 #define indexOfG(self, needle) _Generic((self), \
   6006   char *: _Generic(needle, \
   6007     char *: indexOfS, \
   6008     const char *: indexOfS, \
   6009     char: indexOfCharS, \
   6010     int: indexOfCharS, \
   6011     default: indexOfS \
   6012     ), \
   6013   const char *: _Generic(needle, \
   6014     char *: indexOfS, \
   6015     const char *: indexOfS, \
   6016     char: indexOfCharS, \
   6017     int: indexOfCharS, \
   6018     default: indexOfS \
   6019     ), \
   6020   char **: _Generic(needle, \
   6021     char *: listIndexOfS , \
   6022     const char *: listIndexOfS , \
   6023     char: listIndexOfCharS , \
   6024     int: listIndexOfCharS , \
   6025     default: listIndexOfS \
   6026     ), \
   6027   const char **: _Generic(needle, \
   6028     char *: listIndexOfCG , \
   6029     const char *: listIndexOfCG , \
   6030     char: listIndexOfCharCG , \
   6031     int: listIndexOfCharCG , \
   6032     default: listIndexOfCG \
   6033     ), \
   6034   smallArrayt*: _Generic((needle), \
   6035     baset*: indexOfSmallArrayG, \
   6036     bool: indexOfBoolSmallArrayG, \
   6037     double: indexOfDoubleSmallArrayG, \
   6038     int64_t: indexOfIntSmallArrayG, \
   6039     int32_t: indexOfIntSmallArrayG, \
   6040     uint32_t: indexOfIntSmallArrayG, \
   6041     uint64_t: indexOfIntSmallArrayG, \
   6042     char*: indexOfSSmallArrayG, \
   6043     char: indexOfCharSmallArrayG, \
   6044     const char*: indexOfSSmallArrayG, \
   6045     smallDictt*: indexOfDictSmallArrayG, \
   6046     smallArrayt*: indexOfArraySmallArrayG, \
   6047     char **: indexOfArraycSmallArrayG, \
   6048     const char **: indexOfCArraycSmallArrayG, \
   6049     smallBoolt*: indexOfSmallBoolSmallArrayG, \
   6050     smallBytest*: indexOfSmallBytesSmallArrayG, \
   6051     smallDoublet*: indexOfSmallDoubleSmallArrayG, \
   6052     smallIntt*: indexOfSmallIntSmallArrayG, \
   6053     smallJsont*: indexOfSmallJsonSmallArrayG, \
   6054     smallStringt*: indexOfSmallStringSmallArrayG, \
   6055     smallContainert*: indexOfSmallContainerSmallArrayG, \
   6056     undefinedt*: indexOfUndefinedSmallArrayG, \
   6057     default: indexOfUndefinedSmallArrayG \
   6058   ), \
   6059   smallJsont*: _Generic((needle), \
   6060     baset*: indexOfSmallJsonG, \
   6061     bool: indexOfBoolSmallJsonG, \
   6062     double: indexOfDoubleSmallJsonG, \
   6063     int64_t: indexOfIntSmallJsonG, \
   6064     int32_t: indexOfIntSmallJsonG, \
   6065     uint32_t: indexOfIntSmallJsonG, \
   6066     uint64_t: indexOfIntSmallJsonG, \
   6067     char*: indexOfSSmallJsonG, \
   6068     char: indexOfCharSmallJsonG, \
   6069     const char*: indexOfSSmallJsonG, \
   6070     smallDictt*: indexOfDictSmallJsonG, \
   6071     smallArrayt*: indexOfArraySmallJsonG, \
   6072     char **: indexOfArraycSmallJsonG, \
   6073     const char **: indexOfCArraycSmallJsonG, \
   6074     smallBoolt*: indexOfSmallBoolSmallJsonG, \
   6075     smallBytest*: indexOfSmallBytesSmallJsonG, \
   6076     smallDoublet*: indexOfSmallDoubleSmallJsonG, \
   6077     smallIntt*: indexOfSmallIntSmallJsonG, \
   6078     smallJsont*: indexOfSmallJsonSmallJsonG, \
   6079     smallStringt*: indexOfSmallStringSmallJsonG, \
   6080     smallContainert*: indexOfSmallContainerSmallJsonG, \
   6081     undefinedt*: indexOfUndefinedSmallJsonG, \
   6082     default: indexOfUndefinedSmallJsonG \
   6083   ), \
   6084   smallDictt*: _Generic((needle), \
   6085     baset*: keyBySmallDictG, \
   6086     bool: keyByBoolSmallDictG, \
   6087     double: keyByDoubleSmallDictG, \
   6088     int64_t: keyByIntSmallDictG, \
   6089     int32_t: keyByIntSmallDictG, \
   6090     uint32_t: keyByIntSmallDictG, \
   6091     uint64_t: keyByIntSmallDictG, \
   6092     char*: keyBySSmallDictG, \
   6093     char: keyByCharSmallDictG, \
   6094     const char*: keyBySSmallDictG, \
   6095     smallDictt*: keyByDictSmallDictG, \
   6096     smallArrayt*: keyByArraySmallDictG, \
   6097     char **: keyByArraycSmallDictG, \
   6098     const char **: keyByCArraycSmallDictG, \
   6099     smallBoolt*: keyBySmallBoolSmallDictG, \
   6100     smallBytest*: keyBySmallBytesSmallDictG, \
   6101     smallDoublet*: keyBySmallDoubleSmallDictG, \
   6102     smallIntt*: keyBySmallIntSmallDictG, \
   6103     smallJsont*: keyBySmallJsonSmallDictG, \
   6104     smallStringt*: keyBySmallStringSmallDictG, \
   6105     smallContainert*: keyBySmallContainerSmallDictG, \
   6106     undefinedt*: keyByUndefinedSmallDictG, \
   6107     default: keyByUndefinedSmallDictG \
   6108   ), \
   6109   smallStringt *: _Generic(needle, \
   6110     char *: indexOfSmallStringG, \
   6111     const char *: indexOfSmallStringG, \
   6112     char: indexOfCharSmallStringG, \
   6113     int: indexOfCharSmallStringG, \
   6114     smallJsont *: indexOfSmallJsonSmallStringG, \
   6115     smallStringt *: indexOfSmallStringSmallStringG, \
   6116     default: indexOfSmallStringG \
   6117     ) \
   6118   )(self, needle)
   6119 
   6120 #define keyByO(self, value) (self)->f->keyBy(self, value)
   6121 #define keyByG(self, needle) _Generic((self), \
   6122   char *: _Generic(needle, \
   6123     char *: indexOfS, \
   6124     const char *: indexOfS, \
   6125     char: indexOfCharS, \
   6126     int: indexOfCharS, \
   6127     default: indexOfS \
   6128     ), \
   6129   const char *: _Generic(needle, \
   6130     char *: indexOfS, \
   6131     const char *: indexOfS, \
   6132     char: indexOfCharS, \
   6133     int: indexOfCharS, \
   6134     default: indexOfS \
   6135     ), \
   6136   char **: _Generic(needle, \
   6137     char *: listIndexOfS , \
   6138     const char *: listIndexOfS , \
   6139     char: listIndexOfCharS , \
   6140     int: listIndexOfCharS , \
   6141     default: listIndexOfS \
   6142     ), \
   6143   const char **: _Generic(needle, \
   6144     char *: listIndexOfCG , \
   6145     const char *: listIndexOfCG , \
   6146     char: listIndexOfCharCG , \
   6147     int: listIndexOfCharCG , \
   6148     default: listIndexOfCG \
   6149     ), \
   6150   smallArrayt*: _Generic((needle), \
   6151     baset*: indexOfSmallArrayG, \
   6152     bool: indexOfBoolSmallArrayG, \
   6153     double: indexOfDoubleSmallArrayG, \
   6154     int64_t: indexOfIntSmallArrayG, \
   6155     int32_t: indexOfIntSmallArrayG, \
   6156     uint32_t: indexOfIntSmallArrayG, \
   6157     uint64_t: indexOfIntSmallArrayG, \
   6158     char*: indexOfSSmallArrayG, \
   6159     char: indexOfCharSmallArrayG, \
   6160     const char*: indexOfSSmallArrayG, \
   6161     smallDictt*: indexOfDictSmallArrayG, \
   6162     smallArrayt*: indexOfArraySmallArrayG, \
   6163     char **: indexOfArraycSmallArrayG, \
   6164     const char **: indexOfCArraycSmallArrayG, \
   6165     smallBoolt*: indexOfSmallBoolSmallArrayG, \
   6166     smallBytest*: indexOfSmallBytesSmallArrayG, \
   6167     smallDoublet*: indexOfSmallDoubleSmallArrayG, \
   6168     smallIntt*: indexOfSmallIntSmallArrayG, \
   6169     smallJsont*: indexOfSmallJsonSmallArrayG, \
   6170     smallStringt*: indexOfSmallStringSmallArrayG, \
   6171     smallContainert*: indexOfSmallContainerSmallArrayG, \
   6172     undefinedt*: indexOfUndefinedSmallArrayG, \
   6173     default: indexOfUndefinedSmallArrayG \
   6174   ), \
   6175   smallDictt*: _Generic((needle), \
   6176     baset*: keyBySmallDictG, \
   6177     bool: keyByBoolSmallDictG, \
   6178     double: keyByDoubleSmallDictG, \
   6179     int64_t: keyByIntSmallDictG, \
   6180     int32_t: keyByIntSmallDictG, \
   6181     uint32_t: keyByIntSmallDictG, \
   6182     uint64_t: keyByIntSmallDictG, \
   6183     char*: keyBySSmallDictG, \
   6184     char: keyByCharSmallDictG, \
   6185     const char*: keyBySSmallDictG, \
   6186     smallDictt*: keyByDictSmallDictG, \
   6187     smallArrayt*: keyByArraySmallDictG, \
   6188     char **: keyByArraycSmallDictG, \
   6189     const char **: keyByCArraycSmallDictG, \
   6190     smallBoolt*: keyBySmallBoolSmallDictG, \
   6191     smallBytest*: keyBySmallBytesSmallDictG, \
   6192     smallDoublet*: keyBySmallDoubleSmallDictG, \
   6193     smallIntt*: keyBySmallIntSmallDictG, \
   6194     smallJsont*: keyBySmallJsonSmallDictG, \
   6195     smallStringt*: keyBySmallStringSmallDictG, \
   6196     smallContainert*: keyBySmallContainerSmallDictG, \
   6197     undefinedt*: keyByUndefinedSmallDictG, \
   6198     default: keyByUndefinedSmallDictG \
   6199   ), \
   6200   smallJsont*: _Generic((needle), \
   6201     baset*: keyBySmallJsonG, \
   6202     bool: keyByBoolSmallJsonG, \
   6203     double: keyByDoubleSmallJsonG, \
   6204     int64_t: keyByIntSmallJsonG, \
   6205     int32_t: keyByIntSmallJsonG, \
   6206     uint32_t: keyByIntSmallJsonG, \
   6207     uint64_t: keyByIntSmallJsonG, \
   6208     char*: keyBySSmallJsonG, \
   6209     char: keyByCharSmallJsonG, \
   6210     const char*: keyBySSmallJsonG, \
   6211     smallDictt*: keyByDictSmallJsonG, \
   6212     smallArrayt*: keyByArraySmallJsonG, \
   6213     char **: keyByArraycSmallJsonG, \
   6214     const char **: keyByCArraycSmallJsonG, \
   6215     smallBoolt*: keyBySmallBoolSmallJsonG, \
   6216     smallBytest*: keyBySmallBytesSmallJsonG, \
   6217     smallDoublet*: keyBySmallDoubleSmallJsonG, \
   6218     smallIntt*: keyBySmallIntSmallJsonG, \
   6219     smallJsont*: keyBySmallJsonSmallJsonG, \
   6220     smallStringt*: keyBySmallStringSmallJsonG, \
   6221     smallContainert*: keyBySmallContainerSmallJsonG, \
   6222     undefinedt*: keyByUndefinedSmallJsonG, \
   6223     default: keyByUndefinedSmallJsonG \
   6224   ), \
   6225   smallStringt *: _Generic(needle, \
   6226     char *: indexOfSmallStringG, \
   6227     const char *: indexOfSmallStringG, \
   6228     char: indexOfCharSmallStringG, \
   6229     int: indexOfCharSmallStringG, \
   6230     smallJsont *: indexOfSmallJsonSmallStringG, \
   6231     smallStringt *: indexOfSmallStringSmallStringG, \
   6232     default: indexOfSmallStringG \
   6233     ) \
   6234   )(self, needle)
   6235 
   6236 #define icFindO(self, needle) (self)->f->icFind(self, needle)
   6237 #define icFindG(self, needle) _Generic((self), \
   6238   char *: _Generic(needle, \
   6239     char *: icFindS, \
   6240     const char *: icFindS, \
   6241     char: icFindCharS, \
   6242     int: icFindCharS, \
   6243     default: icFindS \
   6244     ), \
   6245   const char *: _Generic(needle, \
   6246     char *: icFindS, \
   6247     const char *: icFindS, \
   6248     char: icFindCharS, \
   6249     int: icFindCharS, \
   6250     default: icFindS \
   6251     ), \
   6252   char **: icListIndexOfS, \
   6253   const char **: icListIndexOfCG, \
   6254   smallArrayt *: _Generic(needle, \
   6255     char *: icIndexOfSSmallArrayG, \
   6256     const char *: icIndexOfSSmallArrayG, \
   6257     char: icIndexOfCharSmallArrayG, \
   6258     int: icIndexOfCharSmallArrayG, \
   6259     smallJsont*: icIndexOfSmallJsonSmallArrayG, \
   6260     smallStringt*: icIndexOfSmallStringSmallArrayG \
   6261     ), \
   6262   smallJsont *: _Generic(needle, \
   6263     char *: icFindSmallJsonG, \
   6264     const char *: icFindSmallJsonG, \
   6265     char: icFindCharSmallJsonG, \
   6266     int: icFindCharSmallJsonG, \
   6267     smallJsont *: icFindJsonSmallJsonG, \
   6268     smallStringt *: icFindSmallStringSmallJsonG \
   6269     ), \
   6270   smallStringt *: _Generic(needle, \
   6271     char *: icFindSmallStringG, \
   6272     const char *: icFindSmallStringG, \
   6273     char: icFindCharSmallStringG, \
   6274     int: icFindCharSmallStringG, \
   6275     smallJsont *: icFindSmallJsonSmallStringG, \
   6276     smallStringt *: icFindSmallStringSmallStringG \
   6277     ) \
   6278   )(self, needle)
   6279 
   6280 #define icHasO(self, key) (self)->f->icHas(self, key)
   6281 #define icHasG(self, needle) _Generic((self), \
   6282   char *: _Generic(needle, \
   6283     char *: icHasS, \
   6284     const char *: icHasS, \
   6285     char: icHasCharS, \
   6286     int: icHasCharS, \
   6287     default: icHasS \
   6288     ), \
   6289   const char *: _Generic(needle, \
   6290     char *: icHasS, \
   6291     const char *: icHasS, \
   6292     char: icHasCharS, \
   6293     int: icHasCharS, \
   6294     default: icHasS \
   6295     ), \
   6296   char **: _Generic(needle, \
   6297     char *: icListHasS , \
   6298     const char *: icListHasS , \
   6299     char: icListHasCharS, \
   6300     int: icListHasCharS, \
   6301     default: icListHasS \
   6302     ), \
   6303   const char **: _Generic(needle, \
   6304     char *: icListHasCG , \
   6305     const char *: icListHasCG , \
   6306     char: icListHasCharCG, \
   6307     int: icListHasCharCG, \
   6308     default: icListHasCG \
   6309     ), \
   6310   smallArrayt*: _Generic((needle), \
   6311     baset*: icHasSmallArrayG, \
   6312     bool: hasBoolSmallArrayG, \
   6313     double: hasDoubleSmallArrayG, \
   6314     int64_t: hasIntSmallArrayG, \
   6315     int32_t: hasIntSmallArrayG, \
   6316     uint32_t: hasIntSmallArrayG, \
   6317     uint64_t: hasIntSmallArrayG, \
   6318     char*: icHasSSmallArrayG, \
   6319     char: icHasCharSmallArrayG, \
   6320     const char*: icHasSSmallArrayG, \
   6321     smallDictt*: icHasDictSmallArrayG, \
   6322     smallArrayt*: icHasArraySmallArrayG, \
   6323     char **: icHasArraycSmallArrayG, \
   6324     const char **: icHasCArraycSmallArrayG, \
   6325     smallBoolt*: hasSmallBoolSmallArrayG, \
   6326     smallBytest*: hasSmallBytesSmallArrayG, \
   6327     smallDoublet*: hasSmallDoubleSmallArrayG, \
   6328     smallIntt*: hasSmallIntSmallArrayG, \
   6329     smallJsont*: icHasSmallJsonSmallArrayG, \
   6330     smallStringt*: icHasSmallStringSmallArrayG, \
   6331     smallContainert*: hasSmallContainerSmallArrayG, \
   6332     undefinedt*: hasUndefinedSmallArrayG, \
   6333     default: hasUndefinedSmallArrayG), \
   6334   smallJsont*: _Generic((needle), \
   6335     baset*: icHasSmallJsonG, \
   6336     bool: hasBoolSmallJsonG, \
   6337     double: hasDoubleSmallJsonG, \
   6338     int64_t: hasIntSmallJsonG, \
   6339     int32_t: hasIntSmallJsonG, \
   6340     uint32_t: hasIntSmallJsonG, \
   6341     uint64_t: hasIntSmallJsonG, \
   6342     char*: icHasSSmallJsonG, \
   6343     char: icHasCharSmallJsonG, \
   6344     const char*: icHasSSmallJsonG, \
   6345     smallDictt*: icHasDictSmallJsonG, \
   6346     smallArrayt*: icHasArraySmallJsonG, \
   6347     char **: icHasArraycSmallJsonG, \
   6348     const char **: icHasCArraycSmallJsonG, \
   6349     smallBoolt*: hasSmallBoolSmallJsonG, \
   6350     smallBytest*: hasSmallBytesSmallJsonG, \
   6351     smallDoublet*: hasSmallDoubleSmallJsonG, \
   6352     smallIntt*: hasSmallIntSmallJsonG, \
   6353     smallJsont*: hasSmallJsonSmallJsonG, \
   6354     smallStringt*: icHasSmallStringSmallJsonG, \
   6355     smallContainert*: hasSmallContainerSmallJsonG, \
   6356     undefinedt*: hasUndefinedSmallJsonG, \
   6357     default: hasUndefinedSmallJsonG), \
   6358   smallDictt *: _Generic(needle, \
   6359     char *: hasSmallDictG, \
   6360     const char *: hasSmallDictG, \
   6361     char: hasKCharSmallDictG, \
   6362     int: hasKCharSmallDictG, \
   6363     default: hasSmallDictG \
   6364     ), \
   6365   smallStringt *: _Generic(needle, \
   6366     char *: icHasSmallStringG, \
   6367     const char *: icHasSmallStringG, \
   6368     char: icHasCharSmallStringG, \
   6369     int: icHasCharSmallStringG, \
   6370     smallJsont *: icHasSmallJsonSmallStringG, \
   6371     smallStringt *: icHasSmallStringSmallStringG, \
   6372     default: icHasSmallStringG \
   6373     ) \
   6374   )(self, needle)
   6375 
   6376 #define icIndexOfO(self, key) (self)->f->icIndexOf(self, key)
   6377 #define icIndexOfG(self, needle) _Generic((self), \
   6378   char *: _Generic(needle, \
   6379     char *: icIndexOfS, \
   6380     const char *: icIndexOfS, \
   6381     char: icIndexOfCharS, \
   6382     int: icIndexOfCharS, \
   6383     default: icIndexOfS \
   6384     ), \
   6385   const char *: _Generic(needle, \
   6386     char *: icIndexOfS, \
   6387     const char *: icIndexOfS, \
   6388     char: icIndexOfCharS, \
   6389     int: icIndexOfCharS, \
   6390     default: icIndexOfS \
   6391     ), \
   6392   char **: _Generic(needle, \
   6393     char *: icListIndexOfS , \
   6394     const char *: icListIndexOfS , \
   6395     char: icListIndexOfCharS , \
   6396     int: icListIndexOfCharS , \
   6397     default: icListIndexOfS \
   6398     ), \
   6399   const char **: _Generic(needle, \
   6400     char *: icListIndexOfCG , \
   6401     const char *: icListIndexOfCG , \
   6402     char: icListIndexOfCharCG , \
   6403     int: icListIndexOfCharCG , \
   6404     default: icListIndexOfCG \
   6405     ), \
   6406   smallArrayt*: _Generic((needle), \
   6407     baset*: icIndexOfSmallArrayG, \
   6408     bool: indexOfBoolSmallArrayG, \
   6409     double: indexOfDoubleSmallArrayG, \
   6410     int64_t: indexOfIntSmallArrayG, \
   6411     int32_t: indexOfIntSmallArrayG, \
   6412     uint32_t: indexOfIntSmallArrayG, \
   6413     uint64_t: indexOfIntSmallArrayG, \
   6414     char*: icIndexOfSSmallArrayG, \
   6415     char: icIndexOfCharSmallArrayG, \
   6416     const char*: icIndexOfSSmallArrayG, \
   6417     smallDictt*: icIndexOfDictSmallArrayG, \
   6418     smallArrayt*: icIndexOfArraySmallArrayG, \
   6419     char **: icIndexOfArraycSmallArrayG, \
   6420     const char **: icIndexOfCArraycSmallArrayG, \
   6421     smallBoolt*: indexOfSmallBoolSmallArrayG, \
   6422     smallBytest*: indexOfSmallBytesSmallArrayG, \
   6423     smallDoublet*: indexOfSmallDoubleSmallArrayG, \
   6424     smallIntt*: indexOfSmallIntSmallArrayG, \
   6425     smallJsont*: icIndexOfSmallJsonSmallArrayG, \
   6426     smallStringt*: icIndexOfSmallStringSmallArrayG, \
   6427     smallContainert*: indexOfSmallContainerSmallArrayG, \
   6428     undefinedt*: indexOfUndefinedSmallArrayG, \
   6429     default: indexOfUndefinedSmallArrayG \
   6430   ), \
   6431   smallJsont*: _Generic((needle), \
   6432     baset*: icIndexOfSmallJsonG, \
   6433     bool: indexOfBoolSmallJsonG, \
   6434     double: indexOfDoubleSmallJsonG, \
   6435     int64_t: indexOfIntSmallJsonG, \
   6436     int32_t: indexOfIntSmallJsonG, \
   6437     uint32_t: indexOfIntSmallJsonG, \
   6438     uint64_t: indexOfIntSmallJsonG, \
   6439     char*: icIndexOfSSmallJsonG, \
   6440     char: icIndexOfCharSmallJsonG, \
   6441     const char*: icIndexOfSSmallJsonG, \
   6442     smallDictt*: icIndexOfDictSmallJsonG, \
   6443     smallArrayt*: icIndexOfArraySmallJsonG, \
   6444     char **: icIndexOfArraycSmallJsonG, \
   6445     const char **: icIndexOfCArraycSmallJsonG, \
   6446     smallBoolt*: indexOfSmallBoolSmallJsonG, \
   6447     smallBytest*: indexOfSmallBytesSmallJsonG, \
   6448     smallDoublet*: indexOfSmallDoubleSmallJsonG, \
   6449     smallIntt*: indexOfSmallIntSmallJsonG, \
   6450     smallJsont*: indexOfSmallJsonSmallJsonG, \
   6451     smallStringt*: icIndexOfSmallStringSmallJsonG, \
   6452     smallContainert*: indexOfSmallContainerSmallJsonG, \
   6453     undefinedt*: indexOfUndefinedSmallJsonG, \
   6454     default: indexOfUndefinedSmallJsonG \
   6455   ), \
   6456   smallDictt*: _Generic((needle), \
   6457     baset*: icKeyBySmallDictG, \
   6458     bool: keyByBoolSmallDictG, \
   6459     double: keyByDoubleSmallDictG, \
   6460     int64_t: keyByIntSmallDictG, \
   6461     int32_t: keyByIntSmallDictG, \
   6462     uint32_t: keyByIntSmallDictG, \
   6463     uint64_t: keyByIntSmallDictG, \
   6464     char*: icKeyBySSmallDictG, \
   6465     char: icKeyByCharSmallDictG, \
   6466     const char*: icKeyBySSmallDictG, \
   6467     smallDictt*: icKeyByDictSmallDictG, \
   6468     smallArrayt*: icKeyByArraySmallDictG, \
   6469     char **: icKeyByArraycSmallDictG, \
   6470     const char **: icKeyByCArraycSmallDictG, \
   6471     smallBoolt*: keyBySmallBoolSmallDictG, \
   6472     smallBytest*: keyBySmallBytesSmallDictG, \
   6473     smallDoublet*: keyBySmallDoubleSmallDictG, \
   6474     smallIntt*: keyBySmallIntSmallDictG, \
   6475     smallJsont*: icKeyBySmallJsonSmallDictG, \
   6476     smallStringt*: icKeyBySmallStringSmallDictG, \
   6477     smallContainert*: keyBySmallContainerSmallDictG, \
   6478     undefinedt*: keyByUndefinedSmallDictG, \
   6479     default: keyByUndefinedSmallDictG \
   6480   ), \
   6481   smallStringt *: _Generic(needle, \
   6482     char *: icIndexOfSmallStringG, \
   6483     const char *: icIndexOfSmallStringG, \
   6484     char: icIndexOfCharSmallStringG, \
   6485     int: icIndexOfCharSmallStringG, \
   6486     smallJsont *: icIndexOfSmallJsonSmallStringG, \
   6487     smallStringt *: icIndexOfSmallStringSmallStringG, \
   6488     default: icIndexOfSmallStringG \
   6489     ) \
   6490   )(self, needle)
   6491 
   6492 #define icKeyByO(self, value) (self)->f->icKeyBy(self, value)
   6493 #define icKeyByG(self, needle) _Generic((self), \
   6494   char *: _Generic(needle, \
   6495     char *: icIndexOfS, \
   6496     const char *: icIndexOfS, \
   6497     char: icIndexOfCharS, \
   6498     int: icIndexOfCharS, \
   6499     default: icIndexOfS \
   6500     ), \
   6501   const char *: _Generic(needle, \
   6502     char *: icIndexOfS, \
   6503     const char *: icIndexOfS, \
   6504     char: icIndexOfCharS, \
   6505     int: icIndexOfCharS, \
   6506     default: icIndexOfS \
   6507     ), \
   6508   char **: _Generic(needle, \
   6509     char *: icListIndexOfS , \
   6510     const char *: icListIndexOfS , \
   6511     char: icListIndexOfCharS , \
   6512     int: icListIndexOfCharS , \
   6513     default: icListIndexOfS \
   6514     ), \
   6515   const char **: _Generic(needle, \
   6516     char *: icListIndexOfCG , \
   6517     const char *: icListIndexOfCG , \
   6518     char: icListIndexOfCharCG , \
   6519     int: icListIndexOfCharCG , \
   6520     default: icListIndexOfCG \
   6521     ), \
   6522   smallArrayt*: _Generic((needle), \
   6523     baset*: icIndexOfSmallArrayG, \
   6524     bool: indexOfBoolSmallArrayG, \
   6525     double: indexOfDoubleSmallArrayG, \
   6526     int64_t: indexOfIntSmallArrayG, \
   6527     int32_t: indexOfIntSmallArrayG, \
   6528     uint32_t: indexOfIntSmallArrayG, \
   6529     uint64_t: indexOfIntSmallArrayG, \
   6530     char*: icIndexOfSSmallArrayG, \
   6531     char: icIndexOfCharSmallArrayG, \
   6532     const char*: icIndexOfSSmallArrayG, \
   6533     smallDictt*: icIndexOfDictSmallArrayG, \
   6534     smallArrayt*: icIndexOfArraySmallArrayG, \
   6535     char **: icIndexOfArraycSmallArrayG, \
   6536     const char **: icIndexOfCArraycSmallArrayG, \
   6537     smallBoolt*: indexOfSmallBoolSmallArrayG, \
   6538     smallBytest*: indexOfSmallBytesSmallArrayG, \
   6539     smallDoublet*: indexOfSmallDoubleSmallArrayG, \
   6540     smallIntt*: indexOfSmallIntSmallArrayG, \
   6541     smallJsont*: icIndexOfSmallJsonSmallArrayG, \
   6542     smallStringt*: icIndexOfSmallStringSmallArrayG, \
   6543     smallContainert*: indexOfSmallContainerSmallArrayG, \
   6544     undefinedt*: indexOfUndefinedSmallArrayG, \
   6545     default: indexOfUndefinedSmallArrayG \
   6546   ), \
   6547   smallDictt*: _Generic((needle), \
   6548     baset*: icKeyBySmallDictG, \
   6549     bool: keyByBoolSmallDictG, \
   6550     double: keyByDoubleSmallDictG, \
   6551     int64_t: keyByIntSmallDictG, \
   6552     int32_t: keyByIntSmallDictG, \
   6553     uint32_t: keyByIntSmallDictG, \
   6554     uint64_t: keyByIntSmallDictG, \
   6555     char*: icKeyBySSmallDictG, \
   6556     char: icKeyByCharSmallDictG, \
   6557     const char*: icKeyBySSmallDictG, \
   6558     smallDictt*: icKeyByDictSmallDictG, \
   6559     smallArrayt*: icKeyByArraySmallDictG, \
   6560     char **: icKeyByArraycSmallDictG, \
   6561     const char **: icKeyByCArraycSmallDictG, \
   6562     smallBoolt*: keyBySmallBoolSmallDictG, \
   6563     smallBytest*: keyBySmallBytesSmallDictG, \
   6564     smallDoublet*: keyBySmallDoubleSmallDictG, \
   6565     smallIntt*: keyBySmallIntSmallDictG, \
   6566     smallJsont*: icKeyBySmallJsonSmallDictG, \
   6567     smallStringt*: icKeyBySmallStringSmallDictG, \
   6568     smallContainert*: keyBySmallContainerSmallDictG, \
   6569     undefinedt*: keyByUndefinedSmallDictG, \
   6570     default: keyByUndefinedSmallDictG \
   6571   ), \
   6572   smallJsont*: _Generic((needle), \
   6573     baset*: icKeyBySmallJsonG, \
   6574     bool: keyByBoolSmallJsonG, \
   6575     double: keyByDoubleSmallJsonG, \
   6576     int64_t: keyByIntSmallJsonG, \
   6577     int32_t: keyByIntSmallJsonG, \
   6578     uint32_t: keyByIntSmallJsonG, \
   6579     uint64_t: keyByIntSmallJsonG, \
   6580     char*: icKeyBySSmallJsonG, \
   6581     char: icKeyByCharSmallJsonG, \
   6582     const char*: icKeyBySSmallJsonG, \
   6583     smallDictt*: icKeyByDictSmallJsonG, \
   6584     smallArrayt*: icKeyByArraySmallJsonG, \
   6585     char **: icKeyByArraycSmallJsonG, \
   6586     const char **: icKeyByCArraycSmallJsonG, \
   6587     smallBoolt*: keyBySmallBoolSmallJsonG, \
   6588     smallBytest*: keyBySmallBytesSmallJsonG, \
   6589     smallDoublet*: keyBySmallDoubleSmallJsonG, \
   6590     smallIntt*: keyBySmallIntSmallJsonG, \
   6591     smallJsont*: keyBySmallJsonSmallJsonG, \
   6592     smallStringt*: icKeyBySmallStringSmallJsonG, \
   6593     smallContainert*: keyBySmallContainerSmallJsonG, \
   6594     undefinedt*: keyByUndefinedSmallJsonG, \
   6595     default: keyByUndefinedSmallJsonG \
   6596   ), \
   6597   smallStringt *: _Generic(needle, \
   6598     char *: icIndexOfSmallStringG, \
   6599     const char *: icIndexOfSmallStringG, \
   6600     char: icIndexOfCharSmallStringG, \
   6601     int: icIndexOfCharSmallStringG, \
   6602     smallJsont *: icIndexOfSmallJsonSmallStringG, \
   6603     smallStringt *: icIndexOfSmallStringSmallStringG, \
   6604     default: icIndexOfSmallStringG \
   6605     ) \
   6606   )(self, needle)
   6607 
   6608 #define emptyO(self) (self)->f->empty(self)
   6609 #define emptyG(self) _Generic((self), \
   6610   char **: iEmptySF, \
   6611   char ***: iListEmptySF, \
   6612   smallArrayt *: emptySmallArrayG, \
   6613   smallDictt *: emptySmallDictG, \
   6614   smallJsont *: emptySmallJsonG, \
   6615   smallStringt *: emptySmallStringG \
   6616   )(self)
   6617 
   6618 #define isEmptyO(self) (self)->f->isEmpty(self)
   6619 #define isEmptyG(self) _Generic((self), \
   6620   char *: isEmptyS, \
   6621   const char *: isEmptyS, \
   6622   char **: listIsEmptyS, \
   6623   smallArrayt *: isEmptySmallArrayG, \
   6624   smallBytest *: isEmptySmallBytesG, \
   6625   smallDictt *: isEmptySmallDictG, \
   6626   smallJsont *: isEmptySmallJsonG, \
   6627   smallStringt *: isEmptySmallStringG \
   6628   )(self)
   6629 
   6630 #define isBlankO(self) (self)->f->isBlank(self)
   6631 #define isBlankG(self) _Generic((self), \
   6632   char *: isBlankS, \
   6633   const char *: isBlankS, \
   6634   char **: listIsBlankS, \
   6635   smallArrayt *: isBlankSmallArrayG, \
   6636   smallDictt *: isEmptySmallDictG, \
   6637   smallJsont *: isBlankSmallJsonG, \
   6638   smallStringt *: isBlankSmallStringG \
   6639   )(self)
   6640 
   6641 #define fromArrayO(self, array, size) (self)->f->fromArray(self, array, size)
   6642 #define fromArrayG(self, array, size) _Generic((self), \
   6643   char **: _Generic(array, \
   6644     char **: listFromArrayG, \
   6645     const char **: listFromCArrayG \
   6646     ), \
   6647   smallArrayt *:  _Generic(array, \
   6648     char **: fromArraySmallArrayG, \
   6649     const char **: fromCArraySmallArrayG), \
   6650   smallJsont *:  _Generic(array, \
   6651     char **: fromArraySmallJsonG, \
   6652     const char **: fromCArraySmallJsonG) \
   6653   )(self, array, size)
   6654 
   6655 #define splitO(self, delim) (self)->f->split(self, delim)
   6656 #define splitG(self, delim) _Generic((self), \
   6657   char *: _Generic(delim, \
   6658     char *: split, \
   6659     const char *: split, \
   6660     char: splitChar, \
   6661     int: splitChar, \
   6662     default: split \
   6663     ), \
   6664   const char *: _Generic(delim, \
   6665     char *: split, \
   6666     const char *: split, \
   6667     char: splitChar, \
   6668     int: splitChar, \
   6669     default: split \
   6670     ), \
   6671   smallJsont *: _Generic(delim, \
   6672     char *: splitSmallJsonG, \
   6673     const char *: splitSmallJsonG, \
   6674     char: splitCharSmallJsonG, \
   6675     int: splitCharSmallJsonG, \
   6676     smallJsont *: splitSmallJsonSmallJsonG, \
   6677     smallStringt *: splitSmallStringSmallJsonG, \
   6678     default: splitSmallJsonG \
   6679     ), \
   6680   smallStringt *: _Generic(delim, \
   6681     char *: splitSmallStringG, \
   6682     const char *: splitSmallStringG, \
   6683     char: splitCharSmallStringG, \
   6684     int: splitCharSmallStringG, \
   6685     smallJsont *: splitSmallJsonSmallStringG, \
   6686     smallStringt *: splitSmallStringSmallStringG, \
   6687     default: splitSmallStringG \
   6688     ), \
   6689   btt: _Generic(delim, \
   6690     char*: splitCharB, \
   6691     const char*: splitCharB, \
   6692     btt: splitB, \
   6693     const btt: splitB, \
   6694     btt*: splitDPB, \
   6695     const btt*: splitDPB, \
   6696     default: splitB), \
   6697   const btt: _Generic(delim, \
   6698     char*: splitCharB, \
   6699     const char*: splitCharB, \
   6700     btt: splitB, \
   6701     const btt: splitB, \
   6702     btt*: splitDPB, \
   6703     const btt*: splitDPB, \
   6704     default: splitB), \
   6705   btt*: _Generic(delim, \
   6706     char*: splitPCharB, \
   6707     const char*: splitPCharB, \
   6708     btt: splitPB, \
   6709     const btt: splitPB, \
   6710     btt*: splitPDPB, \
   6711     const btt*: splitPDPB, \
   6712     default: splitPB),\
   6713   const btt*: _Generic(delim, \
   6714     char*: splitPCharB, \
   6715     const char*: splitPCharB, \
   6716     btt: splitPB, \
   6717     const btt: splitPB, \
   6718     btt*: splitPDPB, \
   6719     const btt*: splitPDPB, \
   6720     default: splitPB)\
   6721   )(self, delim)
   6722 
   6723 //TODO create splitS generic
   6724 
   6725 #define icSplitO(self, delim) (self)->f->icSplit(self, delim)
   6726 #define icSplitG(self, delim) _Generic((self), \
   6727   char *: _Generic(delim, \
   6728     char *: icSplit, \
   6729     const char *: icSplit, \
   6730     char: icSplitChar, \
   6731     int: icSplitChar, \
   6732     default: icSplit \
   6733     ), \
   6734   const char *: _Generic(delim, \
   6735     char *: icSplit, \
   6736     const char *: icSplit, \
   6737     char: icSplitChar, \
   6738     int: icSplitChar, \
   6739     default: icSplit \
   6740     ), \
   6741   smallJsont *: _Generic(delim, \
   6742     char *: icSplitSmallJsonG, \
   6743     const char *: icSplitSmallJsonG, \
   6744     char: icSplitCharSmallJsonG, \
   6745     int: icSplitCharSmallJsonG, \
   6746     smallJsont *: icSplitSmallJsonSmallJsonG, \
   6747     smallStringt *: icSplitSmallStringSmallJsonG \
   6748     ), \
   6749   smallStringt *: _Generic(delim, \
   6750     char *: icSplitSmallStringG, \
   6751     const char *: icSplitSmallStringG, \
   6752     char: icSplitCharSmallStringG, \
   6753     int: icSplitCharSmallStringG, \
   6754     smallJsont *: icSplitSmallJsonSmallStringG, \
   6755     smallStringt *: icSplitSmallStringSmallStringG \
   6756     ) \
   6757   )(self, delim)
   6758 
   6759 #define joinO(self, delim) (self)->f->join(self, delim)
   6760 #define joinG(self, delim) _Generic((self), \
   6761   char **: _Generic(delim, \
   6762     char *: join, \
   6763     const char *: join, \
   6764     char: joinChar, \
   6765     int: joinChar, \
   6766     default: join \
   6767     ), \
   6768   const char **: _Generic(delim, \
   6769     char *: joinCG, \
   6770     const char *: joinCG, \
   6771     char: joinCharCG, \
   6772     int: joinCharCG, \
   6773     default: joinCG \
   6774     ), \
   6775   smallArrayt *: _Generic(delim, \
   6776     char *: joinSmallArrayG, \
   6777     const char*: joinSmallArrayG, \
   6778     char: joinCharSmallArrayG, \
   6779     int: joinCharSmallArrayG, \
   6780     smallJsont *: joinSmallJsonSmallArrayG, \
   6781     smallStringt *: joinSmallStringSmallArrayG \
   6782     ), \
   6783   smallJsont *: _Generic(delim, \
   6784     char *: joinSmallJsonG, \
   6785     const char*: joinSmallJsonG, \
   6786     char: joinCharSmallJsonG, \
   6787     int: joinCharSmallJsonG, \
   6788     smallJsont *: joinSmallJsonSmallJsonG, \
   6789     smallStringt *: joinSmallStringSmallJsonG \
   6790     ) \
   6791   )(self, delim)
   6792 
   6793 #define joinSO(self, delim) (self)->f->join(self, delim)
   6794 #define joinSG(self, delim) _Generic((self), \
   6795   char **: _Generic(delim, \
   6796     char *: join, \
   6797     const char *: join, \
   6798     char: joinChar, \
   6799     int: joinChar, \
   6800     default: join \
   6801     ), \
   6802   const char **: _Generic(delim, \
   6803     char *: joinCG, \
   6804     const char *: joinCG, \
   6805     char: joinCharCG, \
   6806     int: joinCharCG, \
   6807     default: joinCG \
   6808     ), \
   6809   smallArrayt *: _Generic(delim, \
   6810     char *: joinSSmallArrayG, \
   6811     const char*: joinSSmallArrayG, \
   6812     char: joinCharSSmallArrayG, \
   6813     int: joinCharSSmallArrayG, \
   6814     smallJsont *: joinSmallJsonSSmallArrayG, \
   6815     smallStringt *: joinSmallStringSSmallArrayG \
   6816     ), \
   6817   smallJsont *: _Generic(delim, \
   6818     char *: joinSSmallJsonG, \
   6819     const char*: joinSSmallJsonG, \
   6820     char: joinCharSSmallJsonG, \
   6821     int: joinCharSSmallJsonG, \
   6822     smallJsont *: joinSmallJsonSSmallJsonG, \
   6823     smallStringt *: joinSmallStringSSmallJsonG \
   6824     ) \
   6825   )(self, delim)
   6826 
   6827 #define extractO(self, delim1, delim2) (self)->f->extract(self, delim1, delim2)
   6828 #define extractG(self, delim1, delim2) _Generic((self), \
   6829   char *: _Generic(delim1, \
   6830     char *: _Generic(delim2, \
   6831       char *: extractS , \
   6832       const char *: extractS , \
   6833       char: extractSCharS , \
   6834       int: extractSCharS, \
   6835       default: extractS \
   6836       ), \
   6837     const char *: _Generic(delim2, \
   6838       char *: extractS , \
   6839       const char *: extractS , \
   6840       char: extractSCharS , \
   6841       int: extractSCharS, \
   6842       default: extractS \
   6843       ), \
   6844     char: _Generic(delim2, \
   6845       char *: extractCharSS , \
   6846       const char *: extractCharSS , \
   6847       char: extractCharCharS , \
   6848       int: extractCharCharS, \
   6849       default: extractCharSS \
   6850       ), \
   6851     int: _Generic(delim2, \
   6852       char *: extractCharSS , \
   6853       const char *: extractCharSS , \
   6854       char: extractCharCharS , \
   6855       int: extractCharCharS, \
   6856       default: extractCharSS \
   6857       ), \
   6858     default: extractS \
   6859     ), \
   6860   const char *: _Generic(delim1, \
   6861     char *: _Generic(delim2, \
   6862       char *: extractS , \
   6863       const char *: extractS , \
   6864       char: extractSCharS , \
   6865       int: extractSCharS, \
   6866       default: extractS \
   6867       ), \
   6868     const char *: _Generic(delim2, \
   6869       char *: extractS , \
   6870       const char *: extractS , \
   6871       char: extractSCharS , \
   6872       int: extractSCharS, \
   6873       default: extractS \
   6874       ), \
   6875     char: _Generic(delim2, \
   6876       char *: extractCharSS , \
   6877       const char *: extractCharSS , \
   6878       char: extractCharCharS , \
   6879       int: extractCharCharS, \
   6880       default: extractCharSS \
   6881       ), \
   6882     int: _Generic(delim2, \
   6883       char *: extractCharSS , \
   6884       const char *: extractCharSS , \
   6885       char: extractCharCharS , \
   6886       int: extractCharCharS, \
   6887       default: extractCharSS \
   6888       ), \
   6889     default: extractS \
   6890     ), \
   6891   smallJsont *: _Generic(delim1, \
   6892     char *: _Generic(delim2, \
   6893       char *: extractSmallJsonG, \
   6894       const char *: extractSmallJsonG, \
   6895       char: extractSCharSmallJsonG, \
   6896       int: extractSCharSmallJsonG, \
   6897       smallJsont *: extractSSmallJsonSmallJsonG, \
   6898       smallStringt *: extractSSmallStringSmallJsonG \
   6899       ), \
   6900     const char *: _Generic(delim2, \
   6901       char *: extractSmallJsonG, \
   6902       const char *: extractSmallJsonG, \
   6903       char: extractSCharSmallJsonG, \
   6904       int: extractSCharSmallJsonG, \
   6905       smallJsont *: extractSSmallJsonSmallJsonG, \
   6906       smallStringt *: extractSSmallStringSmallJsonG \
   6907       ),\
   6908     char: _Generic(delim2, \
   6909       char *: extractCharSSmallJsonG, \
   6910       const char *: extractCharSSmallJsonG, \
   6911       char: extractCharCharSmallJsonG, \
   6912       int: extractCharCharSmallJsonG, \
   6913       smallJsont *: extractCharSmallJsonSmallJsonG, \
   6914       smallStringt *: extractCharSmallStringSmallJsonG \
   6915       ),\
   6916     int: _Generic(delim2, \
   6917       char *: extractCharSSmallJsonG, \
   6918       const char *: extractCharSSmallJsonG, \
   6919       char: extractCharCharSmallJsonG, \
   6920       int: extractCharCharSmallJsonG, \
   6921       smallJsont *: extractCharSmallJsonSmallJsonG, \
   6922       smallStringt *: extractCharSmallStringSmallJsonG \
   6923       ),\
   6924     smallJsont *: _Generic(delim2, \
   6925       char *: extractSmallJsonSSmallJsonG, \
   6926       const char *: extractSmallJsonSSmallJsonG, \
   6927       char: extractSmallJsonCharSmallJsonG, \
   6928       int: extractSmallJsonCharSmallJsonG, \
   6929       smallJsont *: extractSmallJsonSmallJsonSmallJsonG, \
   6930       smallStringt *: extractSmallJsonSmallStringSmallJsonG \
   6931       ),\
   6932     smallStringt *: _Generic(delim2, \
   6933       char *: extractSmallStringSSmallJsonG, \
   6934       const char *: extractSmallStringSSmallJsonG, \
   6935       char: extractSmallStringCharSmallJsonG, \
   6936       int: extractSmallStringCharSmallJsonG, \
   6937       smallJsont *: extractSmallStringSmallJsonSmallJsonG, \
   6938       smallStringt *: extractSmallStringSmallStringSmallJsonG \
   6939       )\
   6940     ), \
   6941   smallStringt *: _Generic(delim1, \
   6942     char *: _Generic(delim2, \
   6943       char *: extractSmallStringG, \
   6944       const char *: extractSmallStringG, \
   6945       char: extractSCharSmallStringG, \
   6946       int: extractSCharSmallStringG, \
   6947       smallJsont *: extractSSmallJsonSmallStringG, \
   6948       smallStringt *: extractSSmallStringSmallStringG \
   6949       ), \
   6950     const char *: _Generic(delim2, \
   6951       char *: extractSmallStringG, \
   6952       const char *: extractSmallStringG, \
   6953       char: extractSCharSmallStringG, \
   6954       int: extractSCharSmallStringG, \
   6955       smallJsont *: extractSSmallJsonSmallStringG, \
   6956       smallStringt *: extractSSmallStringSmallStringG \
   6957       ),\
   6958     char: _Generic(delim2, \
   6959       char *: extractCharSSmallStringG, \
   6960       const char *: extractCharSSmallStringG, \
   6961       char: extractCharCharSmallStringG, \
   6962       int: extractCharCharSmallStringG, \
   6963       smallJsont *: extractCharSmallJsonSmallStringG, \
   6964       smallStringt *: extractCharSmallStringSmallStringG \
   6965       ),\
   6966     int: _Generic(delim2, \
   6967       char *: extractCharSSmallStringG, \
   6968       const char *: extractCharSSmallStringG, \
   6969       char: extractCharCharSmallStringG, \
   6970       int: extractCharCharSmallStringG, \
   6971       smallJsont *: extractCharSmallJsonSmallStringG, \
   6972       smallStringt *: extractCharSmallStringSmallStringG \
   6973       ),\
   6974     smallJsont *: _Generic(delim2, \
   6975       char *: extractSmallJsonSSmallStringG, \
   6976       const char *: extractSmallJsonSSmallStringG, \
   6977       char: extractSmallJsonCharSmallStringG, \
   6978       int: extractSmallJsonCharSmallStringG, \
   6979       smallJsont *: extractSmallJsonSmallJsonSmallStringG, \
   6980       smallStringt *: extractSmallJsonSmallStringSmallStringG \
   6981       ),\
   6982     smallStringt *: _Generic(delim2, \
   6983       char *: extractSmallStringSSmallStringG, \
   6984       const char *: extractSmallStringSSmallStringG, \
   6985       char: extractSmallStringCharSmallStringG, \
   6986       int: extractSmallStringCharSmallStringG, \
   6987       smallJsont *: extractSmallStringSmallJsonSmallStringG, \
   6988       smallStringt *: extractSmallStringSmallStringSmallStringG \
   6989       )\
   6990     ) \
   6991   )(self, delim1, delim2)
   6992 
   6993 #define icExtractO(self, delim1, delim2) (self)->f->icExtract(self, delim1, delim2)
   6994 #define icExtractG(self, delim1, delim2) _Generic((self), \
   6995   char *: _Generic(delim1, \
   6996     char *: _Generic(delim2, \
   6997       char *: icExtractS , \
   6998       const char *: icExtractS , \
   6999       char: icExtractSCharS , \
   7000       int: icExtractSCharS, \
   7001       default: icExtractS \
   7002       ), \
   7003     const char *: _Generic(delim2, \
   7004       char *: icExtractS , \
   7005       const char *: icExtractS , \
   7006       char: icExtractSCharS , \
   7007       int: icExtractSCharS, \
   7008       default: icExtractS \
   7009       ), \
   7010     char: _Generic(delim2, \
   7011       char *: icExtractCharSS , \
   7012       const char *: icExtractCharSS , \
   7013       char: icExtractCharCharS , \
   7014       int: icExtractCharCharS, \
   7015       default: icExtractCharSS \
   7016       ), \
   7017     int: _Generic(delim2, \
   7018       char *: icExtractCharSS , \
   7019       const char *: icExtractCharSS , \
   7020       char: icExtractCharCharS , \
   7021       int: icExtractCharCharS, \
   7022       default: icExtractCharSS \
   7023       ), \
   7024     default: icExtractS \
   7025     ), \
   7026   const char *: _Generic(delim1, \
   7027     char *: _Generic(delim2, \
   7028       char *: icExtractS , \
   7029       const char *: icExtractS , \
   7030       char: icExtractSCharS , \
   7031       int: icExtractSCharS, \
   7032       default: icExtractS \
   7033       ), \
   7034     const char *: _Generic(delim2, \
   7035       char *: icExtractS , \
   7036       const char *: icExtractS , \
   7037       char: icExtractSCharS , \
   7038       int: icExtractSCharS, \
   7039       default: icExtractS \
   7040       ), \
   7041     char: _Generic(delim2, \
   7042       char *: icExtractCharSS , \
   7043       const char *: icExtractCharSS , \
   7044       char: icExtractCharCharS , \
   7045       int: icExtractCharCharS, \
   7046       default: icExtractCharSS \
   7047       ), \
   7048     int: _Generic(delim2, \
   7049       char *: icExtractCharSS , \
   7050       const char *: icExtractCharSS , \
   7051       char: icExtractCharCharS , \
   7052       int: icExtractCharCharS, \
   7053       default: icExtractCharSS \
   7054       ), \
   7055     default: icExtractS \
   7056     ), \
   7057   smallJsont *: _Generic(delim1, \
   7058     char *: _Generic(delim2, \
   7059       char *: icExtractSmallJsonG, \
   7060       const char *: icExtractSmallJsonG, \
   7061       char: icExtractSCharSmallJsonG, \
   7062       int: icExtractSCharSmallJsonG, \
   7063       smallJsont *: icExtractSSmallJsonSmallJsonG, \
   7064       smallStringt *: icExtractSSmallStringSmallJsonG \
   7065       ), \
   7066     const char *: _Generic(delim2, \
   7067       char *: icExtractSmallJsonG, \
   7068       const char *: icExtractSmallJsonG, \
   7069       char: icExtractSCharSmallJsonG, \
   7070       int: icExtractSCharSmallJsonG, \
   7071       smallJsont *: icExtractSSmallJsonSmallJsonG, \
   7072       smallStringt *: icExtractSSmallStringSmallJsonG \
   7073       ),\
   7074     char: _Generic(delim2, \
   7075       char *: icExtractCharSSmallJsonG, \
   7076       const char *: icExtractCharSSmallJsonG, \
   7077       char: icExtractCharCharSmallJsonG, \
   7078       int: icExtractCharCharSmallJsonG, \
   7079       smallJsont *: icExtractCharSmallJsonSmallJsonG, \
   7080       smallStringt *: icExtractCharSmallStringSmallJsonG \
   7081       ),\
   7082     int: _Generic(delim2, \
   7083       char *: icExtractCharSSmallJsonG, \
   7084       const char *: icExtractCharSSmallJsonG, \
   7085       char: icExtractCharCharSmallJsonG, \
   7086       int: icExtractCharCharSmallJsonG, \
   7087       smallJsont *: icExtractCharSmallJsonSmallJsonG, \
   7088       smallStringt *: icExtractCharSmallStringSmallJsonG \
   7089       ),\
   7090     smallJsont *: _Generic(delim2, \
   7091       char *: icExtractSmallJsonSSmallJsonG, \
   7092       const char *: icExtractSmallJsonSSmallJsonG, \
   7093       char: icExtractSmallJsonCharSmallJsonG, \
   7094       int: icExtractSmallJsonCharSmallJsonG, \
   7095       smallJsont *: icExtractSmallJsonSmallJsonSmallJsonG, \
   7096       smallStringt *: icExtractSmallJsonSmallStringSmallJsonG \
   7097       ),\
   7098     smallStringt *: _Generic(delim2, \
   7099       char *: icExtractSmallStringSSmallJsonG, \
   7100       const char *: icExtractSmallStringSSmallJsonG, \
   7101       char: icExtractSmallStringCharSmallJsonG, \
   7102       int: icExtractSmallStringCharSmallJsonG, \
   7103       smallJsont *: icExtractSmallStringSmallJsonSmallJsonG, \
   7104       smallStringt *: icExtractSmallStringSmallStringSmallJsonG \
   7105       )\
   7106     ), \
   7107   smallStringt *: _Generic(delim1, \
   7108     char *: _Generic(delim2, \
   7109       char *: icExtractSmallStringG, \
   7110       const char *: icExtractSmallStringG, \
   7111       char: icExtractSCharSmallStringG, \
   7112       int: icExtractSCharSmallStringG, \
   7113       smallJsont *: icExtractSSmallJsonSmallStringG, \
   7114       smallStringt *: icExtractSSmallStringSmallStringG \
   7115       ), \
   7116     const char *: _Generic(delim2, \
   7117       char *: icExtractSmallStringG, \
   7118       const char *: icExtractSmallStringG, \
   7119       char: icExtractSCharSmallStringG, \
   7120       int: icExtractSCharSmallStringG, \
   7121       smallJsont *: icExtractSSmallJsonSmallStringG, \
   7122       smallStringt *: icExtractSSmallStringSmallStringG \
   7123       ),\
   7124     char: _Generic(delim2, \
   7125       char *: icExtractCharSSmallStringG, \
   7126       const char *: icExtractCharSSmallStringG, \
   7127       char: icExtractCharCharSmallStringG, \
   7128       int: icExtractCharCharSmallStringG, \
   7129       smallJsont *: icExtractCharSmallJsonSmallStringG, \
   7130       smallStringt *: icExtractCharSmallStringSmallStringG \
   7131       ),\
   7132     int: _Generic(delim2, \
   7133       char *: icExtractCharSSmallStringG, \
   7134       const char *: icExtractCharSSmallStringG, \
   7135       char: icExtractCharCharSmallStringG, \
   7136       int: icExtractCharCharSmallStringG, \
   7137       smallJsont *: icExtractCharSmallJsonSmallStringG, \
   7138       smallStringt *: icExtractCharSmallStringSmallStringG \
   7139       ),\
   7140     smallJsont *: _Generic(delim2, \
   7141       char *: icExtractSmallJsonSSmallStringG, \
   7142       const char *: icExtractSmallJsonSSmallStringG, \
   7143       char: icExtractSmallJsonCharSmallStringG, \
   7144       int: icExtractSmallJsonCharSmallStringG, \
   7145       smallJsont *: icExtractSmallJsonSmallJsonSmallStringG, \
   7146       smallStringt *: icExtractSmallJsonSmallStringSmallStringG \
   7147       ),\
   7148     smallStringt *: _Generic(delim2, \
   7149       char *: icExtractSmallStringSSmallStringG, \
   7150       const char *: icExtractSmallStringSSmallStringG, \
   7151       char: icExtractSmallStringCharSmallStringG, \
   7152       int: icExtractSmallStringCharSmallStringG, \
   7153       smallJsont *: icExtractSmallStringSmallJsonSmallStringG, \
   7154       smallStringt *: icExtractSmallStringSmallStringSmallStringG \
   7155       )\
   7156     ) \
   7157   )(self, delim1, delim2)
   7158 
   7159 #define reverseO(self) (self)->f->reverse(self)
   7160 #define reverseG(self) _Generic((self), \
   7161   char **: listReverseS, \
   7162   char ***: iListReverseS, \
   7163   smallArrayt *: reverseSmallArrayG, \
   7164   smallJsont *: reverseSmallJsonG \
   7165   )(self)
   7166 
   7167 #define addO(self, array) (self)->f->add(self, array)
   7168 #define addG(self, list) _Generic((self), \
   7169   char *: appendS, \
   7170   const char *: appendS, \
   7171   char **: _Generic(list, \
   7172     char **: listAddS, \
   7173     const char **: listAddCG, \
   7174     default: listAddS \
   7175     ), \
   7176   smallStringt *: appendSmallStringG, \
   7177   smallArrayt *: addSmallArrayG, \
   7178   smallJsont *: _Generic(list, \
   7179     smallArrayt *: addSmallJsonG, \
   7180     smallJsont *: addJsonSmallJsonG, \
   7181     default: addJsonSmallJsonG \
   7182     ) \
   7183   )(self, list)
   7184 
   7185 #define sortO(self) (self)->f->sort(self)
   7186 #define sortG(self) _Generic((self), \
   7187   char **: listSortS, \
   7188   char ***: iListSortS, \
   7189   smallArrayt *: sortSmallArrayG, \
   7190   smallJsont *: sortSmallJsonG \
   7191   )(self)
   7192 
   7193 #define binarySearchO(self, value) (self)->f->binarySearch(self, value)
   7194 #define binarySearchG(self, string) _Generic((self), \
   7195   char **: _Generic(string, \
   7196     char *: listBinarySearchS, \
   7197     const char *: listBinarySearchS, \
   7198     char: listBinarySearchCharS, \
   7199     int: listBinarySearchCharS, \
   7200     default: listBinarySearchS \
   7201     ), \
   7202   smallArrayt *: _Generic((string), \
   7203     baset*: binarySearchSmallArrayG, \
   7204     bool: binarySearchBoolSmallArrayG, \
   7205     double: binarySearchDoubleSmallArrayG, \
   7206     int64_t: binarySearchIntSmallArrayG, \
   7207     int32_t: binarySearchIntSmallArrayG, \
   7208     uint32_t: binarySearchIntSmallArrayG, \
   7209     uint64_t: binarySearchIntSmallArrayG, \
   7210     char*: binarySearchSSmallArrayG, \
   7211     const char*: binarySearchSSmallArrayG, \
   7212     char: binarySearchCharSmallArrayG, \
   7213     smallDictt*: binarySearchDictSmallArrayG, \
   7214     smallArrayt*: binarySearchArraySmallArrayG, \
   7215     char **: binarySearchArraycSmallArrayG, \
   7216     const char **: binarySearchCArraycSmallArrayG, \
   7217     smallBoolt*: binarySearchSmallBoolSmallArrayG, \
   7218     smallBytest*: binarySearchSmallBytesSmallArrayG, \
   7219     smallDoublet*: binarySearchSmallDoubleSmallArrayG, \
   7220     smallIntt*: binarySearchSmallIntSmallArrayG, \
   7221     smallJsont*: binarySearchSmallJsonSmallArrayG, \
   7222     smallStringt*: binarySearchSmallStringSmallArrayG, \
   7223     smallContainert*: binarySearchSmallContainerSmallArrayG, \
   7224     undefinedt*: binarySearchUndefinedSmallArrayG, \
   7225     default: binarySearchUndefinedSmallArrayG \
   7226     ), \
   7227   smallJsont *: _Generic((string), \
   7228     baset*: binarySearchSmallJsonG, \
   7229     bool: binarySearchBoolSmallJsonG, \
   7230     double: binarySearchDoubleSmallJsonG, \
   7231     int64_t: binarySearchIntSmallJsonG, \
   7232     int32_t: binarySearchIntSmallJsonG, \
   7233     uint32_t: binarySearchIntSmallJsonG, \
   7234     uint64_t: binarySearchIntSmallJsonG, \
   7235     char*: binarySearchSSmallJsonG, \
   7236     const char*: binarySearchSSmallJsonG, \
   7237     char: binarySearchCharSmallJsonG, \
   7238     smallDictt*: binarySearchDictSmallJsonG, \
   7239     smallArrayt*: binarySearchArraySmallJsonG, \
   7240     char **: binarySearchArraycSmallJsonG, \
   7241     const char **: binarySearchCArraycSmallJsonG, \
   7242     smallBoolt*: binarySearchSmallBoolSmallJsonG, \
   7243     smallBytest*: binarySearchSmallBytesSmallJsonG, \
   7244     smallDoublet*: binarySearchSmallDoubleSmallJsonG, \
   7245     smallIntt*: binarySearchSmallIntSmallJsonG, \
   7246     smallJsont*: binarySearchSmallJsonSmallJsonG, \
   7247     smallStringt*: binarySearchSmallStringSmallJsonG, \
   7248     smallContainert*: binarySearchSmallContainerSmallJsonG, \
   7249     undefinedt*: binarySearchUndefinedSmallJsonG, \
   7250     default: binarySearchUndefinedSmallJsonG \
   7251     ) \
   7252   )(self, string)
   7253 
   7254 #define icSortO(self) (self)->f->icSort(self)
   7255 #define icSortG(self) _Generic((self), \
   7256   char **: icListSortS, \
   7257   char ***: iicListSortS, \
   7258   smallArrayt *: icSortSmallArrayG, \
   7259   smallJsont *: icSortSmallJsonG \
   7260   )(self)
   7261 
   7262 #define icBinarySearchO(self, value) (self)->f->icBinarySearch(self, value)
   7263 #define icBinarySearchG(self, string) _Generic((self), \
   7264   char **: _Generic(string, \
   7265     char *: icListBinarySearchS, \
   7266     const char *: icListBinarySearchS, \
   7267     char: icListBinarySearchCharS, \
   7268     int: icListBinarySearchCharS, \
   7269     default: icListBinarySearchS \
   7270     ), \
   7271   smallArrayt *: _Generic((string), \
   7272     baset*: icBinarySearchSmallArrayG, \
   7273     bool: binarySearchBoolSmallArrayG, \
   7274     double: binarySearchDoubleSmallArrayG, \
   7275     int64_t: binarySearchIntSmallArrayG, \
   7276     int32_t: binarySearchIntSmallArrayG, \
   7277     uint32_t: binarySearchIntSmallArrayG, \
   7278     uint64_t: binarySearchIntSmallArrayG, \
   7279     char*: icBinarySearchSSmallArrayG, \
   7280     const char*: icBinarySearchSSmallArrayG, \
   7281     char: icBinarySearchCharSmallArrayG, \
   7282     smallDictt*: icBinarySearchDictSmallArrayG, \
   7283     smallArrayt*: icBinarySearchArraySmallArrayG, \
   7284     char **: icBinarySearchArraycSmallArrayG, \
   7285     const char **: icBinarySearchCArraycSmallArrayG, \
   7286     smallBoolt*: binarySearchSmallBoolSmallArrayG, \
   7287     smallBytest*: binarySearchSmallBytesSmallArrayG, \
   7288     smallDoublet*: binarySearchSmallDoubleSmallArrayG, \
   7289     smallIntt*: binarySearchSmallIntSmallArrayG, \
   7290     smallJsont*: icBinarySearchSmallJsonSmallArrayG, \
   7291     smallStringt*: icBinarySearchSmallStringSmallArrayG, \
   7292     smallContainert*: binarySearchSmallContainerSmallArrayG, \
   7293     undefinedt*: binarySearchUndefinedSmallArrayG, \
   7294     default: binarySearchUndefinedSmallArrayG \
   7295     ), \
   7296   smallJsont *: _Generic((string), \
   7297     baset*: icBinarySearchSmallJsonG, \
   7298     bool: binarySearchBoolSmallJsonG, \
   7299     double: binarySearchDoubleSmallJsonG, \
   7300     int64_t: binarySearchIntSmallJsonG, \
   7301     int32_t: binarySearchIntSmallJsonG, \
   7302     uint32_t: binarySearchIntSmallJsonG, \
   7303     uint64_t: binarySearchIntSmallJsonG, \
   7304     char*: icBinarySearchSSmallJsonG, \
   7305     const char*: icBinarySearchSSmallJsonG, \
   7306     char: icBinarySearchCharSmallJsonG, \
   7307     smallDictt*: icBinarySearchDictSmallJsonG, \
   7308     smallArrayt*: icBinarySearchArraySmallJsonG, \
   7309     char **: icBinarySearchArraycSmallJsonG, \
   7310     const char **: icBinarySearchCArraycSmallJsonG, \
   7311     smallBoolt*: binarySearchSmallBoolSmallJsonG, \
   7312     smallBytest*: binarySearchSmallBytesSmallJsonG, \
   7313     smallDoublet*: binarySearchSmallDoubleSmallJsonG, \
   7314     smallIntt*: binarySearchSmallIntSmallJsonG, \
   7315     smallJsont*: binarySearchSmallJsonSmallJsonG, \
   7316     smallStringt*: icBinarySearchSmallStringSmallJsonG, \
   7317     smallContainert*: binarySearchSmallContainerSmallJsonG, \
   7318     undefinedt*: binarySearchUndefinedSmallJsonG, \
   7319     default: binarySearchUndefinedSmallJsonG \
   7320     ) \
   7321   )(self, string)
   7322 
   7323 #define compactO(self) (self)->f->compact(self)
   7324 #define compactG(self) _Generic((self), \
   7325   char **: listCompactS, \
   7326   char ***: iListCompactS, \
   7327   smallArrayt *: compactSmallArrayG, \
   7328   smallJsont *: compactSmallJsonG \
   7329   )(self)
   7330 
   7331 #define parseO(self, input) (self)->f->parse(self, input)
   7332 #define parseG(self, input) _Generic(input, \
   7333     char *: parseSmallJsonG, \
   7334     const char *: parseSmallJsonG, \
   7335     smallJsont *: parseSmallJsonSmallJsonG, \
   7336     smallStringt *: parseSmallStringSmallJsonG \
   7337     )(self, input)
   7338 
   7339 #define parseYMLO(self, input) (self)->f->parseYML(self, input)
   7340 #define parseYMLG(self, input) _Generic(input, \
   7341     char *: parseYMLSmallJsonG, \
   7342     const char *: parseYMLSmallJsonG, \
   7343     smallJsont *: parseYMLSmallJsonSmallJsonG, \
   7344     smallStringt *: parseYMLSmallStringSmallJsonG \
   7345     )(self, input)
   7346 
   7347 //TODO stringifySmallJson rtChar rtSmallStringt
   7348 //TODO toYMLSmallJson rtChar rtSmallStringt
   7349 
   7350 
   7351 #define execG(cmd, out, err) _Generic(cmd, \
   7352     char *: execO, \
   7353     const char *: execO, \
   7354     smallJsont *: execSmallJsonO, \
   7355     smallStringt *: execSmallStringO \
   7356     )(cmd, out, err)
   7357 
   7358 #define renameG(src, dst) _Generic(src, \
   7359     char *: _Generic(dst, \
   7360       char *: shRename, \
   7361       const char *: shRename, \
   7362       smallJsont *: renameSSmallJsonO, \
   7363       smallStringt *: renameSO \
   7364       ), \
   7365     const char*: _Generic(dst, \
   7366       char *: shRename, \
   7367       const char *: shRename, \
   7368       smallJsont *: renameSSmallJsonO, \
   7369       smallStringt *: renameSO \
   7370       ), \
   7371     smallJsont *: _Generic(dst, \
   7372       char *: renameSmallJsonOS, \
   7373       const char *: renameSmallJsonOS, \
   7374       smallJsont *: renameSmallJsonSmallJson, \
   7375       smallStringt *: renameSmallJsonO \
   7376       ), \
   7377     smallStringt *: _Generic(dst, \
   7378       char *: renameOS, \
   7379       const char *: renameOS, \
   7380       smallJsont *: renameOSmallJson, \
   7381       smallStringt *: renameO \
   7382       ) \
   7383     )(src, dst)
   7384 
   7385 #define moveG(src, dst) _Generic(src, \
   7386     char *: _Generic(dst, \
   7387       char *: shMove, \
   7388       const char *: shMove, \
   7389       smallJsont *: moveSSmallJsonO, \
   7390       smallStringt *: moveSO \
   7391       ), \
   7392     const char*: _Generic(dst, \
   7393       char *: shMove, \
   7394       const char *: shMove, \
   7395       smallJsont *: moveSSmallJsonO, \
   7396       smallStringt *: moveSO \
   7397       ), \
   7398     smallJsont *: _Generic(dst, \
   7399       char *: moveSmallJsonOS, \
   7400       const char *: moveSmallJsonOS, \
   7401       smallJsont *: moveSmallJsonSmallJson, \
   7402       smallStringt *: moveSmallJsonO \
   7403       ), \
   7404     smallStringt *: _Generic(dst, \
   7405       char *: moveOS, \
   7406       const char *: moveOS, \
   7407       smallJsont *: moveOSmallJson, \
   7408       smallStringt *: moveO \
   7409       ) \
   7410     )(src, dst)
   7411 
   7412 /**
   7413  * log array or dictionary, one line per element
   7414  */
   7415 #define logO(self) (self)->f->log(self)
   7416 #define logG(self) _Generic(self, \
   7417     smallArrayt *: logSmallArrayG, \
   7418     smallDictt *: logSmallDictG, \
   7419     smallJsont *: logSmallJsonG, \
   7420     char **: listPrintS, \
   7421     const char **: listPrintCG \
   7422    )(self)
   7423 
   7424 
   7425 /**
   7426  * log variable and its value
   7427  *
   7428  * Example:
   7429  *   logVarG(k)
   7430  *   k=14
   7431  */
   7432 #define logVarG(var)\
   7433   do {\
   7434     char *UNIQVAR(tmpString) = toStringG(var);\
   7435     logD("%s=%s\n", stringifyExpr(var), UNIQVAR(tmpString));\
   7436     free(UNIQVAR(tmpString));\
   7437   } while(0);
   7438 
   7439 #define logMVarG(mask, var)\
   7440   do {\
   7441     char *UNIQVAR(tmpString) = toStringG(var);\
   7442     logMD(mask, "%s=%s\n", stringifyExpr(var), UNIQVAR(tmpString));\
   7443     free(UNIQVAR(tmpString));\
   7444   } while(0);
   7445 
   7446 /**
   7447  * log type, variable and its value
   7448  *
   7449  * Example:
   7450  *   logTVarG(k)
   7451  *   int k=14
   7452  */
   7453 #define logTVarG(var)\
   7454   do {\
   7455     char *UNIQVAR(tmpString) = toStringG(var);\
   7456     logD("%s %s=%s\n", getOTypeG(var), stringifyExpr(var), UNIQVAR(tmpString));\
   7457     free(UNIQVAR(tmpString));\
   7458   } while(0);
   7459 
   7460 #define logMTVarG(mask, var)\
   7461   do {\
   7462     char *UNIQVAR(tmpString) = toStringG(var);\
   7463     logMD(mask, "%s %s=%s\n", getOTypeG(var), stringifyExpr(var), UNIQVAR(tmpString));\
   7464     free(UNIQVAR(tmpString));\
   7465   } while(0);
   7466 
   7467 #define logTypeG(var) logD("%s %s\n", getOTypeG(var), stringifyExpr(var))
   7468 
   7469 /**
   7470  * cat for smallArray and smallString
   7471  */
   7472 #define catO(self, ...) (self)->f->cat((self), __VA_ARGS__, NULL)
   7473 #define catG catO
   7474 #define catSO(self, ...) (self)->f->catSt((self), __VA_ARGS__, NULL)
   7475 #define catSG catSO
   7476 
   7477 #define pushManyO(self, ...) (self)->f->pushMany(self, __VA_ARGS__, NULL)
   7478 #define pushManyG pushManyO
   7479 
   7480 #define pushManySO(self, ...) (self)->f->pushManyS(self, __VA_ARGS__, NULL)
   7481 #define pushManySG pushManySO
   7482 
   7483 #define pushNFreeManyO(self, ...) (self)->f->pushNFreeMany(self, __VA_ARGS__, NULL)
   7484 #define pushNFreeManyG pushNFreeManyO
   7485 
   7486 #define pushNFreeManySO(self, ...) (self)->f->pushNFreeManyS(self, __VA_ARGS__, NULL)
   7487 #define pushNFreeManySG pushNFreeManySO
   7488 
   7489 
   7490 // smallBytes pushBuffer
   7491 #define pushBufferO(self, data, size) (self)->f->pushBuffer(self, data, size)
   7492 #define pushBufferG pushBufferO
   7493 
   7494 
   7495 #define setTopSO setTopStringO
   7496 #define setTopSG setTopStringO
   7497 
   7498 // generated with utils/oGMacros
   7499 
   7500 #define escapeO(self) (self)->f->escape(self)
   7501 #define escapeG escapeO
   7502 
   7503 #define disposeO(self) (self)->f->dispose(self)
   7504 #define disposeG disposeO
   7505 
   7506 #define helpO(self) (self)->f->help(self)
   7507 #define helpG helpO
   7508 
   7509 #define resetO(self) (self)->f->reset(self)
   7510 #define resetG resetO
   7511 
   7512 #define getsoO(self) (self)->f->getso(self)
   7513 #define getsoG getsoO
   7514 
   7515 #define setsoO(self, so) (self)->f->setso(self, so)
   7516 #define setsoG setsoO
   7517 
   7518 #define mirrorO(self) (self)->f->mirror(self)
   7519 #define mirrorG mirrorO
   7520 
   7521 #define fromCArrayO(self, array, size) (self)->f->fromCArray(self, array, size)
   7522 #define fromCArrayG fromCArrayO
   7523 
   7524 #define fromArrayNFreeO(self, array, size) (self)->f->fromArrayNFree(self, array, size)
   7525 #define fromArrayNFreeG fromArrayNFreeO
   7526 
   7527 #define pushCharO(self, c) (self)->f->pushChar(self, c)
   7528 #define pushCharG pushCharO
   7529 
   7530 #define pushArraycO(self, array) (self)->f->pushArrayc(self, array)
   7531 #define pushArraycG pushArraycO
   7532 
   7533 #define pushCArraycO(self, array) (self)->f->pushCArrayc(self, array)
   7534 #define pushCArraycG pushCArraycO
   7535 
   7536 #define pushNFreeArraycO(self, array) (self)->f->pushNFreeArrayc(self, array)
   7537 #define pushNFreeArraycG pushNFreeArraycO
   7538 
   7539 #define pushNFreeSmallBytesO(self, value) (self)->f->pushNFreeSmallBytes(self, value)
   7540 #define pushNFreeSmallBytesG pushNFreeSmallBytesO
   7541 
   7542 #define popSmallBytesO(self) (self)->f->popSmallBytes(self)
   7543 #define popSmallBytesG popSmallBytesO
   7544 
   7545 #define popNumO(self) (self)->f->popNum(self)
   7546 #define popNumG popNumO
   7547 
   7548 #define prependUndefinedO(self) (self)->f->prependUndefined(self)
   7549 #define prependUndefinedG prependUndefinedO
   7550 
   7551 #define prependBoolO(self, value) (self)->f->prependBool(self, value)
   7552 #define prependBoolG prependBoolO
   7553 
   7554 #define prependDoubleO(self, value) (self)->f->prependDouble(self, value)
   7555 #define prependDoubleG prependDoubleO
   7556 
   7557 #define prependIntO(self, value) (self)->f->prependInt(self, value)
   7558 #define prependIntG prependIntO
   7559 
   7560 #define prependSO(self, string) (self)->f->prependS(self, string)
   7561 #define prependSG prependSO
   7562 
   7563 #define prependCharO(self, c) (self)->f->prependChar(self, c)
   7564 #define prependCharG prependCharO
   7565 
   7566 #define prependDictO(self, dict) (self)->f->prependDict(self, dict)
   7567 #define prependDictG prependDictO
   7568 
   7569 #define prependArrayO(self, array) (self)->f->prependArray(self, array)
   7570 #define prependArrayG prependArrayO
   7571 
   7572 #define prependArraycO(self, array) (self)->f->prependArrayc(self, array)
   7573 #define prependArraycG prependArraycO
   7574 
   7575 #define prependCArraycO(self, array) (self)->f->prependCArrayc(self, array)
   7576 #define prependCArraycG prependCArraycO
   7577 
   7578 #define prependSmallBoolO(self, value) (self)->f->prependSmallBool(self, value)
   7579 #define prependSmallBoolG prependSmallBoolO
   7580 
   7581 #define prependSmallBytesO(self, value) (self)->f->prependSmallBytes(self, value)
   7582 #define prependSmallBytesG prependSmallBytesO
   7583 
   7584 #define prependSmallDoubleO(self, value) (self)->f->prependSmallDouble(self, value)
   7585 #define prependSmallDoubleG prependSmallDoubleO
   7586 
   7587 #define prependSmallIntO(self, value) (self)->f->prependSmallInt(self, value)
   7588 #define prependSmallIntG prependSmallIntO
   7589 
   7590 #define prependSmallContainerO(self, container) (self)->f->prependSmallContainer(self, container)
   7591 #define prependSmallContainerG prependSmallContainerO
   7592 
   7593 #define prependNFreeUndefinedO(self, u) (self)->f->prependNFreeUndefined(self, u)
   7594 #define prependNFreeUndefinedG prependNFreeUndefinedO
   7595 
   7596 #define prependNFreeSO(self, string) (self)->f->prependNFreeS(self, string)
   7597 #define prependNFreeSG prependNFreeSO
   7598 
   7599 #define prependNFreeDictO(self, dict) (self)->f->prependNFreeDict(self, dict)
   7600 #define prependNFreeDictG prependNFreeDictO
   7601 
   7602 #define prependNFreeArrayO(self, array) (self)->f->prependNFreeArray(self, array)
   7603 #define prependNFreeArrayG prependNFreeArrayO
   7604 
   7605 #define prependNFreeArraycO(self, array) (self)->f->prependNFreeArrayc(self, array)
   7606 #define prependNFreeArraycG prependNFreeArraycO
   7607 
   7608 #define prependNFreeSmallBoolO(self, value) (self)->f->prependNFreeSmallBool(self, value)
   7609 #define prependNFreeSmallBoolG prependNFreeSmallBoolO
   7610 
   7611 #define prependNFreeSmallBytesO(self, value) (self)->f->prependNFreeSmallBytes(self, value)
   7612 #define prependNFreeSmallBytesG prependNFreeSmallBytesO
   7613 
   7614 #define prependNFreeSmallDoubleO(self, value) (self)->f->prependNFreeSmallDouble(self, value)
   7615 #define prependNFreeSmallDoubleG prependNFreeSmallDoubleO
   7616 
   7617 #define prependNFreeSmallIntO(self, value) (self)->f->prependNFreeSmallInt(self, value)
   7618 #define prependNFreeSmallIntG prependNFreeSmallIntO
   7619 
   7620 #define prependNFreeSmallStringO(self, string) (self)->f->prependNFreeSmallString(self, string)
   7621 #define prependNFreeSmallStringG prependNFreeSmallStringO
   7622 
   7623 #define prependNFreeSmallContainerO(self, container) (self)->f->prependNFreeSmallContainer(self, container)
   7624 #define prependNFreeSmallContainerG prependNFreeSmallContainerO
   7625 
   7626 #define dequeueUndefinedO(self) (self)->f->dequeueUndefined(self)
   7627 #define dequeueUndefinedG dequeueUndefinedO
   7628 
   7629 #define dequeueBoolO(self) (self)->f->dequeueBool(self)
   7630 #define dequeueBoolG dequeueBoolO
   7631 
   7632 #define dequeueDoubleO(self) (self)->f->dequeueDouble(self)
   7633 #define dequeueDoubleG dequeueDoubleO
   7634 
   7635 #define dequeueIntO(self) (self)->f->dequeueInt(self)
   7636 #define dequeueIntG dequeueIntO
   7637 
   7638 #define dequeueInt32O(self) (self)->f->dequeueInt32(self)
   7639 #define dequeueInt32G dequeueInt32O
   7640 
   7641 #define dequeueUintO(self) (self)->f->dequeueUint(self)
   7642 #define dequeueUintG dequeueUintO
   7643 
   7644 #define dequeueUint32O(self) (self)->f->dequeueUint32(self)
   7645 #define dequeueUint32G dequeueUint32O
   7646 
   7647 #define dequeueSO(self) (self)->f->dequeueS(self)
   7648 #define dequeueSG dequeueSO
   7649 
   7650 #define dequeueDictO(self) (self)->f->dequeueDict(self)
   7651 #define dequeueDictG dequeueDictO
   7652 
   7653 #define dequeueArrayO(self) (self)->f->dequeueArray(self)
   7654 #define dequeueArrayG dequeueArrayO
   7655 
   7656 #define dequeueSmallBoolO(self) (self)->f->dequeueSmallBool(self)
   7657 #define dequeueSmallBoolG dequeueSmallBoolO
   7658 
   7659 #define dequeueSmallBytesO(self) (self)->f->dequeueSmallBytes(self)
   7660 #define dequeueSmallBytesG dequeueSmallBytesO
   7661 
   7662 #define dequeueSmallDoubleO(self) (self)->f->dequeueSmallDouble(self)
   7663 #define dequeueSmallDoubleG dequeueSmallDoubleO
   7664 
   7665 #define dequeueSmallIntO(self) (self)->f->dequeueSmallInt(self)
   7666 #define dequeueSmallIntG dequeueSmallIntO
   7667 
   7668 #define dequeueSmallStringO(self) (self)->f->dequeueSmallString(self)
   7669 #define dequeueSmallStringG dequeueSmallStringO
   7670 
   7671 #define dequeueVoidO(self) (self)->f->dequeueVoid(self)
   7672 #define dequeueVoidG dequeueVoidO
   7673 
   7674 #define dequeueSmallContainerO(self) (self)->f->dequeueSmallContainer(self)
   7675 #define dequeueSmallContainerG dequeueSmallContainerO
   7676 
   7677 #define dequeueNumO(self) (self)->f->dequeueNum(self)
   7678 #define dequeueNumG dequeueNumO
   7679 
   7680 #define appendArrayO(self, array) (self)->f->appendArray(self, array)
   7681 #define appendArrayG appendArrayO
   7682 
   7683 #define appendCArrayO(self, array) (self)->f->appendCArray(self, array)
   7684 #define appendCArrayG appendCArrayO
   7685 
   7686 #define appendNSmashArrayO(self, array) (self)->f->appendNSmashArray(self, array)
   7687 #define appendNSmashArrayG appendNSmashArrayO
   7688 
   7689 #define cropElemUndefinedO(self, index) (self)->f->cropElemUndefined(self, index)
   7690 #define cropElemUndefinedG cropElemUndefinedO
   7691 
   7692 #define cropElemBoolO(self, index) (self)->f->cropElemBool(self, index)
   7693 #define cropElemBoolG cropElemBoolO
   7694 
   7695 #define cropElemDoubleO(self, index) (self)->f->cropElemDouble(self, index)
   7696 #define cropElemDoubleG cropElemDoubleO
   7697 
   7698 #define cropElemIntO(self, index) (self)->f->cropElemInt(self, index)
   7699 #define cropElemIntG cropElemIntO
   7700 
   7701 #define cropElemInt32O(self, index) (self)->f->cropElemInt32(self, index)
   7702 #define cropElemInt32G cropElemInt32O
   7703 
   7704 #define cropElemUintO(self, index) (self)->f->cropElemUint(self, index)
   7705 #define cropElemUintG cropElemUintO
   7706 
   7707 #define cropElemUint32O(self, index) (self)->f->cropElemUint32(self, index)
   7708 #define cropElemUint32G cropElemUint32O
   7709 
   7710 #define cropElemSO(self, index) (self)->f->cropElemS(self, index)
   7711 #define cropElemSG cropElemSO
   7712 
   7713 #define cropElemDictO(self, index) (self)->f->cropElemDict(self, index)
   7714 #define cropElemDictG cropElemDictO
   7715 
   7716 #define cropElemArrayO(self, index) (self)->f->cropElemArray(self, index)
   7717 #define cropElemArrayG cropElemArrayO
   7718 
   7719 #define cropElemSmallBoolO(self, index) (self)->f->cropElemSmallBool(self, index)
   7720 #define cropElemSmallBoolG cropElemSmallBoolO
   7721 
   7722 #define cropElemSmallBytesO(self, index) (self)->f->cropElemSmallBytes(self, index)
   7723 #define cropElemSmallBytesG cropElemSmallBytesO
   7724 
   7725 #define cropElemSmallDoubleO(self, index) (self)->f->cropElemSmallDouble(self, index)
   7726 #define cropElemSmallDoubleG cropElemSmallDoubleO
   7727 
   7728 #define cropElemSmallIntO(self, index) (self)->f->cropElemSmallInt(self, index)
   7729 #define cropElemSmallIntG cropElemSmallIntO
   7730 
   7731 #define cropElemSmallJsonO(self, index) (self)->f->cropElemSmallJson(self, index)
   7732 #define cropElemSmallJsonG cropElemSmallJsonO
   7733 
   7734 #define cropElemVoidO(self, index) (self)->f->cropElemVoid(self, index)
   7735 #define cropElemVoidG cropElemVoidO
   7736 
   7737 #define cropElemSmallContainerO(self, index) (self)->f->cropElemSmallContainer(self, index)
   7738 #define cropElemSmallContainerG cropElemSmallContainerO
   7739 
   7740 #define injectUndefinedO(self, index) (self)->f->injectUndefined(self, index)
   7741 #define injectUndefinedG injectUndefinedO
   7742 
   7743 #define injectBoolO(self, index, toInject) (self)->f->injectBool(self, index, toInject)
   7744 #define injectBoolG injectBoolO
   7745 
   7746 #define injectDoubleO(self, index, toInject) (self)->f->injectDouble(self, index, toInject)
   7747 #define injectDoubleG injectDoubleO
   7748 
   7749 #define injectIntO(self, index, toInject) (self)->f->injectInt(self, index, toInject)
   7750 #define injectIntG injectIntO
   7751 
   7752 #define injectSO(self, index, toInject) (self)->f->injectS(self, index, toInject)
   7753 #define injectSG injectSO
   7754 
   7755 #define injectCharO(self, index, c) (self)->f->injectChar(self, index, c)
   7756 #define injectCharG injectCharO
   7757 
   7758 #define injectDictO(self, index, toInject) (self)->f->injectDict(self, index, toInject)
   7759 #define injectDictG injectDictO
   7760 
   7761 #define injectArrayO(self, index, toInject) (self)->f->injectArray(self, index, toInject)
   7762 #define injectArrayG injectArrayO
   7763 
   7764 #define injectArraycO(self, index, toInject) (self)->f->injectArrayc(self, index, toInject)
   7765 #define injectArraycG injectArraycO
   7766 
   7767 #define injectCArraycO(self, index, toInject) (self)->f->injectCArrayc(self, index, toInject)
   7768 #define injectCArraycG injectCArraycO
   7769 
   7770 #define injectSmallBoolO(self, index, toInject) (self)->f->injectSmallBool(self, index, toInject)
   7771 #define injectSmallBoolG injectSmallBoolO
   7772 
   7773 #define injectSmallBytesO(self, index, toInject) (self)->f->injectSmallBytes(self, index, toInject)
   7774 #define injectSmallBytesG injectSmallBytesO
   7775 
   7776 #define injectSmallDoubleO(self, index, toInject) (self)->f->injectSmallDouble(self, index, toInject)
   7777 #define injectSmallDoubleG injectSmallDoubleO
   7778 
   7779 #define injectSmallIntO(self, index, toInject) (self)->f->injectSmallInt(self, index, toInject)
   7780 #define injectSmallIntG injectSmallIntO
   7781 
   7782 #define injectSmallContainerO(self, index, toInject) (self)->f->injectSmallContainer(self, index, toInject)
   7783 #define injectSmallContainerG injectSmallContainerO
   7784 
   7785 #define injectNFreeUndefinedO(self, index, u) (self)->f->injectNFreeUndefined(self, index, u)
   7786 #define injectNFreeUndefinedG injectNFreeUndefinedO
   7787 
   7788 #define injectNFreeSO(self, index, toInject) (self)->f->injectNFreeS(self, index, toInject)
   7789 #define injectNFreeSG injectNFreeSO
   7790 
   7791 #define injectNFreeDictO(self, index, toInject) (self)->f->injectNFreeDict(self, index, toInject)
   7792 #define injectNFreeDictG injectNFreeDictO
   7793 
   7794 #define injectNFreeArrayO(self, index, toInject) (self)->f->injectNFreeArray(self, index, toInject)
   7795 #define injectNFreeArrayG injectNFreeArrayO
   7796 
   7797 #define injectNFreeArraycO(self, index, toInject) (self)->f->injectNFreeArrayc(self, index, toInject)
   7798 #define injectNFreeArraycG injectNFreeArraycO
   7799 
   7800 #define injectNFreeSmallBoolO(self, index, toInject) (self)->f->injectNFreeSmallBool(self, index, toInject)
   7801 #define injectNFreeSmallBoolG injectNFreeSmallBoolO
   7802 
   7803 #define injectNFreeSmallBytesO(self, index, toInject) (self)->f->injectNFreeSmallBytes(self, index, toInject)
   7804 #define injectNFreeSmallBytesG injectNFreeSmallBytesO
   7805 
   7806 #define injectNFreeSmallDoubleO(self, index, toInject) (self)->f->injectNFreeSmallDouble(self, index, toInject)
   7807 #define injectNFreeSmallDoubleG injectNFreeSmallDoubleO
   7808 
   7809 #define injectNFreeSmallIntO(self, index, toInject) (self)->f->injectNFreeSmallInt(self, index, toInject)
   7810 #define injectNFreeSmallIntG injectNFreeSmallIntO
   7811 
   7812 #define injectNFreeSmallStringO(self, index, toInject) (self)->f->injectNFreeSmallString(self, index, toInject)
   7813 #define injectNFreeSmallStringG injectNFreeSmallStringO
   7814 
   7815 #define injectNFreeSmallContainerO(self, index, toInject) (self)->f->injectNFreeSmallContainer(self, index, toInject)
   7816 #define injectNFreeSmallContainerG injectNFreeSmallContainerO
   7817 
   7818 #define sortFO(self, compareFunction) (self)->f->sortF(self, compareFunction)
   7819 #define sortFG sortFO
   7820 
   7821 #define equalO(self, array) (self)->f->equal(self, array)
   7822 #define equalG equalO
   7823 
   7824 #define equalSmallJsonO(self, array) (self)->f->equalSmallJson(self, array)
   7825 #define equalSmallJsonG equalSmallJsonO
   7826 
   7827 #define equalArrayO(self, p2) (self)->f->equalArray(self, p2)
   7828 #define equalArrayG equalArrayO
   7829 
   7830 #define equalCArrayO(self, p2) (self)->f->equalCArray(self, p2)
   7831 #define equalCArrayG equalCArrayO
   7832 
   7833 #define equalBaseO(self, p2) (self)->f->equalBase(self, p2)
   7834 #define equalBaseG equalBaseO
   7835 
   7836 #define icEqualO(self, array) (self)->f->icEqual(self, array)
   7837 #define icEqualG icEqualO
   7838 
   7839 #define icEqualSmallJsonO(self, array) (self)->f->icEqualSmallJson(self, array)
   7840 #define icEqualSmallJsonG icEqualSmallJsonO
   7841 
   7842 #define setAtCharO(self, index, c) (self)->f->setAtChar(self, index, c)
   7843 #define setAtCharG setAtCharO
   7844 
   7845 #define setAtArraycO(self, index, array) (self)->f->setAtArrayc(self, index, array)
   7846 #define setAtArraycG setAtArraycO
   7847 
   7848 #define setAtCArraycO(self, index, array) (self)->f->setAtCArrayc(self, index, array)
   7849 #define setAtCArraycG setAtCArraycO
   7850 
   7851 #define setAtSmallBytesO(self, index, value) (self)->f->setAtSmallBytes(self, index, value)
   7852 #define setAtSmallBytesG setAtSmallBytesO
   7853 
   7854 #define setAtNFreeArraycO(self, index, array) (self)->f->setAtNFreeArrayc(self, index, array)
   7855 #define setAtNFreeArraycG setAtNFreeArraycO
   7856 
   7857 #define setAtNFreeSmallBytesO(self, index, value) (self)->f->setAtNFreeSmallBytes(self, index, value)
   7858 #define setAtNFreeSmallBytesG setAtNFreeSmallBytesO
   7859 
   7860 #define setPAtSmallJsonO(self, index, json) (self)->f->setPAtSmallJson(self, index, json)
   7861 #define setPAtSmallJsonG setPAtSmallJsonO
   7862 
   7863 #define setPAtNFreeSmallJsonO(self, index, json) (self)->f->setPAtNFreeSmallJson(self, index, json)
   7864 #define setPAtNFreeSmallJsonG setPAtNFreeSmallJsonO
   7865 
   7866 #define hasUndefinedO(self, u) (self)->f->hasUndefined(self, u)
   7867 #define hasUndefinedG hasUndefinedO
   7868 
   7869 #define hasBoolO(self, value) (self)->f->hasBool(self, value)
   7870 #define hasBoolG hasBoolO
   7871 
   7872 #define hasDoubleO(self, value) (self)->f->hasDouble(self, value)
   7873 #define hasDoubleG hasDoubleO
   7874 
   7875 #define hasIntO(self, value) (self)->f->hasInt(self, value)
   7876 #define hasIntG hasIntO
   7877 
   7878 #define hasSO(self, string) (self)->f->hasS(self, string)
   7879 #define hasSG hasSO
   7880 
   7881 #define hasCharO(self, c) (self)->f->hasChar(self, c)
   7882 #define hasCharG hasCharO
   7883 
   7884 #define hasDictO(self, dict) (self)->f->hasDict(self, dict)
   7885 #define hasDictG hasDictO
   7886 
   7887 #define hasArrayO(self, array) (self)->f->hasArray(self, array)
   7888 #define hasArrayG hasArrayO
   7889 
   7890 #define hasArraycO(self, array) (self)->f->hasArrayc(self, array)
   7891 #define hasArraycG hasArraycO
   7892 
   7893 #define hasCArraycO(self, array) (self)->f->hasCArrayc(self, array)
   7894 #define hasCArraycG hasCArraycO
   7895 
   7896 #define hasSmallBoolO(self, value) (self)->f->hasSmallBool(self, value)
   7897 #define hasSmallBoolG hasSmallBoolO
   7898 
   7899 #define hasSmallBytesO(self, value) (self)->f->hasSmallBytes(self, value)
   7900 #define hasSmallBytesG hasSmallBytesO
   7901 
   7902 #define hasSmallDoubleO(self, value) (self)->f->hasSmallDouble(self, value)
   7903 #define hasSmallDoubleG hasSmallDoubleO
   7904 
   7905 #define hasSmallIntO(self, value) (self)->f->hasSmallInt(self, value)
   7906 #define hasSmallIntG hasSmallIntO
   7907 
   7908 #define hasSmallContainerO(self, container) (self)->f->hasSmallContainer(self, container)
   7909 #define hasSmallContainerG hasSmallContainerO
   7910 
   7911 #define indexOfUndefinedO(self, u) (self)->f->indexOfUndefined(self, u)
   7912 #define indexOfUndefinedG indexOfUndefinedO
   7913 
   7914 #define indexOfBoolO(self, value) (self)->f->indexOfBool(self, value)
   7915 #define indexOfBoolG indexOfBoolO
   7916 
   7917 #define indexOfDoubleO(self, value) (self)->f->indexOfDouble(self, value)
   7918 #define indexOfDoubleG indexOfDoubleO
   7919 
   7920 #define indexOfIntO(self, value) (self)->f->indexOfInt(self, value)
   7921 #define indexOfIntG indexOfIntO
   7922 
   7923 #define indexOfSO(self, string) (self)->f->indexOfS(self, string)
   7924 #define indexOfSG indexOfSO
   7925 
   7926 #define indexOfCharO(self, c) (self)->f->indexOfChar(self, c)
   7927 #define indexOfCharG indexOfCharO
   7928 
   7929 #define indexOfDictO(self, dict) (self)->f->indexOfDict(self, dict)
   7930 #define indexOfDictG indexOfDictO
   7931 
   7932 #define indexOfArrayO(self, array) (self)->f->indexOfArray(self, array)
   7933 #define indexOfArrayG indexOfArrayO
   7934 
   7935 #define indexOfArraycO(self, array) (self)->f->indexOfArrayc(self, array)
   7936 #define indexOfArraycG indexOfArraycO
   7937 
   7938 #define indexOfCArraycO(self, array) (self)->f->indexOfCArrayc(self, array)
   7939 #define indexOfCArraycG indexOfCArraycO
   7940 
   7941 #define indexOfSmallBoolO(self, value) (self)->f->indexOfSmallBool(self, value)
   7942 #define indexOfSmallBoolG indexOfSmallBoolO
   7943 
   7944 #define indexOfSmallBytesO(self, value) (self)->f->indexOfSmallBytes(self, value)
   7945 #define indexOfSmallBytesG indexOfSmallBytesO
   7946 
   7947 #define indexOfSmallDoubleO(self, value) (self)->f->indexOfSmallDouble(self, value)
   7948 #define indexOfSmallDoubleG indexOfSmallDoubleO
   7949 
   7950 #define indexOfSmallIntO(self, value) (self)->f->indexOfSmallInt(self, value)
   7951 #define indexOfSmallIntG indexOfSmallIntO
   7952 
   7953 #define binarySearchUndefinedO(self, u) (self)->f->binarySearchUndefined(self, u)
   7954 #define binarySearchUndefinedG binarySearchUndefinedO
   7955 
   7956 #define binarySearchBoolO(self, value) (self)->f->binarySearchBool(self, value)
   7957 #define binarySearchBoolG binarySearchBoolO
   7958 
   7959 #define binarySearchDoubleO(self, value) (self)->f->binarySearchDouble(self, value)
   7960 #define binarySearchDoubleG binarySearchDoubleO
   7961 
   7962 #define binarySearchIntO(self, value) (self)->f->binarySearchInt(self, value)
   7963 #define binarySearchIntG binarySearchIntO
   7964 
   7965 #define binarySearchSO(self, string) (self)->f->binarySearchS(self, string)
   7966 #define binarySearchSG binarySearchSO
   7967 
   7968 #define binarySearchCharO(self, c) (self)->f->binarySearchChar(self, c)
   7969 #define binarySearchCharG binarySearchCharO
   7970 
   7971 #define binarySearchDictO(self, dict) (self)->f->binarySearchDict(self, dict)
   7972 #define binarySearchDictG binarySearchDictO
   7973 
   7974 #define binarySearchArrayO(self, array) (self)->f->binarySearchArray(self, array)
   7975 #define binarySearchArrayG binarySearchArrayO
   7976 
   7977 #define binarySearchArraycO(self, array) (self)->f->binarySearchArrayc(self, array)
   7978 #define binarySearchArraycG binarySearchArraycO
   7979 
   7980 #define binarySearchCArraycO(self, array) (self)->f->binarySearchCArrayc(self, array)
   7981 #define binarySearchCArraycG binarySearchCArraycO
   7982 
   7983 #define binarySearchSmallBoolO(self, value) (self)->f->binarySearchSmallBool(self, value)
   7984 #define binarySearchSmallBoolG binarySearchSmallBoolO
   7985 
   7986 #define binarySearchSmallBytesO(self, value) (self)->f->binarySearchSmallBytes(self, value)
   7987 #define binarySearchSmallBytesG binarySearchSmallBytesO
   7988 
   7989 #define binarySearchSmallDoubleO(self, value) (self)->f->binarySearchSmallDouble(self, value)
   7990 #define binarySearchSmallDoubleG binarySearchSmallDoubleO
   7991 
   7992 #define binarySearchSmallIntO(self, value) (self)->f->binarySearchSmallInt(self, value)
   7993 #define binarySearchSmallIntG binarySearchSmallIntO
   7994 
   7995 #define binarySearchSmallStringO(self, string) (self)->f->binarySearchSmallString(self, string)
   7996 #define binarySearchSmallStringG binarySearchSmallStringO
   7997 
   7998 #define icHasSO(self, string) (self)->f->icHasS(self, string)
   7999 #define icHasSG icHasSO
   8000 
   8001 #define icHasCharO(self, c) (self)->f->icHasChar(self, c)
   8002 #define icHasCharG icHasCharO
   8003 
   8004 #define icHasDictO(self, dict) (self)->f->icHasDict(self, dict)
   8005 #define icHasDictG icHasDictO
   8006 
   8007 #define icHasArrayO(self, array) (self)->f->icHasArray(self, array)
   8008 #define icHasArrayG icHasArrayO
   8009 
   8010 #define icHasArraycO(self, array) (self)->f->icHasArrayc(self, array)
   8011 #define icHasArraycG icHasArraycO
   8012 
   8013 #define icHasCArraycO(self, array) (self)->f->icHasCArrayc(self, array)
   8014 #define icHasCArraycG icHasCArraycO
   8015 
   8016 #define icIndexOfSO(self, string) (self)->f->icIndexOfS(self, string)
   8017 #define icIndexOfSG icIndexOfSO
   8018 
   8019 #define icIndexOfCharO(self, c) (self)->f->icIndexOfChar(self, c)
   8020 #define icIndexOfCharG icIndexOfCharO
   8021 
   8022 #define icIndexOfDictO(self, dict) (self)->f->icIndexOfDict(self, dict)
   8023 #define icIndexOfDictG icIndexOfDictO
   8024 
   8025 #define icIndexOfArrayO(self, array) (self)->f->icIndexOfArray(self, array)
   8026 #define icIndexOfArrayG icIndexOfArrayO
   8027 
   8028 #define icIndexOfArraycO(self, array) (self)->f->icIndexOfArrayc(self, array)
   8029 #define icIndexOfArraycG icIndexOfArraycO
   8030 
   8031 #define icIndexOfCArraycO(self, array) (self)->f->icIndexOfCArrayc(self, array)
   8032 #define icIndexOfCArraycG icIndexOfCArraycO
   8033 
   8034 #define icBinarySearchSO(self, string) (self)->f->icBinarySearchS(self, string)
   8035 #define icBinarySearchSG icBinarySearchSO
   8036 
   8037 #define icBinarySearchCharO(self, c) (self)->f->icBinarySearchChar(self, c)
   8038 #define icBinarySearchCharG icBinarySearchCharO
   8039 
   8040 #define icBinarySearchDictO(self, dict) (self)->f->icBinarySearchDict(self, dict)
   8041 #define icBinarySearchDictG icBinarySearchDictO
   8042 
   8043 #define icBinarySearchArrayO(self, array) (self)->f->icBinarySearchArray(self, array)
   8044 #define icBinarySearchArrayG icBinarySearchArrayO
   8045 
   8046 #define icBinarySearchArraycO(self, array) (self)->f->icBinarySearchArrayc(self, array)
   8047 #define icBinarySearchArraycG icBinarySearchArraycO
   8048 
   8049 #define icBinarySearchCArraycO(self, array) (self)->f->icBinarySearchCArrayc(self, array)
   8050 #define icBinarySearchCArraycG icBinarySearchCArraycO
   8051 
   8052 #define icBinarySearchSmallStringO(self, string) (self)->f->icBinarySearchSmallString(self, string)
   8053 #define icBinarySearchSmallStringG icBinarySearchSmallStringO
   8054 
   8055 #define forEachO(self, closure, funcElem) (self)->f->forEach(self, closure, funcElem)
   8056 #define forEachG forEachO
   8057 
   8058 #define enumerateO(self, closure, funcElem) (self)->f->enumerate(self, closure, funcElem)
   8059 #define enumerateG enumerateO
   8060 
   8061 #define iterStartO(self) (self)->f->iterStart(self)
   8062 #define iterStartG iterStartO
   8063 
   8064 #define iterStartLastO(self) (self)->f->iterStartLast(self)
   8065 #define iterStartLastG iterStartLastO
   8066 
   8067 #define iterStartFromO(self, index) (self)->f->iterStartFrom(self, index)
   8068 #define iterStartFromG iterStartFromO
   8069 
   8070 #define iterStartFromStepO(self, index, step) (self)->f->iterStartFromStep(self, index, step)
   8071 #define iterStartFromStepG iterStartFromStepO
   8072 
   8073 #define iterNextO(self) (self)->f->iterNext(self)
   8074 #define iterNextG iterNextO
   8075 
   8076 #define iterElementO(self) (self)->f->iterElement(self)
   8077 #define iterElementG iterElementO
   8078 
   8079 #define iterIndexO(self) (self)->f->iterIndex(self)
   8080 #define iterIndexG iterIndexO
   8081 
   8082 #define iterStepO(self) (self)->f->iterStep(self)
   8083 #define iterStepG iterStepO
   8084 
   8085 #define joinCharO(self, c) (self)->f->joinChar(self, c)
   8086 #define joinCharG joinCharO
   8087 
   8088 #define joinSmallStringO(self, delim) (self)->f->joinSmallString(self, delim)
   8089 #define joinSmallStringG joinSmallStringO
   8090 
   8091 #define joinCharSO(self, c) (self)->f->joinCharS(self, c)
   8092 #define joinCharSG joinCharSO
   8093 
   8094 #define joinSmallJsonSO(self, delim) (self)->f->joinSmallJsonS(self, delim)
   8095 #define joinSmallJsonSG joinSmallJsonSO
   8096 
   8097 #define joinSmallStringSO(self, delim) (self)->f->joinSmallStringS(self, delim)
   8098 #define joinSmallStringSG joinSmallStringSO
   8099 
   8100 #define zipSmallJsonSmallJsonO(self, array1, array2) (self)->f->zipSmallJsonSmallJson(self, array1, array2)
   8101 #define zipSmallJsonSmallJsonG zipSmallJsonSmallJsonO
   8102 
   8103 #define zipSmallJsonCharO(self, array1, array2) (self)->f->zipSmallJsonChar(self, array1, array2)
   8104 #define zipSmallJsonCharG zipSmallJsonCharO
   8105 
   8106 #define zipSmallJsonCCharO(self, array1, array2) (self)->f->zipSmallJsonCChar(self, array1, array2)
   8107 #define zipSmallJsonCCharG zipSmallJsonCCharO
   8108 
   8109 #define zipArrayO(self, array1, array2) (self)->f->zipArray(self, array1, array2)
   8110 #define zipArrayG zipArrayO
   8111 
   8112 #define zipCArrayO(self, array1, array2) (self)->f->zipCArray(self, array1, array2)
   8113 #define zipCArrayG zipCArrayO
   8114 
   8115 #define zipCharO(self, array1, array2) (self)->f->zipChar(self, array1, array2)
   8116 #define zipCharG zipCharO
   8117 
   8118 #define zipCCharO(self, array1, array2) (self)->f->zipCChar(self, array1, array2)
   8119 #define zipCCharG zipCCharO
   8120 
   8121 #define zipArrayCharO(self, array1, array2) (self)->f->zipArrayChar(self, array1, array2)
   8122 #define zipArrayCharG zipArrayCharO
   8123 
   8124 #define zipCArrayCharO(self, array1, array2) (self)->f->zipCArrayChar(self, array1, array2)
   8125 #define zipCArrayCharG zipCArrayCharO
   8126 
   8127 #define zipArrayCCharO(self, array1, array2) (self)->f->zipArrayCChar(self, array1, array2)
   8128 #define zipArrayCCharG zipArrayCCharO
   8129 
   8130 #define zipCArrayCCharO(self, array1, array2) (self)->f->zipCArrayCChar(self, array1, array2)
   8131 #define zipCArrayCCharG zipCArrayCCharO
   8132 
   8133 #define readTextSmallStringO(self, filePath) (self)->f->readTextSmallString(self, filePath)
   8134 #define readTextSmallStringG readTextSmallStringO
   8135 
   8136 #define readStreamO(self, fp) (self)->f->readStream(self, fp)
   8137 #define readStreamG readStreamO
   8138 
   8139 #define writeTextSmallStringO(self, filePath) (self)->f->writeTextSmallString(self, filePath)
   8140 #define writeTextSmallStringG writeTextSmallStringO
   8141 
   8142 #define writeStreamO(self, fp) (self)->f->writeStream(self, fp)
   8143 #define writeStreamG writeStreamO
   8144 
   8145 #define appendTextO(self, filePath) (self)->f->appendText(self, filePath)
   8146 #define appendTextG appendTextO
   8147 
   8148 #define appendTextSmallStringO(self, filePath) (self)->f->appendTextSmallString(self, filePath)
   8149 #define appendTextSmallStringG appendTextSmallStringO
   8150 
   8151 #define typeStringO(self, index) (self)->f->typeString(self, index)
   8152 #define typeStringG typeStringO
   8153 
   8154 #define typeSmallStringO(self, index) (self)->f->typeSmallString(self, index)
   8155 #define typeSmallStringG typeSmallStringO
   8156 
   8157 #define typeO(self, index) (self)->f->type(self, index)
   8158 #define typeG typeO
   8159 
   8160 #define typeStringsO(self) (self)->f->typeStrings(self)
   8161 #define typeStringsG typeStringsO
   8162 
   8163 #define typeSmallStringsO(self) (self)->f->typeSmallStrings(self)
   8164 #define typeSmallStringsG typeSmallStringsO
   8165 
   8166 #define typesO(self) (self)->f->types(self)
   8167 #define typesG typesO
   8168 
   8169 #define isETypeO(self, index, type) (self)->f->isEType(self, index, type)
   8170 #define isETypeG isETypeO
   8171 
   8172 #define isEUndefinedO(self, index) (self)->f->isEUndefined(self, index)
   8173 #define isEUndefinedG isEUndefinedO
   8174 
   8175 #define isEBoolO(self, index) (self)->f->isEBool(self, index)
   8176 #define isEBoolG isEBoolO
   8177 
   8178 #define isEContainerO(self, index) (self)->f->isEContainer(self, index)
   8179 #define isEContainerG isEContainerO
   8180 
   8181 #define isEDictO(self, index) (self)->f->isEDict(self, index)
   8182 #define isEDictG isEDictO
   8183 
   8184 #define isEDoubleO(self, index) (self)->f->isEDouble(self, index)
   8185 #define isEDoubleG isEDoubleO
   8186 
   8187 #define isEIntO(self, index) (self)->f->isEInt(self, index)
   8188 #define isEIntG isEIntO
   8189 
   8190 #define isEStringO(self, index) (self)->f->isEString(self, index)
   8191 #define isEStringG isEStringO
   8192 
   8193 #define isEFaststringO(self, index) (self)->f->isEFaststring(self, index)
   8194 #define isEFaststringG isEFaststringO
   8195 
   8196 #define isEArrayO(self, index) (self)->f->isEArray(self, index)
   8197 #define isEArrayG isEArrayO
   8198 
   8199 #define isEBytesO(self, index) (self)->f->isEBytes(self, index)
   8200 #define isEBytesG isEBytesO
   8201 
   8202 #define areAllETypeO(self, type) (self)->f->areAllEType(self, type)
   8203 #define areAllETypeG areAllETypeO
   8204 
   8205 #define areAllEUndefinedO(self) (self)->f->areAllEUndefined(self)
   8206 #define areAllEUndefinedG areAllEUndefinedO
   8207 
   8208 #define areAllEBoolO(self) (self)->f->areAllEBool(self)
   8209 #define areAllEBoolG areAllEBoolO
   8210 
   8211 #define areAllEContainerO(self) (self)->f->areAllEContainer(self)
   8212 #define areAllEContainerG areAllEContainerO
   8213 
   8214 #define areAllEDictO(self) (self)->f->areAllEDict(self)
   8215 #define areAllEDictG areAllEDictO
   8216 
   8217 #define areAllEDoubleO(self) (self)->f->areAllEDouble(self)
   8218 #define areAllEDoubleG areAllEDoubleO
   8219 
   8220 #define areAllEIntO(self) (self)->f->areAllEInt(self)
   8221 #define areAllEIntG areAllEIntO
   8222 
   8223 #define areAllEStringO(self) (self)->f->areAllEString(self)
   8224 #define areAllEStringG areAllEStringO
   8225 
   8226 #define areAllEFaststringO(self) (self)->f->areAllEFaststring(self)
   8227 #define areAllEFaststringG areAllEFaststringO
   8228 
   8229 #define areAllEArrayO(self) (self)->f->areAllEArray(self)
   8230 #define areAllEArrayG areAllEArrayO
   8231 
   8232 #define areAllEBytesO(self) (self)->f->areAllEBytes(self)
   8233 #define areAllEBytesG areAllEBytesO
   8234 
   8235 #define setInt64O(self, p2) (self)->f->setInt64(self, p2)
   8236 #define setInt64G setInt64O
   8237 
   8238 #define setInt32O(self, p2) (self)->f->setInt32(self, p2)
   8239 #define setInt32G setInt32O
   8240 
   8241 #define setUint32O(self, p2) (self)->f->setUint32(self, p2)
   8242 #define setUint32G setUint32O
   8243 
   8244 #define setUint64O(self, p2) (self)->f->setUint64(self, p2)
   8245 #define setUint64G setUint64O
   8246 
   8247 #define equalCharO(self, p2) (self)->f->equalChar(self, p2)
   8248 #define equalCharG equalCharO
   8249 
   8250 #define equalBoolO(self, p2) (self)->f->equalBool(self, p2)
   8251 #define equalBoolG equalBoolO
   8252 
   8253 #define equalDoubleO(self, p2) (self)->f->equalDouble(self, p2)
   8254 #define equalDoubleG equalDoubleO
   8255 
   8256 #define equalInt64O(self, p2) (self)->f->equalInt64(self, p2)
   8257 #define equalInt64G equalInt64O
   8258 
   8259 #define equalInt32O(self, p2) (self)->f->equalInt32(self, p2)
   8260 #define equalInt32G equalInt32O
   8261 
   8262 #define equalUint32O(self, p2) (self)->f->equalUint32(self, p2)
   8263 #define equalUint32G equalUint32O
   8264 
   8265 #define equalUint64O(self, p2) (self)->f->equalUint64(self, p2)
   8266 #define equalUint64G equalUint64O
   8267 
   8268 #define equalSmallDoubleO(self, p2) (self)->f->equalSmallDouble(self, p2)
   8269 #define equalSmallDoubleG equalSmallDoubleO
   8270 
   8271 #define equalSmallIntO(self, p2) (self)->f->equalSmallInt(self, p2)
   8272 #define equalSmallIntG equalSmallIntO
   8273 
   8274 #define equalSmallStringO(self, p2) (self)->f->equalSmallString(self, p2)
   8275 #define equalSmallStringG equalSmallStringO
   8276 
   8277 #define appendFileSmallStringO(self, filePath) (self)->f->appendFileSmallString(self, filePath)
   8278 #define appendFileSmallStringG appendFileSmallStringO
   8279 
   8280 #define equalSmallBoolO(self, value) (self)->f->equalSmallBool(self, value)
   8281 #define equalSmallBoolG equalSmallBoolO
   8282 
   8283 #define setClassDataFreeO(self, free) (self)->f->setClassDataFree(self, free)
   8284 #define setClassDataFreeG setClassDataFreeO
   8285 
   8286 #define setObjectDataFreeO(self, free) (self)->f->setObjectDataFree(self, free)
   8287 #define setObjectDataFreeG setObjectDataFreeO
   8288 
   8289 #define setClassDataToStringO(self, toString) (self)->f->setClassDataToString(self, toString)
   8290 #define setClassDataToStringG setClassDataToStringO
   8291 
   8292 #define setObjectDataToStringO(self, toString) (self)->f->setObjectDataToString(self, toString)
   8293 #define setObjectDataToStringG setObjectDataToStringO
   8294 
   8295 #define setClassDataDuplicateO(self, duplicate) (self)->f->setClassDataDuplicate(self, duplicate)
   8296 #define setClassDataDuplicateG setClassDataDuplicateO
   8297 
   8298 #define setObjectDataDuplicateO(self, duplicate) (self)->f->setObjectDataDuplicate(self, duplicate)
   8299 #define setObjectDataDuplicateG setObjectDataDuplicateO
   8300 
   8301 #define setCharO(self, key, c) (self)->f->setChar(self, key, c)
   8302 #define setCharG setCharO
   8303 
   8304 #define setArraycO(self, key, array) (self)->f->setArrayc(self, key, array)
   8305 #define setArraycG setArraycO
   8306 
   8307 #define setCArraycO(self, key, array) (self)->f->setCArrayc(self, key, array)
   8308 #define setCArraycG setCArraycO
   8309 
   8310 #define setKCharO(self, key, value) (self)->f->setKChar(self, key, value)
   8311 #define setKCharG setKCharO
   8312 
   8313 #define setUndefinedKCharO(self, key) (self)->f->setUndefinedKChar(self, key)
   8314 #define setUndefinedKCharG setUndefinedKCharO
   8315 
   8316 #define setBoolKCharO(self, key, value) (self)->f->setBoolKChar(self, key, value)
   8317 #define setBoolKCharG setBoolKCharO
   8318 
   8319 #define setDoubleKCharO(self, key, value) (self)->f->setDoubleKChar(self, key, value)
   8320 #define setDoubleKCharG setDoubleKCharO
   8321 
   8322 #define setIntKCharO(self, key, value) (self)->f->setIntKChar(self, key, value)
   8323 #define setIntKCharG setIntKCharO
   8324 
   8325 #define setSKCharO(self, key, string) (self)->f->setSKChar(self, key, string)
   8326 #define setSKCharG setSKCharO
   8327 
   8328 #define setCharKCharO(self, key, c) (self)->f->setCharKChar(self, key, c)
   8329 #define setCharKCharG setCharKCharO
   8330 
   8331 #define setDictKCharO(self, key, dict) (self)->f->setDictKChar(self, key, dict)
   8332 #define setDictKCharG setDictKCharO
   8333 
   8334 #define setArrayKCharO(self, key, array) (self)->f->setArrayKChar(self, key, array)
   8335 #define setArrayKCharG setArrayKCharO
   8336 
   8337 #define setArraycKCharO(self, key, array) (self)->f->setArraycKChar(self, key, array)
   8338 #define setArraycKCharG setArraycKCharO
   8339 
   8340 #define setCArraycKCharO(self, key, array) (self)->f->setCArraycKChar(self, key, array)
   8341 #define setCArraycKCharG setCArraycKCharO
   8342 
   8343 #define setSmallBoolKCharO(self, key, value) (self)->f->setSmallBoolKChar(self, key, value)
   8344 #define setSmallBoolKCharG setSmallBoolKCharO
   8345 
   8346 #define setSmallBytesKCharO(self, key, value) (self)->f->setSmallBytesKChar(self, key, value)
   8347 #define setSmallBytesKCharG setSmallBytesKCharO
   8348 
   8349 #define setSmallDoubleKCharO(self, key, value) (self)->f->setSmallDoubleKChar(self, key, value)
   8350 #define setSmallDoubleKCharG setSmallDoubleKCharO
   8351 
   8352 #define setSmallIntKCharO(self, key, value) (self)->f->setSmallIntKChar(self, key, value)
   8353 #define setSmallIntKCharG setSmallIntKCharO
   8354 
   8355 #define setSmallJsonKCharO(self, key, value) (self)->f->setSmallJsonKChar(self, key, value)
   8356 #define setSmallJsonKCharG setSmallJsonKCharO
   8357 
   8358 #define setSmallStringKCharO(self, key, string) (self)->f->setSmallStringKChar(self, key, string)
   8359 #define setSmallStringKCharG setSmallStringKCharO
   8360 
   8361 #define setSmallContainerKCharO(self, key, container) (self)->f->setSmallContainerKChar(self, key, container)
   8362 #define setSmallContainerKCharG setSmallContainerKCharO
   8363 
   8364 #define setNFreeArraycO(self, key, array) (self)->f->setNFreeArrayc(self, key, array)
   8365 #define setNFreeArraycG setNFreeArraycO
   8366 
   8367 #define setNFreeSmallBytesO(self, key, value) (self)->f->setNFreeSmallBytes(self, key, value)
   8368 #define setNFreeSmallBytesG setNFreeSmallBytesO
   8369 
   8370 #define setNFreeKCharO(self, key, value) (self)->f->setNFreeKChar(self, key, value)
   8371 #define setNFreeKCharG setNFreeKCharO
   8372 
   8373 #define setNFreeUndefinedKCharO(self, key, u) (self)->f->setNFreeUndefinedKChar(self, key, u)
   8374 #define setNFreeUndefinedKCharG setNFreeUndefinedKCharO
   8375 
   8376 #define setNFreeSKCharO(self, key, string) (self)->f->setNFreeSKChar(self, key, string)
   8377 #define setNFreeSKCharG setNFreeSKCharO
   8378 
   8379 #define setNFreeDictKCharO(self, key, dict) (self)->f->setNFreeDictKChar(self, key, dict)
   8380 #define setNFreeDictKCharG setNFreeDictKCharO
   8381 
   8382 #define setNFreeArrayKCharO(self, key, array) (self)->f->setNFreeArrayKChar(self, key, array)
   8383 #define setNFreeArrayKCharG setNFreeArrayKCharO
   8384 
   8385 #define setNFreeArraycKCharO(self, key, array) (self)->f->setNFreeArraycKChar(self, key, array)
   8386 #define setNFreeArraycKCharG setNFreeArraycKCharO
   8387 
   8388 #define setNFreeSmallBoolKCharO(self, key, value) (self)->f->setNFreeSmallBoolKChar(self, key, value)
   8389 #define setNFreeSmallBoolKCharG setNFreeSmallBoolKCharO
   8390 
   8391 #define setNFreeSmallBytesKCharO(self, key, value) (self)->f->setNFreeSmallBytesKChar(self, key, value)
   8392 #define setNFreeSmallBytesKCharG setNFreeSmallBytesKCharO
   8393 
   8394 #define setNFreeSmallDoubleKCharO(self, key, value) (self)->f->setNFreeSmallDoubleKChar(self, key, value)
   8395 #define setNFreeSmallDoubleKCharG setNFreeSmallDoubleKCharO
   8396 
   8397 #define setNFreeSmallIntKCharO(self, key, value) (self)->f->setNFreeSmallIntKChar(self, key, value)
   8398 #define setNFreeSmallIntKCharG setNFreeSmallIntKCharO
   8399 
   8400 #define setNFreeSmallJsonKCharO(self, key, value) (self)->f->setNFreeSmallJsonKChar(self, key, value)
   8401 #define setNFreeSmallJsonKCharG setNFreeSmallJsonKCharO
   8402 
   8403 #define setNFreeSmallStringKCharO(self, key, string) (self)->f->setNFreeSmallStringKChar(self, key, string)
   8404 #define setNFreeSmallStringKCharG setNFreeSmallStringKCharO
   8405 
   8406 #define setNFreeSmallContainerKCharO(self, key, container) (self)->f->setNFreeSmallContainerKChar(self, key, container)
   8407 #define setNFreeSmallContainerKCharG setNFreeSmallContainerKCharO
   8408 
   8409 #define setPSmallJsonO(self, key, json) (self)->f->setPSmallJson(self, key, json)
   8410 #define setPSmallJsonG setPSmallJsonO
   8411 
   8412 #define setNFreePSmallJsonO(self, key, json) (self)->f->setNFreePSmallJson(self, key, json)
   8413 #define setNFreePSmallJsonG setNFreePSmallJsonO
   8414 
   8415 #define setPArrayKCharO(self, key, array) (self)->f->setPArrayKChar(self, key, array)
   8416 #define setPArrayKCharG setPArrayKCharO
   8417 
   8418 #define setPDictKCharO(self, key, dict) (self)->f->setPDictKChar(self, key, dict)
   8419 #define setPDictKCharG setPDictKCharO
   8420 
   8421 #define setPSmallJsonKCharO(self, key, json) (self)->f->setPSmallJsonKChar(self, key, json)
   8422 #define setPSmallJsonKCharG setPSmallJsonKCharO
   8423 
   8424 #define setPSmallStringKCharO(self, key, string) (self)->f->setPSmallStringKChar(self, key, string)
   8425 #define setPSmallStringKCharG setPSmallStringKCharO
   8426 
   8427 #define setNFreePArrayKCharO(self, key, array) (self)->f->setNFreePArrayKChar(self, key, array)
   8428 #define setNFreePArrayKCharG setNFreePArrayKCharO
   8429 
   8430 #define setNFreePDictKCharO(self, key, dict) (self)->f->setNFreePDictKChar(self, key, dict)
   8431 #define setNFreePDictKCharG setNFreePDictKCharO
   8432 
   8433 #define setNFreePSmallJsonKCharO(self, key, json) (self)->f->setNFreePSmallJsonKChar(self, key, json)
   8434 #define setNFreePSmallJsonKCharG setNFreePSmallJsonKCharO
   8435 
   8436 #define setNFreePSmallStringKCharO(self, key, string) (self)->f->setNFreePSmallStringKChar(self, key, string)
   8437 #define setNFreePSmallStringKCharG setNFreePSmallStringKCharO
   8438 
   8439 #define getSmallBytesO(self, key) (self)->f->getSmallBytes(self, key)
   8440 #define getSmallBytesG getSmallBytesO
   8441 
   8442 #define getKCharO(self, key) (self)->f->getKChar(self, key)
   8443 #define getKCharG getKCharO
   8444 
   8445 #define getUndefinedKCharO(self, key) (self)->f->getUndefinedKChar(self, key)
   8446 #define getUndefinedKCharG getUndefinedKCharO
   8447 
   8448 #define getBoolKCharO(self, key) (self)->f->getBoolKChar(self, key)
   8449 #define getBoolKCharG getBoolKCharO
   8450 
   8451 #define getBoolPKCharO(self, key) (self)->f->getBoolPKChar(self, key)
   8452 #define getBoolPKCharG getBoolPKCharO
   8453 
   8454 #define getDoubleKCharO(self, key) (self)->f->getDoubleKChar(self, key)
   8455 #define getDoubleKCharG getDoubleKCharO
   8456 
   8457 #define getDoublePKCharO(self, key) (self)->f->getDoublePKChar(self, key)
   8458 #define getDoublePKCharG getDoublePKCharO
   8459 
   8460 #define getIntKCharO(self, key) (self)->f->getIntKChar(self, key)
   8461 #define getIntKCharG getIntKCharO
   8462 
   8463 #define getIntPKCharO(self, key) (self)->f->getIntPKChar(self, key)
   8464 #define getIntPKCharG getIntPKCharO
   8465 
   8466 #define getInt32KCharO(self, key) (self)->f->getInt32KChar(self, key)
   8467 #define getInt32KCharG getInt32KCharO
   8468 
   8469 #define getInt32PKCharO(self, key) (self)->f->getInt32PKChar(self, key)
   8470 #define getInt32PKCharG getInt32PKCharO
   8471 
   8472 #define getUintKCharO(self, key) (self)->f->getUintKChar(self, key)
   8473 #define getUintKCharG getUintKCharO
   8474 
   8475 #define getUintPKCharO(self, key) (self)->f->getUintPKChar(self, key)
   8476 #define getUintPKCharG getUintPKCharO
   8477 
   8478 #define getUint32KCharO(self, key) (self)->f->getUint32KChar(self, key)
   8479 #define getUint32KCharG getUint32KCharO
   8480 
   8481 #define getUint32PKCharO(self, key) (self)->f->getUint32PKChar(self, key)
   8482 #define getUint32PKCharG getUint32PKCharO
   8483 
   8484 #define getSKCharO(self, key) (self)->f->getSKChar(self, key)
   8485 #define getSKCharG getSKCharO
   8486 
   8487 #define getDictKCharO(self, key) (self)->f->getDictKChar(self, key)
   8488 #define getDictKCharG getDictKCharO
   8489 
   8490 #define getArrayKCharO(self, key) (self)->f->getArrayKChar(self, key)
   8491 #define getArrayKCharG getArrayKCharO
   8492 
   8493 #define getSmallBoolKCharO(self, key) (self)->f->getSmallBoolKChar(self, key)
   8494 #define getSmallBoolKCharG getSmallBoolKCharO
   8495 
   8496 #define getSmallBytesKCharO(self, key) (self)->f->getSmallBytesKChar(self, key)
   8497 #define getSmallBytesKCharG getSmallBytesKCharO
   8498 
   8499 #define getSmallDoubleKCharO(self, key) (self)->f->getSmallDoubleKChar(self, key)
   8500 #define getSmallDoubleKCharG getSmallDoubleKCharO
   8501 
   8502 #define getSmallIntKCharO(self, key) (self)->f->getSmallIntKChar(self, key)
   8503 #define getSmallIntKCharG getSmallIntKCharO
   8504 
   8505 #define getSmallJsonKCharO(self, key) (self)->f->getSmallJsonKChar(self, key)
   8506 #define getSmallJsonKCharG getSmallJsonKCharO
   8507 
   8508 #define getSmallStringKCharO(self, key) (self)->f->getSmallStringKChar(self, key)
   8509 #define getSmallStringKCharG getSmallStringKCharO
   8510 
   8511 #define getVoidKCharO(self, key) (self)->f->getVoidKChar(self, key)
   8512 #define getVoidKCharG getVoidKCharO
   8513 
   8514 #define getSmallContainerKCharO(self, key) (self)->f->getSmallContainerKChar(self, key)
   8515 #define getSmallContainerKCharG getSmallContainerKCharO
   8516 
   8517 #define getNDupSmallBytesO(self, key) (self)->f->getNDupSmallBytes(self, key)
   8518 #define getNDupSmallBytesG getNDupSmallBytesO
   8519 
   8520 #define getNDupKCharO(self, key) (self)->f->getNDupKChar(self, key)
   8521 #define getNDupKCharG getNDupKCharO
   8522 
   8523 #define getNDupUndefinedKCharO(self, key) (self)->f->getNDupUndefinedKChar(self, key)
   8524 #define getNDupUndefinedKCharG getNDupUndefinedKCharO
   8525 
   8526 #define getNDupBoolKCharO(self, key) (self)->f->getNDupBoolKChar(self, key)
   8527 #define getNDupBoolKCharG getNDupBoolKCharO
   8528 
   8529 #define getNDupDoubleKCharO(self, key) (self)->f->getNDupDoubleKChar(self, key)
   8530 #define getNDupDoubleKCharG getNDupDoubleKCharO
   8531 
   8532 #define getNDupIntKCharO(self, key) (self)->f->getNDupIntKChar(self, key)
   8533 #define getNDupIntKCharG getNDupIntKCharO
   8534 
   8535 #define getNDupInt32KCharO(self, key) (self)->f->getNDupInt32KChar(self, key)
   8536 #define getNDupInt32KCharG getNDupInt32KCharO
   8537 
   8538 #define getNDupUintKCharO(self, key) (self)->f->getNDupUintKChar(self, key)
   8539 #define getNDupUintKCharG getNDupUintKCharO
   8540 
   8541 #define getNDupUint32KCharO(self, key) (self)->f->getNDupUint32KChar(self, key)
   8542 #define getNDupUint32KCharG getNDupUint32KCharO
   8543 
   8544 #define getNDupSKCharO(self, key) (self)->f->getNDupSKChar(self, key)
   8545 #define getNDupSKCharG getNDupSKCharO
   8546 
   8547 #define getNDupDictKCharO(self, key) (self)->f->getNDupDictKChar(self, key)
   8548 #define getNDupDictKCharG getNDupDictKCharO
   8549 
   8550 #define getNDupArrayKCharO(self, key) (self)->f->getNDupArrayKChar(self, key)
   8551 #define getNDupArrayKCharG getNDupArrayKCharO
   8552 
   8553 #define getNDupSmallBoolKCharO(self, key) (self)->f->getNDupSmallBoolKChar(self, key)
   8554 #define getNDupSmallBoolKCharG getNDupSmallBoolKCharO
   8555 
   8556 #define getNDupSmallBytesKCharO(self, key) (self)->f->getNDupSmallBytesKChar(self, key)
   8557 #define getNDupSmallBytesKCharG getNDupSmallBytesKCharO
   8558 
   8559 #define getNDupSmallDoubleKCharO(self, key) (self)->f->getNDupSmallDoubleKChar(self, key)
   8560 #define getNDupSmallDoubleKCharG getNDupSmallDoubleKCharO
   8561 
   8562 #define getNDupSmallIntKCharO(self, key) (self)->f->getNDupSmallIntKChar(self, key)
   8563 #define getNDupSmallIntKCharG getNDupSmallIntKCharO
   8564 
   8565 #define getNDupSmallJsonKCharO(self, key) (self)->f->getNDupSmallJsonKChar(self, key)
   8566 #define getNDupSmallJsonKCharG getNDupSmallJsonKCharO
   8567 
   8568 #define getNDupSmallStringKCharO(self, key) (self)->f->getNDupSmallStringKChar(self, key)
   8569 #define getNDupSmallStringKCharG getNDupSmallStringKCharO
   8570 
   8571 #define getNDupVoidKCharO(self, key) (self)->f->getNDupVoidKChar(self, key)
   8572 #define getNDupVoidKCharG getNDupVoidKCharO
   8573 
   8574 #define getNDupSmallContainerKCharO(self, key) (self)->f->getNDupSmallContainerKChar(self, key)
   8575 #define getNDupSmallContainerKCharG getNDupSmallContainerKCharO
   8576 
   8577 #define delKCharO(self, key) (self)->f->delKChar(self, key)
   8578 #define delKCharG delKCharO
   8579 
   8580 #define removeKCharO(self, key) (self)->f->removeKChar(self, key)
   8581 #define removeKCharG removeKCharO
   8582 
   8583 #define hasKCharO(self, key) (self)->f->hasKChar(self, key)
   8584 #define hasKCharG hasKCharO
   8585 
   8586 #define keyByUndefinedO(self, u) (self)->f->keyByUndefined(self, u)
   8587 #define keyByUndefinedG keyByUndefinedO
   8588 
   8589 #define keyByBoolO(self, value) (self)->f->keyByBool(self, value)
   8590 #define keyByBoolG keyByBoolO
   8591 
   8592 #define keyByDoubleO(self, value) (self)->f->keyByDouble(self, value)
   8593 #define keyByDoubleG keyByDoubleO
   8594 
   8595 #define keyByIntO(self, value) (self)->f->keyByInt(self, value)
   8596 #define keyByIntG keyByIntO
   8597 
   8598 #define keyBySO(self, string) (self)->f->keyByS(self, string)
   8599 #define keyBySG keyBySO
   8600 
   8601 #define keyByCharO(self, c) (self)->f->keyByChar(self, c)
   8602 #define keyByCharG keyByCharO
   8603 
   8604 #define keyByDictO(self, dict) (self)->f->keyByDict(self, dict)
   8605 #define keyByDictG keyByDictO
   8606 
   8607 #define keyByArrayO(self, array) (self)->f->keyByArray(self, array)
   8608 #define keyByArrayG keyByArrayO
   8609 
   8610 #define keyByArraycO(self, array) (self)->f->keyByArrayc(self, array)
   8611 #define keyByArraycG keyByArraycO
   8612 
   8613 #define keyByCArraycO(self, array) (self)->f->keyByCArrayc(self, array)
   8614 #define keyByCArraycG keyByCArraycO
   8615 
   8616 #define keyBySmallBoolO(self, value) (self)->f->keyBySmallBool(self, value)
   8617 #define keyBySmallBoolG keyBySmallBoolO
   8618 
   8619 #define keyBySmallBytesO(self, value) (self)->f->keyBySmallBytes(self, value)
   8620 #define keyBySmallBytesG keyBySmallBytesO
   8621 
   8622 #define keyBySmallDoubleO(self, value) (self)->f->keyBySmallDouble(self, value)
   8623 #define keyBySmallDoubleG keyBySmallDoubleO
   8624 
   8625 #define keyBySmallIntO(self, value) (self)->f->keyBySmallInt(self, value)
   8626 #define keyBySmallIntG keyBySmallIntO
   8627 
   8628 #define keyBySmallStringO(self, string) (self)->f->keyBySmallString(self, string)
   8629 #define keyBySmallStringG keyBySmallStringO
   8630 
   8631 #define keyBySmallContainerO(self, container) (self)->f->keyBySmallContainer(self, container)
   8632 #define keyBySmallContainerG keyBySmallContainerO
   8633 
   8634 #define icKeyBySO(self, string) (self)->f->icKeyByS(self, string)
   8635 #define icKeyBySG icKeyBySO
   8636 
   8637 #define icKeyByCharO(self, c) (self)->f->icKeyByChar(self, c)
   8638 #define icKeyByCharG icKeyByCharO
   8639 
   8640 #define icKeyByDictO(self, dict) (self)->f->icKeyByDict(self, dict)
   8641 #define icKeyByDictG icKeyByDictO
   8642 
   8643 #define icKeyByArrayO(self, array) (self)->f->icKeyByArray(self, array)
   8644 #define icKeyByArrayG icKeyByArrayO
   8645 
   8646 #define icKeyByArraycO(self, array) (self)->f->icKeyByArrayc(self, array)
   8647 #define icKeyByArraycG icKeyByArraycO
   8648 
   8649 #define icKeyByCArraycO(self, array) (self)->f->icKeyByCArrayc(self, array)
   8650 #define icKeyByCArraycG icKeyByCArraycO
   8651 
   8652 #define icKeyBySmallStringO(self, string) (self)->f->icKeyBySmallString(self, string)
   8653 #define icKeyBySmallStringG icKeyBySmallStringO
   8654 
   8655 #define keysO(self) (self)->f->keys(self)
   8656 #define keysG keysO
   8657 
   8658 #define keysSmallStringO(self) (self)->f->keysSmallString(self)
   8659 #define keysSmallStringG keysSmallStringO
   8660 
   8661 #define valuesO(self) (self)->f->values(self)
   8662 #define valuesG valuesO
   8663 
   8664 #define icEqualBaseO(self, p2) (self)->f->icEqualBase(self, p2)
   8665 #define icEqualBaseG icEqualBaseO
   8666 
   8667 #define iterStartKeyO(self) (self)->f->iterStartKey(self)
   8668 #define iterStartKeyG iterStartKeyO
   8669 
   8670 #define iterNextKeyO(self) (self)->f->iterNextKey(self)
   8671 #define iterNextKeyG iterNextKeyO
   8672 
   8673 #define iterKeyO(self) (self)->f->iterKey(self)
   8674 #define iterKeyG iterKeyO
   8675 
   8676 #define zipSmallJsonVArrayO(self, keys, values) (self)->f->zipSmallJsonVArray(self, keys, values)
   8677 #define zipSmallJsonVArrayG zipSmallJsonVArrayO
   8678 
   8679 #define zipSmallJsonVCArrayO(self, keys, values) (self)->f->zipSmallJsonVCArray(self, keys, values)
   8680 #define zipSmallJsonVCArrayG zipSmallJsonVCArrayO
   8681 
   8682 #define zipArrayArrayO(self, keys, values) (self)->f->zipArrayArray(self, keys, values)
   8683 #define zipArrayArrayG zipArrayArrayO
   8684 
   8685 #define zipCArrayArrayO(self, keys, values) (self)->f->zipCArrayArray(self, keys, values)
   8686 #define zipCArrayArrayG zipCArrayArrayO
   8687 
   8688 #define zipArrayCArrayO(self, keys, values) (self)->f->zipArrayCArray(self, keys, values)
   8689 #define zipArrayCArrayG zipArrayCArrayO
   8690 
   8691 #define zipCArrayCArrayO(self, keys, values) (self)->f->zipCArrayCArray(self, keys, values)
   8692 #define zipCArrayCArrayG zipCArrayCArrayO
   8693 
   8694 #define zipVArrayO(self, keys, values) (self)->f->zipVArray(self, keys, values)
   8695 #define zipVArrayG zipVArrayO
   8696 
   8697 #define zipVCArrayO(self, keys, values) (self)->f->zipVCArray(self, keys, values)
   8698 #define zipVCArrayG zipVCArrayO
   8699 
   8700 #define toArrayO(self) (self)->f->toArray(self)
   8701 #define toArrayG toArrayO
   8702 
   8703 #define typeStringKCharO(self, key) (self)->f->typeStringKChar(self, key)
   8704 #define typeStringKCharG typeStringKCharO
   8705 
   8706 #define typeSmallStringKCharO(self, key) (self)->f->typeSmallStringKChar(self, key)
   8707 #define typeSmallStringKCharG typeSmallStringKCharO
   8708 
   8709 #define typeKCharO(self, key) (self)->f->typeKChar(self, key)
   8710 #define typeKCharG typeKCharO
   8711 
   8712 #define equalChaO(self, p2) (self)->f->equalCha(self, p2)
   8713 #define equalChaG equalChaO
   8714 
   8715 #define getTopTypeO(self) (self)->f->getTopType(self)
   8716 #define getTopTypeG getTopTypeO
   8717 
   8718 #define setTypeUndefinedO(self) (self)->f->setTypeUndefined(self)
   8719 #define setTypeUndefinedG setTypeUndefinedO
   8720 
   8721 #define setTypeBoolO(self) (self)->f->setTypeBool(self)
   8722 #define setTypeBoolG setTypeBoolO
   8723 
   8724 #define setTypeDoubleO(self) (self)->f->setTypeDouble(self)
   8725 #define setTypeDoubleG setTypeDoubleO
   8726 
   8727 #define setTypeIntO(self) (self)->f->setTypeInt(self)
   8728 #define setTypeIntG setTypeIntO
   8729 
   8730 #define setTypeStringO(self) (self)->f->setTypeString(self)
   8731 #define setTypeStringG setTypeStringO
   8732 
   8733 #define setTypeDictO(self) (self)->f->setTypeDict(self)
   8734 #define setTypeDictG setTypeDictO
   8735 
   8736 #define setTypeArrayO(self) (self)->f->setTypeArray(self)
   8737 #define setTypeArrayG setTypeArrayO
   8738 
   8739 #define setTopBoolO(self, value) (self)->f->setTopBool(self, value)
   8740 #define setTopBoolG setTopBoolO
   8741 
   8742 #define setTopDoubleO(self, value) (self)->f->setTopDouble(self, value)
   8743 #define setTopDoubleG setTopDoubleO
   8744 
   8745 #define setTopIntO(self, value) (self)->f->setTopInt(self, value)
   8746 #define setTopIntG setTopIntO
   8747 
   8748 #define setTopStringO(self, value) (self)->f->setTopString(self, value)
   8749 #define setTopStringG setTopStringO
   8750 
   8751 #define setTopCharO(self, c) (self)->f->setTopChar(self, c)
   8752 #define setTopCharG setTopCharO
   8753 
   8754 #define setTopDictO(self, value) (self)->f->setTopDict(self, value)
   8755 #define setTopDictG setTopDictO
   8756 
   8757 #define setTopArrayO(self, value) (self)->f->setTopArray(self, value)
   8758 #define setTopArrayG setTopArrayO
   8759 
   8760 #define setTopArraycO(self, value) (self)->f->setTopArrayc(self, value)
   8761 #define setTopArraycG setTopArraycO
   8762 
   8763 #define setTopCArraycO(self, value) (self)->f->setTopCArrayc(self, value)
   8764 #define setTopCArraycG setTopCArraycO
   8765 
   8766 #define setTopSmallBoolO(self, value) (self)->f->setTopSmallBool(self, value)
   8767 #define setTopSmallBoolG setTopSmallBoolO
   8768 
   8769 #define setTopSmallDoubleO(self, value) (self)->f->setTopSmallDouble(self, value)
   8770 #define setTopSmallDoubleG setTopSmallDoubleO
   8771 
   8772 #define setTopSmallIntO(self, value) (self)->f->setTopSmallInt(self, value)
   8773 #define setTopSmallIntG setTopSmallIntO
   8774 
   8775 #define setTopSmallStringO(self, value) (self)->f->setTopSmallString(self, value)
   8776 #define setTopSmallStringG setTopSmallStringO
   8777 
   8778 #define setTopNFreeBoolO(self, value) (self)->f->setTopNFreeBool(self, value)
   8779 #define setTopNFreeBoolG setTopNFreeBoolO
   8780 
   8781 #define setTopNFreeDoubleO(self, value) (self)->f->setTopNFreeDouble(self, value)
   8782 #define setTopNFreeDoubleG setTopNFreeDoubleO
   8783 
   8784 #define setTopNFreeIntO(self, value) (self)->f->setTopNFreeInt(self, value)
   8785 #define setTopNFreeIntG setTopNFreeIntO
   8786 
   8787 #define setTopNFreeStringO(self, value) (self)->f->setTopNFreeString(self, value)
   8788 #define setTopNFreeStringG setTopNFreeStringO
   8789 
   8790 #define setTopNFreeDictO(self, value) (self)->f->setTopNFreeDict(self, value)
   8791 #define setTopNFreeDictG setTopNFreeDictO
   8792 
   8793 #define setTopNFreeArrayO(self, value) (self)->f->setTopNFreeArray(self, value)
   8794 #define setTopNFreeArrayG setTopNFreeArrayO
   8795 
   8796 #define setTopNFreeArraycO(self, value) (self)->f->setTopNFreeArrayc(self, value)
   8797 #define setTopNFreeArraycG setTopNFreeArraycO
   8798 
   8799 #define setTopNFreeSmallBoolO(self, value) (self)->f->setTopNFreeSmallBool(self, value)
   8800 #define setTopNFreeSmallBoolG setTopNFreeSmallBoolO
   8801 
   8802 #define setTopNFreeSmallDoubleO(self, value) (self)->f->setTopNFreeSmallDouble(self, value)
   8803 #define setTopNFreeSmallDoubleG setTopNFreeSmallDoubleO
   8804 
   8805 #define setTopNFreeSmallIntO(self, value) (self)->f->setTopNFreeSmallInt(self, value)
   8806 #define setTopNFreeSmallIntG setTopNFreeSmallIntO
   8807 
   8808 #define setTopNFreeSmallStringO(self, value) (self)->f->setTopNFreeSmallString(self, value)
   8809 #define setTopNFreeSmallStringG setTopNFreeSmallStringO
   8810 
   8811 #define fromArrayDictO(self, items) (self)->f->fromArrayDict(self, items)
   8812 #define fromArrayDictG fromArrayDictO
   8813 
   8814 #define toArrayDictO(self) (self)->f->toArrayDict(self)
   8815 #define toArrayDictG toArrayDictO
   8816 
   8817 #define getTopUndefinedO(self) (self)->f->getTopUndefined(self)
   8818 #define getTopUndefinedG getTopUndefinedO
   8819 
   8820 #define getTopBoolO(self) (self)->f->getTopBool(self)
   8821 #define getTopBoolG getTopBoolO
   8822 
   8823 #define getTopBoolPO(self) (self)->f->getTopBoolP(self)
   8824 #define getTopBoolPG getTopBoolPO
   8825 
   8826 #define getTopDoubleO(self) (self)->f->getTopDouble(self)
   8827 #define getTopDoubleG getTopDoubleO
   8828 
   8829 #define getTopDoublePO(self) (self)->f->getTopDoubleP(self)
   8830 #define getTopDoublePG getTopDoublePO
   8831 
   8832 #define getTopIntO(self) (self)->f->getTopInt(self)
   8833 #define getTopIntG getTopIntO
   8834 
   8835 #define getTopIntPO(self) (self)->f->getTopIntP(self)
   8836 #define getTopIntPG getTopIntPO
   8837 
   8838 #define getTopInt32O(self) (self)->f->getTopInt32(self)
   8839 #define getTopInt32G getTopInt32O
   8840 
   8841 #define getTopInt32PO(self) (self)->f->getTopInt32P(self)
   8842 #define getTopInt32PG getTopInt32PO
   8843 
   8844 #define getTopUintO(self) (self)->f->getTopUint(self)
   8845 #define getTopUintG getTopUintO
   8846 
   8847 #define getTopUintPO(self) (self)->f->getTopUintP(self)
   8848 #define getTopUintPG getTopUintPO
   8849 
   8850 #define getTopUint32O(self) (self)->f->getTopUint32(self)
   8851 #define getTopUint32G getTopUint32O
   8852 
   8853 #define getTopUint32PO(self) (self)->f->getTopUint32P(self)
   8854 #define getTopUint32PG getTopUint32PO
   8855 
   8856 #define getTopSO(self) (self)->f->getTopS(self)
   8857 #define getTopSG getTopSO
   8858 
   8859 #define getTopDictO(self) (self)->f->getTopDict(self)
   8860 #define getTopDictG getTopDictO
   8861 
   8862 #define getTopArrayO(self) (self)->f->getTopArray(self)
   8863 #define getTopArrayG getTopArrayO
   8864 
   8865 #define getTopSmallBoolO(self) (self)->f->getTopSmallBool(self)
   8866 #define getTopSmallBoolG getTopSmallBoolO
   8867 
   8868 #define getTopSmallDoubleO(self) (self)->f->getTopSmallDouble(self)
   8869 #define getTopSmallDoubleG getTopSmallDoubleO
   8870 
   8871 #define getTopSmallIntO(self) (self)->f->getTopSmallInt(self)
   8872 #define getTopSmallIntG getTopSmallIntO
   8873 
   8874 #define getTopSmallStringO(self) (self)->f->getTopSmallString(self)
   8875 #define getTopSmallStringG getTopSmallStringO
   8876 
   8877 #define keyIsO(self, key) (self)->f->keyIs(self, key)
   8878 #define keyIsG keyIsO
   8879 
   8880 #define keyIsSO(self, key) (self)->f->keyIsS(self, key)
   8881 #define keyIsSG keyIsSO
   8882 
   8883 #define makeKeyO(self, key) (self)->f->makeKey(self, key)
   8884 #define makeKeyG makeKeyO
   8885 
   8886 #define iMakeKeyO(self, key) (self)->f->iMakeKey(self, key)
   8887 #define iMakeKeyG iMakeKeyO
   8888 
   8889 #define bMakeKeyO(self, dest, key) (self)->f->bMakeKey(self, dest, key)
   8890 #define bMakeKeyG bMakeKeyO
   8891 
   8892 #define bLMakeKeyO(self, dest, size, key) (self)->f->bLMakeKey(self, dest, size, key)
   8893 #define bLMakeKeyG bLMakeKeyO
   8894 
   8895 #define makeKeyLenO(self, key) (self)->f->makeKeyLen(self, key)
   8896 #define makeKeyLenG makeKeyLenO
   8897 
   8898 #define mergeDictO(self, smallDict) (self)->f->mergeDict(self, smallDict)
   8899 #define mergeDictG mergeDictO
   8900 
   8901 #define mergeDictNSmashO(self, smallDict) (self)->f->mergeDictNSmash(self, smallDict)
   8902 #define mergeDictNSmashG mergeDictNSmashO
   8903 
   8904 #define addJsonO(self, array) (self)->f->addJson(self, array)
   8905 #define addJsonG addJsonO
   8906 
   8907 #define cropSO(self, start, end) (self)->f->cropS(self, start, end)
   8908 #define cropSG cropSO
   8909 
   8910 #define cropElemAtO(self, index) (self)->f->cropElemAt(self, index)
   8911 #define cropElemAtG cropElemAtO
   8912 
   8913 #define cropElemAtUndefinedO(self, index) (self)->f->cropElemAtUndefined(self, index)
   8914 #define cropElemAtUndefinedG cropElemAtUndefinedO
   8915 
   8916 #define cropElemAtBoolO(self, index) (self)->f->cropElemAtBool(self, index)
   8917 #define cropElemAtBoolG cropElemAtBoolO
   8918 
   8919 #define cropElemAtDoubleO(self, index) (self)->f->cropElemAtDouble(self, index)
   8920 #define cropElemAtDoubleG cropElemAtDoubleO
   8921 
   8922 #define cropElemAtIntO(self, index) (self)->f->cropElemAtInt(self, index)
   8923 #define cropElemAtIntG cropElemAtIntO
   8924 
   8925 #define cropElemAtInt32O(self, index) (self)->f->cropElemAtInt32(self, index)
   8926 #define cropElemAtInt32G cropElemAtInt32O
   8927 
   8928 #define cropElemAtUintO(self, index) (self)->f->cropElemAtUint(self, index)
   8929 #define cropElemAtUintG cropElemAtUintO
   8930 
   8931 #define cropElemAtUint32O(self, index) (self)->f->cropElemAtUint32(self, index)
   8932 #define cropElemAtUint32G cropElemAtUint32O
   8933 
   8934 #define cropElemAtSO(self, index) (self)->f->cropElemAtS(self, index)
   8935 #define cropElemAtSG cropElemAtSO
   8936 
   8937 #define cropElemAtCharO(self, index) (self)->f->cropElemAtChar(self, index)
   8938 #define cropElemAtCharG cropElemAtCharO
   8939 
   8940 #define cropElemAtDictO(self, index) (self)->f->cropElemAtDict(self, index)
   8941 #define cropElemAtDictG cropElemAtDictO
   8942 
   8943 #define cropElemAtArrayO(self, index) (self)->f->cropElemAtArray(self, index)
   8944 #define cropElemAtArrayG cropElemAtArrayO
   8945 
   8946 #define cropElemAtSmallBoolO(self, index) (self)->f->cropElemAtSmallBool(self, index)
   8947 #define cropElemAtSmallBoolG cropElemAtSmallBoolO
   8948 
   8949 #define cropElemAtSmallBytesO(self, index) (self)->f->cropElemAtSmallBytes(self, index)
   8950 #define cropElemAtSmallBytesG cropElemAtSmallBytesO
   8951 
   8952 #define cropElemAtSmallDoubleO(self, index) (self)->f->cropElemAtSmallDouble(self, index)
   8953 #define cropElemAtSmallDoubleG cropElemAtSmallDoubleO
   8954 
   8955 #define cropElemAtSmallIntO(self, index) (self)->f->cropElemAtSmallInt(self, index)
   8956 #define cropElemAtSmallIntG cropElemAtSmallIntO
   8957 
   8958 #define cropElemAtSmallStringO(self, index) (self)->f->cropElemAtSmallString(self, index)
   8959 #define cropElemAtSmallStringG cropElemAtSmallStringO
   8960 
   8961 #define cropElemAtVoidO(self, index) (self)->f->cropElemAtVoid(self, index)
   8962 #define cropElemAtVoidG cropElemAtVoidO
   8963 
   8964 #define cropElemAtSmallContainerO(self, index) (self)->f->cropElemAtSmallContainer(self, index)
   8965 #define cropElemAtSmallContainerG cropElemAtSmallContainerO
   8966 
   8967 #define cropElemKeyO(self, key) (self)->f->cropElemKey(self, key)
   8968 #define cropElemKeyG cropElemKeyO
   8969 
   8970 #define cropElemKeyUndefinedO(self, key) (self)->f->cropElemKeyUndefined(self, key)
   8971 #define cropElemKeyUndefinedG cropElemKeyUndefinedO
   8972 
   8973 #define cropElemKeyBoolO(self, key) (self)->f->cropElemKeyBool(self, key)
   8974 #define cropElemKeyBoolG cropElemKeyBoolO
   8975 
   8976 #define cropElemKeyDoubleO(self, key) (self)->f->cropElemKeyDouble(self, key)
   8977 #define cropElemKeyDoubleG cropElemKeyDoubleO
   8978 
   8979 #define cropElemKeyIntO(self, key) (self)->f->cropElemKeyInt(self, key)
   8980 #define cropElemKeyIntG cropElemKeyIntO
   8981 
   8982 #define cropElemKeyInt32O(self, key) (self)->f->cropElemKeyInt32(self, key)
   8983 #define cropElemKeyInt32G cropElemKeyInt32O
   8984 
   8985 #define cropElemKeyUintO(self, key) (self)->f->cropElemKeyUint(self, key)
   8986 #define cropElemKeyUintG cropElemKeyUintO
   8987 
   8988 #define cropElemKeyUint32O(self, key) (self)->f->cropElemKeyUint32(self, key)
   8989 #define cropElemKeyUint32G cropElemKeyUint32O
   8990 
   8991 #define cropElemKeySO(self, key) (self)->f->cropElemKeyS(self, key)
   8992 #define cropElemKeySG cropElemKeySO
   8993 
   8994 #define cropElemKeyDictO(self, key) (self)->f->cropElemKeyDict(self, key)
   8995 #define cropElemKeyDictG cropElemKeyDictO
   8996 
   8997 #define cropElemKeyArrayO(self, key) (self)->f->cropElemKeyArray(self, key)
   8998 #define cropElemKeyArrayG cropElemKeyArrayO
   8999 
   9000 #define cropElemKeySmallBoolO(self, key) (self)->f->cropElemKeySmallBool(self, key)
   9001 #define cropElemKeySmallBoolG cropElemKeySmallBoolO
   9002 
   9003 #define cropElemKeySmallBytesO(self, key) (self)->f->cropElemKeySmallBytes(self, key)
   9004 #define cropElemKeySmallBytesG cropElemKeySmallBytesO
   9005 
   9006 #define cropElemKeySmallDoubleO(self, key) (self)->f->cropElemKeySmallDouble(self, key)
   9007 #define cropElemKeySmallDoubleG cropElemKeySmallDoubleO
   9008 
   9009 #define cropElemKeySmallIntO(self, key) (self)->f->cropElemKeySmallInt(self, key)
   9010 #define cropElemKeySmallIntG cropElemKeySmallIntO
   9011 
   9012 #define cropElemKeySmallStringO(self, key) (self)->f->cropElemKeySmallString(self, key)
   9013 #define cropElemKeySmallStringG cropElemKeySmallStringO
   9014 
   9015 #define cropElemKeyVoidO(self, key) (self)->f->cropElemKeyVoid(self, key)
   9016 #define cropElemKeyVoidG cropElemKeyVoidO
   9017 
   9018 #define cropElemKeySmallContainerO(self, key) (self)->f->cropElemKeySmallContainer(self, key)
   9019 #define cropElemKeySmallContainerG cropElemKeySmallContainerO
   9020 
   9021 #define insertStringO(self, index, toInsert) (self)->f->insertString(self, index, toInsert)
   9022 #define insertStringG insertStringO
   9023 
   9024 #define insertSO(self, index, toInsert) (self)->f->insertS(self, index, toInsert)
   9025 #define insertSG insertSO
   9026 
   9027 #define insertNFreeStringO(self, index, toInsert) (self)->f->insertNFreeString(self, index, toInsert)
   9028 #define insertNFreeStringG insertNFreeStringO
   9029 
   9030 #define insertSNFreeO(self, index, toInsert) (self)->f->insertSNFree(self, index, toInsert)
   9031 #define insertSNFreeG insertSNFreeO
   9032 
   9033 #define uniqCharO(self, c) (self)->f->uniqChar(self, c)
   9034 #define uniqCharG uniqCharO
   9035 
   9036 #define icUniqCharO(self, c) (self)->f->icUniqChar(self, c)
   9037 #define icUniqCharG icUniqCharO
   9038 
   9039 #define findCharO(self, c) (self)->f->findChar(self, c)
   9040 #define findCharG findCharO
   9041 
   9042 #define findJsonO(self, needle) (self)->f->findJson(self, needle)
   9043 #define findJsonG findJsonO
   9044 
   9045 #define icFindCharO(self, c) (self)->f->icFindChar(self, c)
   9046 #define icFindCharG icFindCharO
   9047 
   9048 #define icFindJsonO(self, needle) (self)->f->icFindJson(self, needle)
   9049 #define icFindJsonG icFindJsonO
   9050 
   9051 #define replaceCharSO(self, olds, news, max) (self)->f->replaceCharS(self, olds, news, max)
   9052 #define replaceCharSG replaceCharSO
   9053 
   9054 #define replaceSCharO(self, olds, news, max) (self)->f->replaceSChar(self, olds, news, max)
   9055 #define replaceSCharG replaceSCharO
   9056 
   9057 #define replaceCharCharO(self, olds, news, max) (self)->f->replaceCharChar(self, olds, news, max)
   9058 #define replaceCharCharG replaceCharCharO
   9059 
   9060 #define replaceSmallStringSmallStringO(self, olds, news, max) (self)->f->replaceSmallStringSmallString(self, olds, news, max)
   9061 #define replaceSmallStringSmallStringG replaceSmallStringSmallStringO
   9062 
   9063 #define replaceSmallStringSO(self, olds, news, max) (self)->f->replaceSmallStringS(self, olds, news, max)
   9064 #define replaceSmallStringSG replaceSmallStringSO
   9065 
   9066 #define replaceSmallStringCharO(self, olds, news, max) (self)->f->replaceSmallStringChar(self, olds, news, max)
   9067 #define replaceSmallStringCharG replaceSmallStringCharO
   9068 
   9069 #define replaceSSmallStringO(self, olds, news, max) (self)->f->replaceSSmallString(self, olds, news, max)
   9070 #define replaceSSmallStringG replaceSSmallStringO
   9071 
   9072 #define replaceCharSmallStringO(self, olds, news, max) (self)->f->replaceCharSmallString(self, olds, news, max)
   9073 #define replaceCharSmallStringG replaceCharSmallStringO
   9074 
   9075 #define replaceJsonJsonO(self, olds, news, max) (self)->f->replaceJsonJson(self, olds, news, max)
   9076 #define replaceJsonJsonG replaceJsonJsonO
   9077 
   9078 #define replaceJsonSmallStringO(self, olds, news, max) (self)->f->replaceJsonSmallString(self, olds, news, max)
   9079 #define replaceJsonSmallStringG replaceJsonSmallStringO
   9080 
   9081 #define replaceJsonSO(self, olds, news, max) (self)->f->replaceJsonS(self, olds, news, max)
   9082 #define replaceJsonSG replaceJsonSO
   9083 
   9084 #define replaceJsonCharO(self, olds, news, max) (self)->f->replaceJsonChar(self, olds, news, max)
   9085 #define replaceJsonCharG replaceJsonCharO
   9086 
   9087 #define replaceSmallStringJsonO(self, olds, news, max) (self)->f->replaceSmallStringJson(self, olds, news, max)
   9088 #define replaceSmallStringJsonG replaceSmallStringJsonO
   9089 
   9090 #define replaceSJsonO(self, olds, news, max) (self)->f->replaceSJson(self, olds, news, max)
   9091 #define replaceSJsonG replaceSJsonO
   9092 
   9093 #define replaceCharJsonO(self, olds, news, max) (self)->f->replaceCharJson(self, olds, news, max)
   9094 #define replaceCharJsonG replaceCharJsonO
   9095 
   9096 #define icReplaceCharSO(self, olds, news, max) (self)->f->icReplaceCharS(self, olds, news, max)
   9097 #define icReplaceCharSG icReplaceCharSO
   9098 
   9099 #define icReplaceSCharO(self, olds, news, max) (self)->f->icReplaceSChar(self, olds, news, max)
   9100 #define icReplaceSCharG icReplaceSCharO
   9101 
   9102 #define icReplaceCharCharO(self, olds, news, max) (self)->f->icReplaceCharChar(self, olds, news, max)
   9103 #define icReplaceCharCharG icReplaceCharCharO
   9104 
   9105 #define icReplaceSmallStringSmallStringO(self, olds, news, max) (self)->f->icReplaceSmallStringSmallString(self, olds, news, max)
   9106 #define icReplaceSmallStringSmallStringG icReplaceSmallStringSmallStringO
   9107 
   9108 #define icReplaceSmallStringSO(self, olds, news, max) (self)->f->icReplaceSmallStringS(self, olds, news, max)
   9109 #define icReplaceSmallStringSG icReplaceSmallStringSO
   9110 
   9111 #define icReplaceSmallStringCharO(self, olds, news, max) (self)->f->icReplaceSmallStringChar(self, olds, news, max)
   9112 #define icReplaceSmallStringCharG icReplaceSmallStringCharO
   9113 
   9114 #define icReplaceSSmallStringO(self, olds, news, max) (self)->f->icReplaceSSmallString(self, olds, news, max)
   9115 #define icReplaceSSmallStringG icReplaceSSmallStringO
   9116 
   9117 #define icReplaceCharSmallStringO(self, olds, news, max) (self)->f->icReplaceCharSmallString(self, olds, news, max)
   9118 #define icReplaceCharSmallStringG icReplaceCharSmallStringO
   9119 
   9120 #define icReplaceJsonJsonO(self, olds, news, max) (self)->f->icReplaceJsonJson(self, olds, news, max)
   9121 #define icReplaceJsonJsonG icReplaceJsonJsonO
   9122 
   9123 #define icReplaceJsonSmallStringO(self, olds, news, max) (self)->f->icReplaceJsonSmallString(self, olds, news, max)
   9124 #define icReplaceJsonSmallStringG icReplaceJsonSmallStringO
   9125 
   9126 #define icReplaceJsonSO(self, olds, news, max) (self)->f->icReplaceJsonS(self, olds, news, max)
   9127 #define icReplaceJsonSG icReplaceJsonSO
   9128 
   9129 #define icReplaceJsonCharO(self, olds, news, max) (self)->f->icReplaceJsonChar(self, olds, news, max)
   9130 #define icReplaceJsonCharG icReplaceJsonCharO
   9131 
   9132 #define icReplaceSmallStringJsonO(self, olds, news, max) (self)->f->icReplaceSmallStringJson(self, olds, news, max)
   9133 #define icReplaceSmallStringJsonG icReplaceSmallStringJsonO
   9134 
   9135 #define icReplaceSJsonO(self, olds, news, max) (self)->f->icReplaceSJson(self, olds, news, max)
   9136 #define icReplaceSJsonG icReplaceSJsonO
   9137 
   9138 #define icReplaceCharJsonO(self, olds, news, max) (self)->f->icReplaceCharJson(self, olds, news, max)
   9139 #define icReplaceCharJsonG icReplaceCharJsonO
   9140 
   9141 #define icEqualSmallStringO(self, string) (self)->f->icEqualSmallString(self, string)
   9142 #define icEqualSmallStringG icEqualSmallStringO
   9143 
   9144 #define icEqualSO(self, string) (self)->f->icEqualS(self, string)
   9145 #define icEqualSG icEqualSO
   9146 
   9147 #define icEqualCharO(self, c) (self)->f->icEqualChar(self, c)
   9148 #define icEqualCharG icEqualCharO
   9149 
   9150 #define equalISO(self, string, index) (self)->f->equalIS(self, string, index)
   9151 #define equalISG equalISO
   9152 
   9153 #define equalICharO(self, c, index) (self)->f->equalIChar(self, c, index)
   9154 #define equalICharG equalICharO
   9155 
   9156 #define equalIJsonO(self, string, index) (self)->f->equalIJson(self, string, index)
   9157 #define equalIJsonG equalIJsonO
   9158 
   9159 #define equalISmallStringO(self, string, index) (self)->f->equalISmallString(self, string, index)
   9160 #define equalISmallStringG equalISmallStringO
   9161 
   9162 #define startsWithSO(self, string) (self)->f->startsWithS(self, string)
   9163 #define startsWithSG startsWithSO
   9164 
   9165 #define startsWithCharO(self, c) (self)->f->startsWithChar(self, c)
   9166 #define startsWithCharG startsWithCharO
   9167 
   9168 #define startsWithSmallStringO(self, string) (self)->f->startsWithSmallString(self, string)
   9169 #define startsWithSmallStringG startsWithSmallStringO
   9170 
   9171 #define startsWithJsonO(self, string) (self)->f->startsWithJson(self, string)
   9172 #define startsWithJsonG startsWithJsonO
   9173 
   9174 #define endsWithSO(self, string) (self)->f->endsWithS(self, string)
   9175 #define endsWithSG endsWithSO
   9176 
   9177 #define endsWithCharO(self, c) (self)->f->endsWithChar(self, c)
   9178 #define endsWithCharG endsWithCharO
   9179 
   9180 #define endsWithSmallStringO(self, string) (self)->f->endsWithSmallString(self, string)
   9181 #define endsWithSmallStringG endsWithSmallStringO
   9182 
   9183 #define endsWithJsonO(self, string) (self)->f->endsWithJson(self, string)
   9184 #define endsWithJsonG endsWithJsonO
   9185 
   9186 #define countSO(self, string) (self)->f->countS(self, string)
   9187 #define countSG countSO
   9188 
   9189 #define countCharO(self, c) (self)->f->countChar(self, c)
   9190 #define countCharG countCharO
   9191 
   9192 #define countSmallStringO(self, string) (self)->f->countSmallString(self, string)
   9193 #define countSmallStringG countSmallStringO
   9194 
   9195 #define countJsonO(self, string) (self)->f->countJson(self, string)
   9196 #define countJsonG countJsonO
   9197 
   9198 #define icStartsWithSO(self, string) (self)->f->icStartsWithS(self, string)
   9199 #define icStartsWithSG icStartsWithSO
   9200 
   9201 #define icStartsWithCharO(self, c) (self)->f->icStartsWithChar(self, c)
   9202 #define icStartsWithCharG icStartsWithCharO
   9203 
   9204 #define icStartsWithSmallStringO(self, string) (self)->f->icStartsWithSmallString(self, string)
   9205 #define icStartsWithSmallStringG icStartsWithSmallStringO
   9206 
   9207 #define icStartsWithJsonO(self, string) (self)->f->icStartsWithJson(self, string)
   9208 #define icStartsWithJsonG icStartsWithJsonO
   9209 
   9210 #define icEndsWithSO(self, string) (self)->f->icEndsWithS(self, string)
   9211 #define icEndsWithSG icEndsWithSO
   9212 
   9213 #define icEndsWithCharO(self, c) (self)->f->icEndsWithChar(self, c)
   9214 #define icEndsWithCharG icEndsWithCharO
   9215 
   9216 #define icEndsWithSmallStringO(self, string) (self)->f->icEndsWithSmallString(self, string)
   9217 #define icEndsWithSmallStringG icEndsWithSmallStringO
   9218 
   9219 #define icEndsWithJsonO(self, string) (self)->f->icEndsWithJson(self, string)
   9220 #define icEndsWithJsonG icEndsWithJsonO
   9221 
   9222 #define icCountSO(self, string) (self)->f->icCountS(self, string)
   9223 #define icCountSG icCountSO
   9224 
   9225 #define icCountCharO(self, c) (self)->f->icCountChar(self, c)
   9226 #define icCountCharG icCountCharO
   9227 
   9228 #define icCountSmallStringO(self, string) (self)->f->icCountSmallString(self, string)
   9229 #define icCountSmallStringG icCountSmallStringO
   9230 
   9231 #define icCountJsonO(self, string) (self)->f->icCountJson(self, string)
   9232 #define icCountJsonG icCountJsonO
   9233 
   9234 #define enumerateDictO(self, closure, funcElem) (self)->f->enumerateDict(self, closure, funcElem)
   9235 #define enumerateDictG enumerateDictO
   9236 
   9237 #define splitCharO(self, c) (self)->f->splitChar(self, c)
   9238 #define splitCharG splitCharO
   9239 
   9240 #define splitSO(self, delim) (self)->f->splitS(self, delim)
   9241 #define splitSG splitSO
   9242 
   9243 #define splitCharSO(self, c) (self)->f->splitCharS(self, c)
   9244 #define splitCharSG splitCharSO
   9245 
   9246 #define splitSmallStringSO(self, delim) (self)->f->splitSmallStringS(self, delim)
   9247 #define splitSmallStringSG splitSmallStringSO
   9248 
   9249 #define extractCharSO(self, delim1, delim2) (self)->f->extractCharS(self, delim1, delim2)
   9250 #define extractCharSG extractCharSO
   9251 
   9252 #define extractSCharO(self, delim1, delim2) (self)->f->extractSChar(self, delim1, delim2)
   9253 #define extractSCharG extractSCharO
   9254 
   9255 #define extractCharCharO(self, delim1, delim2) (self)->f->extractCharChar(self, delim1, delim2)
   9256 #define extractCharCharG extractCharCharO
   9257 
   9258 #define extractSmallJsonSmallJsonO(self, delim1, delim2) (self)->f->extractSmallJsonSmallJson(self, delim1, delim2)
   9259 #define extractSmallJsonSmallJsonG extractSmallJsonSmallJsonO
   9260 
   9261 #define extractSmallStringSmallJsonO(self, delim1, delim2) (self)->f->extractSmallStringSmallJson(self, delim1, delim2)
   9262 #define extractSmallStringSmallJsonG extractSmallStringSmallJsonO
   9263 
   9264 #define extractSSmallJsonO(self, delim1, delim2) (self)->f->extractSSmallJson(self, delim1, delim2)
   9265 #define extractSSmallJsonG extractSSmallJsonO
   9266 
   9267 #define extractCharSmallJsonO(self, delim1, delim2) (self)->f->extractCharSmallJson(self, delim1, delim2)
   9268 #define extractCharSmallJsonG extractCharSmallJsonO
   9269 
   9270 #define extractSmallStringSmallStringO(self, delim1, delim2) (self)->f->extractSmallStringSmallString(self, delim1, delim2)
   9271 #define extractSmallStringSmallStringG extractSmallStringSmallStringO
   9272 
   9273 #define extractSmallStringSO(self, delim1, delim2) (self)->f->extractSmallStringS(self, delim1, delim2)
   9274 #define extractSmallStringSG extractSmallStringSO
   9275 
   9276 #define extractSmallStringCharO(self, delim1, delim2) (self)->f->extractSmallStringChar(self, delim1, delim2)
   9277 #define extractSmallStringCharG extractSmallStringCharO
   9278 
   9279 #define extractSSmallStringO(self, delim1, delim2) (self)->f->extractSSmallString(self, delim1, delim2)
   9280 #define extractSSmallStringG extractSSmallStringO
   9281 
   9282 #define extractCharSmallStringO(self, delim1, delim2) (self)->f->extractCharSmallString(self, delim1, delim2)
   9283 #define extractCharSmallStringG extractCharSmallStringO
   9284 
   9285 #define icSplitCharO(self, c) (self)->f->icSplitChar(self, c)
   9286 #define icSplitCharG icSplitCharO
   9287 
   9288 #define icSplitSO(self, delim) (self)->f->icSplitS(self, delim)
   9289 #define icSplitSG icSplitSO
   9290 
   9291 #define icSplitCharSO(self, c) (self)->f->icSplitCharS(self, c)
   9292 #define icSplitCharSG icSplitCharSO
   9293 
   9294 #define icSplitSmallStringSO(self, delim) (self)->f->icSplitSmallStringS(self, delim)
   9295 #define icSplitSmallStringSG icSplitSmallStringSO
   9296 
   9297 #define icExtractCharSO(self, delim1, delim2) (self)->f->icExtractCharS(self, delim1, delim2)
   9298 #define icExtractCharSG icExtractCharSO
   9299 
   9300 #define icExtractSCharO(self, delim1, delim2) (self)->f->icExtractSChar(self, delim1, delim2)
   9301 #define icExtractSCharG icExtractSCharO
   9302 
   9303 #define icExtractCharCharO(self, delim1, delim2) (self)->f->icExtractCharChar(self, delim1, delim2)
   9304 #define icExtractCharCharG icExtractCharCharO
   9305 
   9306 #define icExtractSmallJsonSmallJsonO(self, delim1, delim2) (self)->f->icExtractSmallJsonSmallJson(self, delim1, delim2)
   9307 #define icExtractSmallJsonSmallJsonG icExtractSmallJsonSmallJsonO
   9308 
   9309 #define icExtractSmallStringSmallJsonO(self, delim1, delim2) (self)->f->icExtractSmallStringSmallJson(self, delim1, delim2)
   9310 #define icExtractSmallStringSmallJsonG icExtractSmallStringSmallJsonO
   9311 
   9312 #define icExtractSSmallJsonO(self, delim1, delim2) (self)->f->icExtractSSmallJson(self, delim1, delim2)
   9313 #define icExtractSSmallJsonG icExtractSSmallJsonO
   9314 
   9315 #define icExtractCharSmallJsonO(self, delim1, delim2) (self)->f->icExtractCharSmallJson(self, delim1, delim2)
   9316 #define icExtractCharSmallJsonG icExtractCharSmallJsonO
   9317 
   9318 #define icExtractSmallStringSmallStringO(self, delim1, delim2) (self)->f->icExtractSmallStringSmallString(self, delim1, delim2)
   9319 #define icExtractSmallStringSmallStringG icExtractSmallStringSmallStringO
   9320 
   9321 #define icExtractSmallStringSO(self, delim1, delim2) (self)->f->icExtractSmallStringS(self, delim1, delim2)
   9322 #define icExtractSmallStringSG icExtractSmallStringSO
   9323 
   9324 #define icExtractSmallStringCharO(self, delim1, delim2) (self)->f->icExtractSmallStringChar(self, delim1, delim2)
   9325 #define icExtractSmallStringCharG icExtractSmallStringCharO
   9326 
   9327 #define icExtractSSmallStringO(self, delim1, delim2) (self)->f->icExtractSSmallString(self, delim1, delim2)
   9328 #define icExtractSSmallStringG icExtractSSmallStringO
   9329 
   9330 #define icExtractCharSmallStringO(self, delim1, delim2) (self)->f->icExtractCharSmallString(self, delim1, delim2)
   9331 #define icExtractCharSmallStringG icExtractCharSmallStringO
   9332 
   9333 #define colorO(self, colr) (self)->f->color(self, colr)
   9334 #define colorG colorO
   9335 
   9336 #define colordO(self, color) (self)->f->colord(self, color)
   9337 #define colordG colordO
   9338 
   9339 #define getNumAtO(self, index) (self)->f->getNumAt(self, index)
   9340 #define getNumAtG getNumAtO
   9341 
   9342 #define delElemIndexO(self, index) (self)->f->delElemIndex(self, index)
   9343 #define delElemIndexG delElemIndexO
   9344 
   9345 #define removeElemIndexO(self, index) (self)->f->removeElemIndex(self, index)
   9346 #define removeElemIndexG removeElemIndexO
   9347 
   9348 #define stringifyO(self, indent) (self)->f->stringify(self, indent)
   9349 #define stringifyG stringifyO
   9350 
   9351 #define stringifySmallStringO(self, indent) (self)->f->stringifySmallString(self, indent)
   9352 #define stringifySmallStringG stringifySmallStringO
   9353 
   9354 #define toYMLO(self, indent) (self)->f->toYML(self, indent)
   9355 #define toYMLG toYMLO
   9356 
   9357 #define toYMLSmallStringO(self, indent) (self)->f->toYMLSmallString(self, indent)
   9358 #define toYMLSmallStringG toYMLSmallStringO
   9359 
   9360 #define parseSmallStringO(self, input) (self)->f->parseSmallString(self, input)
   9361 #define parseSmallStringG parseSmallStringO
   9362 
   9363 #define parseYMLSmallStringO(self, input) (self)->f->parseYMLSmallString(self, input)
   9364 #define parseYMLSmallStringG parseYMLSmallStringO
   9365 
   9366 #define serialO(self) (self)->f->serial(self)
   9367 #define serialG serialO
   9368 
   9369 #define deserialO(self, data) (self)->f->deserial(self, data)
   9370 #define deserialG deserialO
   9371 
   9372 #define readFileJsonO(self, filePath) (self)->f->readFileJson(self, filePath)
   9373 #define readFileJsonG readFileJsonO
   9374 
   9375 #define writeFileJsonO(self, filePath) (self)->f->writeFileJson(self, filePath)
   9376 #define writeFileJsonG writeFileJsonO
   9377 
   9378 #define appendFileJsonO(self, filePath) (self)->f->appendFileJson(self, filePath)
   9379 #define appendFileJsonG appendFileJsonO
   9380 
   9381 #define readTextJsonO(self, filePath) (self)->f->readTextJson(self, filePath)
   9382 #define readTextJsonG readTextJsonO
   9383 
   9384 #define writeTextJsonO(self, filePath) (self)->f->writeTextJson(self, filePath)
   9385 #define writeTextJsonG writeTextJsonO
   9386 
   9387 #define appendTextJsonO(self, filePath) (self)->f->appendTextJson(self, filePath)
   9388 #define appendTextJsonG appendTextJsonO
   9389 
   9390 #define typeAtStringO(self, index) (self)->f->typeAtString(self, index)
   9391 #define typeAtStringG typeAtStringO
   9392 
   9393 #define typeAtSmallStringO(self, index) (self)->f->typeAtSmallString(self, index)
   9394 #define typeAtSmallStringG typeAtSmallStringO
   9395 
   9396 #define typeAtO(self, index) (self)->f->typeAt(self, index)
   9397 #define typeAtG typeAtO
   9398 
   9399 #define isETypeAtO(self, index, type) (self)->f->isETypeAt(self, index, type)
   9400 #define isETypeAtG isETypeAtO
   9401 
   9402 #define isEUndefinedAtO(self, index) (self)->f->isEUndefinedAt(self, index)
   9403 #define isEUndefinedAtG isEUndefinedAtO
   9404 
   9405 #define isEBoolAtO(self, index) (self)->f->isEBoolAt(self, index)
   9406 #define isEBoolAtG isEBoolAtO
   9407 
   9408 #define isEContainerAtO(self, index) (self)->f->isEContainerAt(self, index)
   9409 #define isEContainerAtG isEContainerAtO
   9410 
   9411 #define isEDictAtO(self, index) (self)->f->isEDictAt(self, index)
   9412 #define isEDictAtG isEDictAtO
   9413 
   9414 #define isEDoubleAtO(self, index) (self)->f->isEDoubleAt(self, index)
   9415 #define isEDoubleAtG isEDoubleAtO
   9416 
   9417 #define isEIntAtO(self, index) (self)->f->isEIntAt(self, index)
   9418 #define isEIntAtG isEIntAtO
   9419 
   9420 #define isEStringAtO(self, index) (self)->f->isEStringAt(self, index)
   9421 #define isEStringAtG isEStringAtO
   9422 
   9423 #define isEFaststringAtO(self, index) (self)->f->isEFaststringAt(self, index)
   9424 #define isEFaststringAtG isEFaststringAtO
   9425 
   9426 #define isEArrayAtO(self, index) (self)->f->isEArrayAt(self, index)
   9427 #define isEArrayAtG isEArrayAtO
   9428 
   9429 #define isEBytesAtO(self, index) (self)->f->isEBytesAt(self, index)
   9430 #define isEBytesAtG isEBytesAtO
   9431 
   9432 #define setSmallArrayO(self, p2) (self)->f->setSmallArray(self, p2)
   9433 #define setSmallArrayG setSmallArrayO
   9434 
   9435 #define setFromSmallDictO(self, p2) (self)->f->setFromSmallDict(self, p2)
   9436 #define setFromSmallDictG setFromSmallDictO
   9437 
   9438 #define setFromSmallJsonO(self, p2) (self)->f->setFromSmallJson(self, p2)
   9439 #define setFromSmallJsonG setFromSmallJsonO
   9440 
   9441 #define appendCharO(self, c) (self)->f->appendChar(self, c)
   9442 #define appendCharG appendCharO
   9443 
   9444 #define appendNSmashSO(self, string) (self)->f->appendNSmashS(self, string)
   9445 #define appendNSmashSG appendNSmashSO
   9446 
   9447 #define prependNSmashSmallJsonO(self, json) (self)->f->prependNSmashSmallJson(self, json)
   9448 #define prependNSmashSmallJsonG prependNSmashSmallJsonO
   9449 
   9450 #define prependNSmashSO(self, string) (self)->f->prependNSmashS(self, string)
   9451 #define prependNSmashSG prependNSmashSO
   9452 
   9453 #define replaceSmallJsonSmallJsonO(self, olds, news, max) (self)->f->replaceSmallJsonSmallJson(self, olds, news, max)
   9454 #define replaceSmallJsonSmallJsonG replaceSmallJsonSmallJsonO
   9455 
   9456 #define replaceSmallJsonSmallStringO(self, olds, news, max) (self)->f->replaceSmallJsonSmallString(self, olds, news, max)
   9457 #define replaceSmallJsonSmallStringG replaceSmallJsonSmallStringO
   9458 
   9459 #define replaceSmallJsonSO(self, olds, news, max) (self)->f->replaceSmallJsonS(self, olds, news, max)
   9460 #define replaceSmallJsonSG replaceSmallJsonSO
   9461 
   9462 #define replaceSmallJsonCharO(self, olds, news, max) (self)->f->replaceSmallJsonChar(self, olds, news, max)
   9463 #define replaceSmallJsonCharG replaceSmallJsonCharO
   9464 
   9465 #define replaceSSmallJsonO(self, olds, news, max) (self)->f->replaceSSmallJson(self, olds, news, max)
   9466 #define replaceSSmallJsonG replaceSSmallJsonO
   9467 
   9468 #define replaceCharSmallJsonO(self, olds, news, max) (self)->f->replaceCharSmallJson(self, olds, news, max)
   9469 #define replaceCharSmallJsonG replaceCharSmallJsonO
   9470 
   9471 #define icReplaceSmallJsonSmallJsonO(self, olds, news, max) (self)->f->icReplaceSmallJsonSmallJson(self, olds, news, max)
   9472 #define icReplaceSmallJsonSmallJsonG icReplaceSmallJsonSmallJsonO
   9473 
   9474 #define icReplaceSmallJsonSmallStringO(self, olds, news, max) (self)->f->icReplaceSmallJsonSmallString(self, olds, news, max)
   9475 #define icReplaceSmallJsonSmallStringG icReplaceSmallJsonSmallStringO
   9476 
   9477 #define icReplaceSmallJsonSO(self, olds, news, max) (self)->f->icReplaceSmallJsonS(self, olds, news, max)
   9478 #define icReplaceSmallJsonSG icReplaceSmallJsonSO
   9479 
   9480 #define icReplaceSmallJsonCharO(self, olds, news, max) (self)->f->icReplaceSmallJsonChar(self, olds, news, max)
   9481 #define icReplaceSmallJsonCharG icReplaceSmallJsonCharO
   9482 
   9483 #define icReplaceSSmallJsonO(self, olds, news, max) (self)->f->icReplaceSSmallJson(self, olds, news, max)
   9484 #define icReplaceSSmallJsonG icReplaceSSmallJsonO
   9485 
   9486 #define icReplaceCharSmallJsonO(self, olds, news, max) (self)->f->icReplaceCharSmallJson(self, olds, news, max)
   9487 #define icReplaceCharSmallJsonG icReplaceCharSmallJsonO
   9488 
   9489 #define equalSO(self, string) (self)->f->equalS(self, string)
   9490 #define equalSG equalSO
   9491 
   9492 #define equalISmallJsonO(self, string, index) (self)->f->equalISmallJson(self, string, index)
   9493 #define equalISmallJsonG equalISmallJsonO
   9494 
   9495 #define startsWithSmallJsonO(self, string) (self)->f->startsWithSmallJson(self, string)
   9496 #define startsWithSmallJsonG startsWithSmallJsonO
   9497 
   9498 #define endsWithSmallJsonO(self, string) (self)->f->endsWithSmallJson(self, string)
   9499 #define endsWithSmallJsonG endsWithSmallJsonO
   9500 
   9501 #define countSmallJsonO(self, string) (self)->f->countSmallJson(self, string)
   9502 #define countSmallJsonG countSmallJsonO
   9503 
   9504 #define icStartsWithSmallJsonO(self, string) (self)->f->icStartsWithSmallJson(self, string)
   9505 #define icStartsWithSmallJsonG icStartsWithSmallJsonO
   9506 
   9507 #define icEndsWithSmallJsonO(self, string) (self)->f->icEndsWithSmallJson(self, string)
   9508 #define icEndsWithSmallJsonG icEndsWithSmallJsonO
   9509 
   9510 #define icCountSmallJsonO(self, string) (self)->f->icCountSmallJson(self, string)
   9511 #define icCountSmallJsonG icCountSmallJsonO
   9512 
   9513 #define splitSmallJsonSO(self, delim) (self)->f->splitSmallJsonS(self, delim)
   9514 #define splitSmallJsonSG splitSmallJsonSO
   9515 
   9516 #define splitSSmallStringO(self, delim) (self)->f->splitSSmallString(self, delim)
   9517 #define splitSSmallStringG splitSSmallStringO
   9518 
   9519 #define extractSmallJsonSmallStringO(self, delim1, delim2) (self)->f->extractSmallJsonSmallString(self, delim1, delim2)
   9520 #define extractSmallJsonSmallStringG extractSmallJsonSmallStringO
   9521 
   9522 #define extractSmallJsonSO(self, delim1, delim2) (self)->f->extractSmallJsonS(self, delim1, delim2)
   9523 #define extractSmallJsonSG extractSmallJsonSO
   9524 
   9525 #define extractSmallJsonCharO(self, delim1, delim2) (self)->f->extractSmallJsonChar(self, delim1, delim2)
   9526 #define extractSmallJsonCharG extractSmallJsonCharO
   9527 
   9528 #define icSplitSmallJsonSO(self, delim) (self)->f->icSplitSmallJsonS(self, delim)
   9529 #define icSplitSmallJsonSG icSplitSmallJsonSO
   9530 
   9531 #define icSplitSSmallStringO(self, delim) (self)->f->icSplitSSmallString(self, delim)
   9532 #define icSplitSSmallStringG icSplitSSmallStringO
   9533 
   9534 #define icExtractSmallJsonSmallStringO(self, delim1, delim2) (self)->f->icExtractSmallJsonSmallString(self, delim1, delim2)
   9535 #define icExtractSmallJsonSmallStringG icExtractSmallJsonSmallStringO
   9536 
   9537 #define icExtractSmallJsonSO(self, delim1, delim2) (self)->f->icExtractSmallJsonS(self, delim1, delim2)
   9538 #define icExtractSmallJsonSG icExtractSmallJsonSO
   9539 
   9540 #define icExtractSmallJsonCharO(self, delim1, delim2) (self)->f->icExtractSmallJsonChar(self, delim1, delim2)
   9541 #define icExtractSmallJsonCharG icExtractSmallJsonCharO
   9542 
   9543 // generated with utils/oGMacros END
   9544 
   9545 
   9546 // Class base
   9547 
   9548 /**
   9549  * base class
   9550  */
   9551 typedef struct base baset;
   9552 
   9553 // for object inheriting baset, cast to baset to be able to use this class functions and generics
   9554 #define cBa(self) ( (baset*) self )
   9555 
   9556 // Functions
   9557 
   9558 /**
   9559  * free buffers in obj
   9560  */
   9561 typedef void (*freeBaseFt)(baset *self);
   9562 
   9563 /**
   9564  * free buffers and obj itself
   9565  */
   9566 typedef void (*terminateBaseFt)(baset **self);
   9567 
   9568 /**
   9569  * convert data in obj to string
   9570  */
   9571 typedef char* (*toStringBaseFt)(baset *self);
   9572 
   9573 /**
   9574  * create a copy of obj
   9575  */
   9576 typedef baset* (*duplicateBaseFt)(baset *self);
   9577 
   9578 /**
   9579  * free obj itself and keep buffers inside
   9580  */
   9581 typedef void (*smashBaseFt)(baset **self);
   9582 
   9583 /**
   9584  * free only baset container and keep the sObject inside
   9585  */
   9586 typedef void (*finishBaseFt)(baset **self);
   9587 
   9588 /**
   9589  * base class functions
   9590  */
   9591 typedef struct {
   9592   freeBaseFt      free;
   9593   terminateBaseFt terminate;
   9594   toStringBaseFt  toString;
   9595   duplicateBaseFt duplicate;
   9596   smashBaseFt     smash;
   9597   finishBaseFt    finish;
   9598 } baseFunctionst;
   9599 
   9600 /**
   9601  * base class
   9602  */
   9603 struct base {
   9604   const char *type;
   9605   baseFunctionst *f;
   9606 };
   9607 
   9608 // terminate baset val when it is out of scope
   9609 void cleanUpBaseTerminateG(baset **val);
   9610 
   9611 // free baset val when it is out of scope
   9612 void cleanUpBaseFreeG(baset **val);
   9613 
   9614 // finish baset val when it is out of scope
   9615 void cleanUpBaseFinishG(baset **val);
   9616 
   9617 // smash baset val when it is out of scope
   9618 void cleanUpBaseSmashG(baset **val);
   9619 
   9620 /**
   9621  * declare pointer name with type baset and terminate name when it is out of scope
   9622  */
   9623 #define cleanBaseP(name) baset *name CLEANUP(cleanUpBaseTerminateG)
   9624 
   9625 /**
   9626  * declare pointer name with type baset and free name when it is out of scope
   9627  */
   9628 #define cleanFreeBase(name) baset *name CLEANUP(cleanUpBaseFreeG)
   9629 
   9630 /**
   9631  * declare pointer name with Type baset and finish name when it is out of scope
   9632  */
   9633 #define cleanFinishBaseP(name) baset *name CLEANUP(cleanUpBaseFinishG)
   9634 
   9635 /**
   9636  * declare pointer name with Type baset and smash name when it is out of scope
   9637  */
   9638 #define cleanSmashBaseP(name) baset *name CLEANUP(cleanUpBaseSmashG)
   9639 
   9640 // end class base
   9641 
   9642 /**
   9643  * undefined class
   9644  */
   9645 typedef struct undefined undefinedt;
   9646 
   9647 /**
   9648  * smallJson class
   9649  */
   9650 typedef struct smallJson smallJsont;
   9651 
   9652 /**
   9653  * smallDict class
   9654  */
   9655 typedef struct smallDict smallDictt;
   9656 
   9657 /**
   9658  * smallArray class
   9659  */
   9660 typedef struct smallArray smallArrayt;
   9661 
   9662 /**
   9663  * smallBytes class
   9664  */
   9665 typedef struct smallBytes smallBytest;
   9666 
   9667 /**
   9668  * smallBool class
   9669  */
   9670 typedef struct smallBool smallBoolt;
   9671 
   9672 /**
   9673  * smallContainer class
   9674  */
   9675 typedef struct smallContainer smallContainert;
   9676 
   9677 /**
   9678  * smallDouble class
   9679  */
   9680 typedef struct smallDouble smallDoublet;
   9681 
   9682 /**
   9683  * smallInt class
   9684  */
   9685 typedef struct smallInt smallIntt;
   9686 
   9687 /**
   9688  * smallString class
   9689  */
   9690 typedef struct smallString smallStringt;
   9691 
   9692 #include "json/libsheepyCUndefined.h"
   9693 #include "json/libsheepyCSmallDict.h"
   9694 #include "json/libsheepyCSmallArray.h"
   9695 #include "json/libsheepyCSmallJson.h"
   9696 #include "json/libsheepyCSmallBytes.h"
   9697 #include "json/libsheepyCSmallBool.h"
   9698 #include "json/libsheepyCSmallContainer.h"
   9699 #include "json/libsheepyCSmallDouble.h"
   9700 #include "json/libsheepyCSmallInt.h"
   9701 #include "json/libsheepyCSmallString.h"
   9702 
   9703 /**
   9704  * undefined/null object for setting undefined/null in small data structures
   9705  * pushG(a, undefined);
   9706  */
   9707 extern undefinedt* undefined;
   9708 
   9709 /**
   9710  * Generic return types
   9711  * getG(dict, rtBool, "a");
   9712  */
   9713 extern baset* rtBaset;
   9714 extern undefinedt* rtUndefinedt;
   9715 extern bool rtBool;
   9716 extern bool* rtBoolP;
   9717 extern double rtDouble;
   9718 extern double* rtDoubleP;
   9719 extern int64_t rtInt64_t;
   9720 extern int64_t* rtInt64_tP;
   9721 extern int32_t rtInt32_t;
   9722 extern int32_t* rtInt32_tP;
   9723 extern uint64_t rtUint64_t;
   9724 extern uint64_t* rtUint64_tP;
   9725 extern uint32_t rtUint32_t;
   9726 extern uint32_t* rtUint32_tP;
   9727 extern float rtF32;
   9728 extern double rtF64;
   9729 extern double* rtF64P;
   9730 extern int64_t rtI64;
   9731 extern int64_t* rtI64P;
   9732 extern int32_t rtI32;
   9733 extern int32_t* rtI32P;
   9734 extern uint64_t rtU64;
   9735 extern uint64_t* rtU64P;
   9736 extern uint32_t rtU32;
   9737 extern uint32_t* rtU32P;
   9738 extern uint8_t rtU8;
   9739 extern uint16_t rtU16;
   9740 extern char* rtChar;
   9741 extern smallArrayt* rtSmallArrayt;
   9742 extern smallBoolt* rtSmallBoolt;
   9743 extern smallBytest* rtSmallBytest;
   9744 extern smallDictt* rtSmallDictt;
   9745 extern smallDoublet* rtSmallDoublet;
   9746 extern smallIntt* rtSmallIntt;
   9747 extern smallJsont* rtSmallJsont;
   9748 extern smallStringt* rtSmallStringt;
   9749 extern void* rtVoid;
   9750 extern smallContainert* rtSmallContainert;
   9751 
   9752 // thread pool
   9753 #include "tpool.h"
   9754 
   9755 // Reference SKIP END
   9756 
   9757 /**
   9758  * define for unused values in generics
   9759  */
   9760 #define unusedV 0
   9761 
   9762 /**
   9763  * convert a variable number type to unsigned type, to declare a new variable or cast a value
   9764  *
   9765  * Example:
   9766  * int a = 0x7f000000;
   9767  * int b = 0x81000000;
   9768  * int c = a - b; // wrong result because of the overflow
   9769  *
   9770  * // instead cast a and b to unsigned int
   9771  * toUnsignedType(a) d = (toUnsignedType(a))a + (toUnsignedType(b))(-b);
   9772  */
   9773 #define toUnsignedType(var) typeof(convertToUnsignedType(var))
   9774 #define convertToUnsignedType(var) _Generic(var,\
   9775   int8_t:   rtU8,\
   9776   int16_t:  rtU16,\
   9777   int32_t:  rtU32,\
   9778   int64_t:  rtU64,\
   9779   uint8_t:  rtU8,\
   9780   uint16_t: rtU16,\
   9781   uint32_t: rtU32,\
   9782   uint64_t: rtU64,\
   9783   float:    rtF32,/* it is useful to support float even as there is no unsigned float */\
   9784   double:   rtF64)
   9785 
   9786 /**
   9787  * declare casted variable and cast to smallStringt
   9788  */
   9789 #define castS(casted, toCast) \
   9790   ;smallStringt *casted;\
   9791   if (checkObjectTypes && toCast && !isOSmallString(toCast))\
   9792     casted = NULL;\
   9793   else\
   9794     casted = (smallStringt *) (toCast);
   9795 
   9796 /**
   9797  * convenience define to make the json path strings more readable
   9798  * key strings must in paths must be quoted with \"
   9799  * _"a"_"."_"bsd"_ is equivalent to:
   9800  * "\"a\".\"bsd\""
   9801  */
   9802 #define _ "\""
   9803 
   9804 /** Back Slash string to escape back slash, use in for example json path with get, set... */
   9805 #define BSLH "\\"
   9806 
   9807 /**
   9808  * get a pointer to the string in the smallString object
   9809  *
   9810  * works only when obj is not NULL
   9811  *
   9812  * it is not possible to free/reallocate this pointer
   9813  */
   9814 #define ssGet(obj) ((smallStringt*)(obj))->f->get((smallStringt*)(obj))
   9815 
   9816 /**
   9817  * get a pointer to the string in the smallJson object
   9818  *
   9819  * works only when obj is not NULL
   9820  *
   9821  * it is not possible to free/reallocate this pointer
   9822  */
   9823 #define sjGet(obj) ((smallJsont*)(obj))->f->getTopS((smallJsont*)(obj))
   9824 
   9825 /**
   9826  * replace all olds (old strings)
   9827  * smallString and smallJson string
   9828  */
   9829 #define replaceSO_max(obj,olds,news) (obj)->f->replace(obj,olds,news, 0)
   9830 
   9831 /**
   9832  * string replace many olds with news (s, olds1, news1, olds2, news2,...)
   9833  * smallString and smallJson string
   9834  */
   9835 #define replaceManyO(self, olds, ...) (self)->f->replaceMany(self, olds, __VA_ARGS__, NULL)
   9836 #define replaceManyG replaceManyO
   9837 
   9838 /**
   9839  * ignore case and replace all olds (old strings)
   9840  * smallString and smallJson string
   9841  */
   9842 #define icReplaceSO_max(obj,olds,news) (obj)->f->replace(obj,olds,news, 0)
   9843 
   9844 /**
   9845  * ignore case and string replace many olds with news (s, olds1, news1, olds2, news2,...)
   9846  * smallString and smallJson string
   9847  */
   9848 #define icReplaceManyO(self, olds, ...) (self)->f->icReplaceMany(self, olds, __VA_ARGS__, NULL)
   9849 #define icReplaceManyG icReplaceManyO
   9850 
   9851 /**
   9852  * sheepy sysinfo
   9853  *
   9854  * return struct sysinfo in a dictionary.
   9855  * The keys are: uptime, loads, totalram, freeram, sharedram, bufferram, totalswap, freeswap, procs
   9856  *
   9857  * \return
   9858  *   sysinfo dictionary
   9859  *   NULL when failure
   9860  */
   9861 smallDictt *shSysinfo(void);
   9862 
   9863 baset *duplicateBaseG(baset *self);
   9864 
   9865 /**
   9866  * get program path
   9867  * When initLibsheepy is called before this function, it returns the given program path.
   9868  * When initLibsheepy has not been called before this function, it returns the real program path.
   9869  *
   9870  * \return
   9871  *    program path or real program path
   9872  */
   9873 smallJsont *getProgPathJO(void);
   9874 smallStringt *getProgPathO(void);
   9875 
   9876 /**
   9877  * get real program path
   9878  * The first call allocates libSheepyRealProgPath, it is freed with freeRealProgPath
   9879  *
   9880  * \return
   9881  *   real program path
   9882  */
   9883 smallJsont *getRealProgPathJO(void);
   9884 smallStringt *getRealProgPathO(void);
   9885 
   9886 /**
   9887  * run system command in a smallString
   9888  */
   9889 int systemJO(smallJsont *command);
   9890 int systemO(smallStringt *command);
   9891 
   9892 /**
   9893  * run system command in a smallString and free command buffer
   9894  * a message is printed when an error occurs
   9895  *
   9896  * \return
   9897  *   0 success
   9898  */
   9899 #define systemNFreeOJ(command) systemNFreeJOF(command, __LINE__, __func__, __FILE__);
   9900 int systemNFreeJOF(smallJsont *command, int line, const char *thisFunc, const char *thisFileName);
   9901 #define systemNFreeO(command) systemNFreeOF(command, __LINE__, __func__, __FILE__);
   9902 int systemNFreeOF(smallStringt *command, int line, const char *thisFunc, const char *thisFileName);
   9903 
   9904 /**
   9905  * convert data in obj to string
   9906  */
   9907 char *toStringOF(baset* object);
   9908 char *toStringUndefinedGF(undefinedt* object);
   9909 char *toStringBoolGF(bool object);
   9910 char *toStringBoolPGF(bool* object);
   9911 char *toStringFloatGF(float object);
   9912 char *toStringFloatPGF(float* object);
   9913 char *toStringDoubleGF(double object);
   9914 char *toStringDoublePGF(double* object);
   9915 char *toStringIntGF(int64_t object);
   9916 char *toStringIntPGF(int64_t* object);
   9917 char *toStringInt32GF(int32_t object);
   9918 char *toStringInt32PGF(int32_t* object);
   9919 char *toStringInt16GF(int16_t object);
   9920 char *toStringInt16PGF(int16_t* object);
   9921 char *toStringUintGF(uint64_t object);
   9922 char *toStringUintPGF(uint64_t* object);
   9923 char *toStringUint32GF(uint32_t object);
   9924 char *toStringUint32PGF(uint32_t* object);
   9925 char *toStringUint16GF(uint16_t object);
   9926 char *toStringUint16PGF(uint16_t* object);
   9927 char *toStringUint8GF(uint8_t object);
   9928 char *toStringUint8PGF(uint8_t* object);
   9929 char *toStringCharGF(char object);
   9930 char *toStringSGF(const char* object);
   9931 char *toStringListSGF(char** object);
   9932 char *toStringListCSGF(const char** object);
   9933 char *toStringDictGF(smallDictt* object);
   9934 char *toStringArrayGF(smallArrayt* object);
   9935 char *toStringSmallBoolGF(smallBoolt* object);
   9936 char *toStringSmallBytesGF(smallBytest* object);
   9937 char *toStringSmallDoubleGF(smallDoublet* object);
   9938 char *toStringSmallIntGF(smallIntt* object);
   9939 char *toStringSmallStringGF(smallStringt* object);
   9940 char *toStringVoidGF(void* object);
   9941 char *toStringSmallContainerGF(smallContainert* object);
   9942 char *toStringSmallJsonGF(smallJsont* object);
   9943 #define toStringG(obj) _Generic((obj), \
   9944   baset*: toStringOF, \
   9945   undefinedt*: toStringUndefinedGF, \
   9946   bool: toStringBoolGF, \
   9947   bool*: toStringBoolPGF, \
   9948   float: toStringFloatGF, \
   9949   float*: toStringFloatPGF, \
   9950   double: toStringDoubleGF, \
   9951   double*: toStringDoublePGF, \
   9952   int64_t: toStringIntGF, \
   9953   int64_t*: toStringIntPGF, \
   9954   int32_t: toStringInt32GF, \
   9955   int32_t*: toStringInt32PGF, \
   9956   int16_t: toStringInt16GF, \
   9957   int16_t*: toStringInt16PGF, \
   9958   uint64_t: toStringUintGF, \
   9959   uint64_t*: toStringUintPGF, \
   9960   uint32_t: toStringUint32GF, \
   9961   uint32_t*: toStringUint32PGF, \
   9962   uint16_t: toStringUint16GF, \
   9963   uint16_t*: toStringUint16PGF, \
   9964   uint8_t: toStringUint8GF, \
   9965   uint8_t*: toStringUint8PGF, \
   9966   char: toStringCharGF, \
   9967   char*: toStringSGF, \
   9968   const char*: toStringSGF, \
   9969   char**: toStringListSGF, \
   9970   const char**: toStringListCSGF, \
   9971   smallDictt*: toStringDictGF, \
   9972   smallArrayt*: toStringArrayGF, \
   9973   smallBoolt*: toStringSmallBoolGF, \
   9974   smallBytest*: toStringSmallBytesGF, \
   9975   smallDoublet*: toStringSmallDoubleGF, \
   9976   smallIntt*: toStringSmallIntGF, \
   9977   smallStringt*: toStringSmallStringGF, \
   9978   void*: toStringVoidGF, \
   9979   smallContainert*: toStringSmallContainerGF, \
   9980   smallJsont*: toStringSmallJsonGF, \
   9981   default: toStringVoidGF \
   9982   )(obj)
   9983 
   9984 /**
   9985  * object to string for debug
   9986  * this function is used for printing an object in gdb, lldb, any debugger, in gdb:
   9987  * p otos(obj)
   9988  * a longer alternative to print an object is:
   9989  * p obj->f->toString(obj)
   9990  */
   9991 char *otos(void *basetObj);
   9992 
   9993 /**
   9994  * puts for objects using toString
   9995  */
   9996 void putsOF(baset* object);
   9997 #define putsO(obj) putsOF((baset *)(obj))
   9998 void putsUndefinedGF(undefinedt* object);
   9999 void putsBoolGF(bool object);
  10000 void putsBoolPGF(bool* object);
  10001 void putsDoubleGF(double object);
  10002 void putsDoublePGF(double* object);
  10003 void putsIntGF(int64_t object);
  10004 void putsIntPGF(int64_t* object);
  10005 void putsInt32GF(int32_t object);
  10006 void putsInt32PGF(int32_t* object);
  10007 void putsUintGF(uint64_t object);
  10008 void putsUintPGF(uint64_t* object);
  10009 void putsUint32GF(uint32_t object);
  10010 void putsUint32PGF(uint32_t* object);
  10011 void putsSGF(const char* object);
  10012 void putsListSGF(char** object);
  10013 void putsListCSGF(const char** object);
  10014 void putsDictGF(smallDictt* object);
  10015 void putsJsonGF(smallJsont* object);
  10016 void putsArrayGF(smallArrayt* object);
  10017 void putsSmallBoolGF(smallBoolt* object);
  10018 void putsSmallBytesGF(smallBytest* object);
  10019 void putsSmallDoubleGF(smallDoublet* object);
  10020 void putsSmallIntGF(smallIntt* object);
  10021 void putsSmallStringGF(smallStringt* object);
  10022 void putsVoidGF(void* object);
  10023 void putsSmallContainerGF(smallContainert* object);
  10024 #define putsG(obj) _Generic((obj), \
  10025   baset*: putsOF, \
  10026   undefinedt*: putsUndefinedGF, \
  10027   bool: putsBoolGF, \
  10028   bool*: putsBoolPGF, \
  10029   double: putsDoubleGF, \
  10030   double*: putsDoublePGF, \
  10031   int64_t: putsIntGF, \
  10032   int64_t*: putsIntPGF, \
  10033   int32_t: putsInt32GF, \
  10034   int32_t*: putsInt32PGF, \
  10035   uint64_t: putsUintGF, \
  10036   uint64_t*: putsUintPGF, \
  10037   uint32_t: putsUint32GF, \
  10038   uint32_t*: putsUint32PGF, \
  10039   char*: putsSGF, \
  10040   const char*: putsSGF, \
  10041   char**: putsListSGF, \
  10042   const char**: putsListCSGF, \
  10043   smallDictt*: putsDictGF, \
  10044   smallJsont*: putsJsonGF, \
  10045   smallArrayt*: putsArrayGF, \
  10046   smallBoolt*: putsSmallBoolGF, \
  10047   smallBytest*: putsSmallBytesGF, \
  10048   smallDoublet*: putsSmallDoubleGF, \
  10049   smallIntt*: putsSmallIntGF, \
  10050   smallStringt*: putsSmallStringGF, \
  10051   void*: putsVoidGF, \
  10052   smallContainert*: putsSmallContainerGF, \
  10053   default: putsVoidGF \
  10054   )(obj)
  10055 
  10056 /**
  10057  * format string
  10058  * allocate and format string using asprintf
  10059  * \param
  10060  *   format string and other parameters
  10061  * \return
  10062  *   allocated and formated string
  10063  *   NULL when fmt is NULL or asprintf fails
  10064  */
  10065 smallStringt *formatO(const char *fmt, ...);
  10066 
  10067 /**
  10068  * execute command
  10069  * return stdout from cmd in *out
  10070  *
  10071  * \param
  10072  *   cmd: command
  10073  * \param
  10074  *   out stdout
  10075  * \param
  10076  *   err stderr
  10077  * \return
  10078  *   stdout from command in a list
  10079  *   empty list when command didnt produce any output
  10080  *   1 success
  10081  *   0 when cmd is NULL or error
  10082  */
  10083 int execO(const char *cmd, smallArrayt *out, smallArrayt *err);
  10084 int execSmallJsonO(smallJsont *cmd, smallArrayt *out, smallArrayt *err);
  10085 int execSmallStringO(smallStringt *cmd, smallArrayt *out, smallArrayt *err);
  10086 
  10087 /**
  10088  * list all files in a directory recursively
  10089  * the directories are not listed
  10090  *
  10091  * \param
  10092  *   dirPath: path to directory
  10093  * \return
  10094  *   list of files
  10095  *   empty list when the directory is not found
  10096  */
  10097 smallArrayt *walkDirO(const char* dirPath);
  10098 smallArrayt *walkDirSmallJsonO(smallJsont* dirPath);
  10099 smallArrayt *walkDirSmallStringO(smallStringt* dirPath);
  10100 
  10101 /**
  10102  * list all directories in a directory recursively
  10103  * and sort the list
  10104  *
  10105  * files are not listed
  10106  *
  10107  * \param
  10108  *   dirPath: path to directory
  10109  * \return
  10110  *   list of directories
  10111  *   empty list when the directory is not found
  10112  */
  10113 smallArrayt *walkDirDirO(const char* dirPath);
  10114 smallArrayt *walkDirDirSmallJsonO(smallJsont* dirPath);
  10115 smallArrayt *walkDirDirSmallStringO(smallStringt* dirPath);
  10116 
  10117 /**
  10118  * list files in a directory
  10119  * and sort the list
  10120  *
  10121  * directories are not listed
  10122  *
  10123  * \param
  10124  *   dirPath: path to directory
  10125  * \return
  10126  *   list of files, dirPath is not prepended to the file names
  10127  *   empty list when the directory is not found
  10128  */
  10129 smallArrayt *readDirO(const char *dirPath);
  10130 smallArrayt *readDirSmallJsonO(smallJsont *dirPath);
  10131 smallArrayt *readDirSmallStringO(smallStringt *dirPath);
  10132 
  10133 /**
  10134  * list directories in a directory
  10135  * and sort the list
  10136  *
  10137  * files are not listed
  10138  *
  10139  * \param
  10140  *   dirPath: path to directory
  10141  * \return
  10142  *   list of directories, dirPath is not prepended to the names
  10143  *   empty list when the directory is not found
  10144  */
  10145 smallArrayt *readDirDirO(const char *dirPath);
  10146 smallArrayt *readDirDirSmallJsonO(smallJsont *dirPath);
  10147 smallArrayt *readDirDirSmallStringO(smallStringt *dirPath);
  10148 
  10149 /**
  10150  * list all files and directories in a directory recursively
  10151  * the directories are listed
  10152  *
  10153  * \param
  10154  *   dirPath: path to directory
  10155  * \return
  10156  *   list of files
  10157  *   empty list when the directory is not found
  10158  */
  10159 smallArrayt *walkDirAllO(const char* dirPath);
  10160 smallArrayt *walkDirAllSmallJsonO(smallJsont* dirPath);
  10161 smallArrayt *walkDirAllSmallStringO(smallStringt* dirPath);
  10162 
  10163 /**
  10164  * list files in a directory
  10165  * and sort the list
  10166  *
  10167  * directories are listed
  10168  *
  10169  * \param
  10170  *   dirPath: path to directory
  10171  * \return
  10172  *   list of files, dirPath is not prepended to the file names
  10173  *   empty list when the directory is not found
  10174  */
  10175 smallArrayt *readDirAllO(const char *dirPath);
  10176 smallArrayt *readDirAllSmallJsonO(smallJsont *dirPath);
  10177 smallArrayt *readDirAllSmallStringO(smallStringt *dirPath);
  10178 
  10179 /**
  10180  * get modification time for path
  10181  *
  10182  * \param
  10183  *   path
  10184  * \return
  10185  *   modification time
  10186  *   0 when an error occured
  10187  */
  10188 time_t getModificationTimeJO(smallJsont *path);
  10189 time_t getModificationTimeO(smallStringt *path);
  10190 
  10191 /**
  10192  * set modification time for path
  10193  *
  10194  * \param
  10195  *   path
  10196  * \param
  10197  *   mtime (for example, from the getModificationTime function)
  10198  * \return
  10199  *   1 success
  10200  *   0 when an error occured
  10201  */
  10202 int setModificationTimeJO(smallJsont *path, time_t mtime);
  10203 int setModificationTimeO(smallStringt *path, time_t mtime);
  10204 
  10205 /**
  10206  * compare modification times for path1 and path2
  10207  *
  10208  * \param
  10209  *   path1
  10210  * \param
  10211  *   path2
  10212  * \return
  10213  *   true when mtime is equal for path1 and path2
  10214  *   false when mtime is different for path1 and path2 or when there is an error
  10215  */
  10216 bool equalModificationTimesJO(smallJsont *path1, smallJsont *path2);
  10217 bool equalModificationTimesSJO(const char *path1, smallJsont *path2);
  10218 bool equalModificationTimesJOS(smallJsont *path1, const char *path2);
  10219 bool equalModificationTimesJOO(smallJsont *path1, smallStringt *path2);
  10220 bool equalModificationTimesOJO(smallStringt *path1, smallJsont *path2);
  10221 bool equalModificationTimesO(smallStringt *path1, smallStringt *path2);
  10222 bool equalModificationTimesSO(const char *path1, smallStringt *path2);
  10223 bool equalModificationTimesOS(smallStringt *path1, const char *path2);
  10224 
  10225 /**
  10226  * time To String
  10227  * convert unix time to string
  10228  * (ctime is not used here because it adds \n at the end of the string)
  10229  *
  10230  * \param
  10231  *   unix time to convert
  10232  * \return
  10233  *   string representing the unix time
  10234  */
  10235 smallJsont *timeToJO(const time_t t);
  10236 smallStringt *timeToSO(const time_t t);
  10237 
  10238 /**
  10239  * sheepy dirname
  10240  *
  10241  * \param
  10242  *   path
  10243  * \return
  10244  *   path without basename (last item in the path)
  10245  *   "./" when path is blank or when there is only one item in the path
  10246  *   NULL when path is NULL
  10247  */
  10248 smallJsont *shDirnameJO(smallJsont *path);
  10249 smallStringt *shDirnameO(smallStringt *path);
  10250 
  10251 /**
  10252  * expands ~/ ($HOME) or ~USER\n
  10253  * duplicate and expand path.
  10254  * \param
  10255  *   path: string
  10256  * \return
  10257  *   path: modified path\n
  10258  *   NULL error
  10259  */
  10260 smallJsont *expandHomeJO(smallJsont *path);
  10261 smallStringt *expandHomeO(smallStringt *path);
  10262 
  10263 /**
  10264  * normalize path
  10265  *
  10266  * remove unecessary /, .. and .
  10267  * leading / is kept
  10268  * leading . is removed
  10269  *
  10270  * '/../' becomes '/'
  10271  *
  10272  * \param
  10273  *   path
  10274  * \return
  10275  *   path: modified path
  10276  *   NULL when path is NULL
  10277  */
  10278 smallJsont *normalizePathJO(smallJsont *path);
  10279 smallStringt *normalizePathO(smallStringt *path);
  10280 
  10281 /**
  10282  * get current working directory
  10283  *
  10284  * \return
  10285  *   current path
  10286  */
  10287 smallJsont *getCwdJO(void);
  10288 smallStringt *getCwdO(void);
  10289 
  10290 /**
  10291  * change directory
  10292  *
  10293  * \param
  10294  *   path
  10295  * \return
  10296  *    1 success
  10297  *    0 error
  10298  */
  10299 int chDirJO(smallJsont *path);
  10300 int chDirO(smallStringt *path);
  10301 
  10302 /**
  10303  * is directory
  10304  *
  10305  * \param
  10306  *  path
  10307  * \return
  10308  *  true when path is a directory
  10309  *  false path is not a directory, filePath is NULL or empty string
  10310  */
  10311 bool isDirJO(smallJsont *path);
  10312 bool isDirO(smallStringt *path);
  10313 
  10314 /**
  10315  * is symbolic link
  10316  *
  10317  * \param
  10318  *  path
  10319  * \return
  10320  *  true when path is a symbolic link
  10321  *  false path is not a symbolic link, filePath is NULL or empty string
  10322  */
  10323 bool isLinkJO(smallJsont *path);
  10324 bool isLinkO(smallStringt *path);
  10325 
  10326 /**
  10327  * detect files and directories
  10328  *
  10329  * \param
  10330  *   filePath: path to file or directory
  10331  * \return
  10332  *   true exists
  10333  *   false non existant
  10334  *   false filePath is NULL or empty string
  10335  */
  10336 bool fileExistsJO(smallJsont *filePath);
  10337 bool fileExistsO(smallStringt *filePath);
  10338 
  10339 /**
  10340  * like chmod in stdlibc but return true/false
  10341  * \param
  10342  *   filePath: path to file or directory
  10343  *   mode: permissions
  10344  * \return
  10345  *   true success
  10346  *   false filePath doesnt exist, not enough permissions...
  10347  *   false filePath is NULL or empty string
  10348  */
  10349 bool fileChmodJO(smallJsont *filePath, mode_t mode);
  10350 bool fileChmodO(smallStringt *filePath, mode_t mode);
  10351 
  10352 /**
  10353  * get file size
  10354  *
  10355  * \param
  10356  *   filePath: path to file
  10357  * \return
  10358  *   ssize_t >= 0 size
  10359  *   -1 an error occured or filePath is NULL or empty string
  10360  */
  10361 ssize_t fileSizeJO(smallJsont *filePath);
  10362 ssize_t fileSizeO(smallStringt *filePath);
  10363 
  10364 /**
  10365  * call readFileToS (for readFileG)
  10366  */
  10367 void *readFileToNewG(void *none UNUSED, const char *filePath);
  10368 void *readStreamToNewG(void *none UNUSED, FILE *fp);
  10369 char *readFileToG(char **string, const char *filePath);
  10370 char *readStreamToG(char **string, FILE *fp);
  10371 
  10372 void readTextSmallJsonNotSupported(char ***self UNUSED, smallJsont *path UNUSED);
  10373 void readTextSmallStringNotSupported(char ***self UNUSED, smallStringt *path UNUSED);
  10374 void readToFileSmallJsonNotSupported(void *self UNUSED, smallJsont *path UNUSED);
  10375 void readToFileSmallStringNotSupported(void *self UNUSED, smallStringt *path UNUSED);
  10376 
  10377 /**
  10378  * call writeFileS (for writeFileG)
  10379  * (swaps parameters)
  10380  */
  10381 int writeFileFromG(const char *string, const char *filePath);
  10382 int writeStreamFromG(const char *string, FILE *fp);
  10383 
  10384 int writeTextSmallJsonNotSupported(char **self UNUSED, smallJsont *path UNUSED);
  10385 int writeTextSmallStringNotSupported(char **self UNUSED, smallStringt *path UNUSED);
  10386 int writeTextCCSmallJsonNotSupported(const char **self UNUSED, smallJsont *path UNUSED);
  10387 int writeTextCCSmallStringNotSupported(const char **self UNUSED, smallStringt *path UNUSED);
  10388 
  10389 /**
  10390  * call readText (for readFileG)
  10391  */
  10392 char **readTextSG(char ***list, const char *filePath);
  10393 char **readTextStreamG(char ***list, FILE *fp);
  10394 
  10395 /**
  10396  * call writeText (for writeFileG)
  10397  * (swaps parameters)
  10398  */
  10399 bool writeTextSG(char **list, const char *filePath);
  10400 bool writeTextStreamG(char **list, FILE *fp);
  10401 bool writeTextCG(const char **list, const char *filePath);
  10402 bool writeTextStreamCG(const char **list, FILE *fp);
  10403 
  10404 /**
  10405  * call appendFileS (for appendFileG)
  10406  * (swaps parameters)
  10407  */
  10408 bool appendFileSG(const char *string, const char *filePath);
  10409 
  10410 /**
  10411  * call appendText (for appendFileG)
  10412  * (swaps parameters)
  10413  */
  10414 bool appendTextSG(char **list, const char *filePath);
  10415 bool appendTextCG(const char **list, const char *filePath);
  10416 
  10417 /**
  10418  * recursive mkdir
  10419  *
  10420  * \param
  10421  *   path
  10422  * \return
  10423  *   1 success
  10424  *   0 when path is NULL or empty
  10425  */
  10426 int mkdirParentsSmallJsonO(smallJsont* path);
  10427 int mkdirParentsO(smallStringt* path);
  10428 
  10429 /**
  10430  * remove all
  10431  * delete recursively files and directories
  10432  *
  10433  * \param
  10434  *   path
  10435  * \return
  10436  *   1 success
  10437  *   0 when path is NULL or empty
  10438  */
  10439 int rmAllSmallJsonO(smallJsont* path);
  10440 int rmAllO(smallStringt* path);
  10441 
  10442 /**
  10443  * copy files recursively
  10444  *
  10445  * \param
  10446  *   src source path
  10447  *   dst destination path
  10448  * \return
  10449  *   1 success
  10450  *   0 when src or dst are NULL or empty
  10451  */
  10452 int copyO(smallStringt* src, smallStringt* dst);
  10453 int copySSmallJsonO(const char* src, smallJsont* dst);
  10454 int copySO(const char* src, smallStringt* dst);
  10455 int copySmallJsonOS(smallJsont* src, const char* dst);
  10456 int copySmallJsonSmallJson(smallJsont* src, smallJsont* dst);
  10457 int copySmallJsonO(smallJsont* src, smallStringt* dst);
  10458 int copyOS(smallStringt* src, const char* dst);
  10459 int copyOSmallJson(smallStringt* src, smallJsont* dst);
  10460 
  10461 /**
  10462  * rename file
  10463  *
  10464  * \param
  10465  *   src source path
  10466  *   dst destination path
  10467  * \return
  10468  *   1 success
  10469  *   0 when src or dst are NULL or empty
  10470  */
  10471 int renameSmallJsonO(smallJsont* src, smallStringt* dst);
  10472 int renameSmallJsonSmallJson(smallJsont* src, smallJsont* dst);
  10473 int renameSmallJsonOS(smallJsont* src, const char* dst);
  10474 int renameO(smallStringt* src, smallStringt* dst);
  10475 int renameOSmallJson(smallStringt* src, smallJsont* dst);
  10476 int renameSSmallJsonO(const char* src, smallJsont* dst);
  10477 int renameSO(const char* src, smallStringt* dst);
  10478 int renameOS(smallStringt* src, const char* dst);
  10479 
  10480 /**
  10481  * move files recursively
  10482  *
  10483  * copy and then delete source
  10484  *
  10485  * \param
  10486  *   src source path
  10487  *   dst destination path
  10488  * \return
  10489  *   1 success
  10490  *   0 when src or dst are NULL or empty
  10491  */
  10492 int moveSmallJsonO(smallJsont* src, smallStringt* dst);
  10493 int moveSmallJsonSmallJson(smallJsont* src, smallJsont* dst);
  10494 int moveSmallJsonOS(smallJsont* src, const char* dst);
  10495 int moveO(smallStringt* src, smallStringt* dst);
  10496 int moveOSmallJson(smallStringt* src, smallJsont* dst);
  10497 int moveSSmallJsonO(const char* src, smallJsont* dst);
  10498 int moveSO(const char* src, smallStringt* dst);
  10499 int moveOS(smallStringt* src, const char* dst);
  10500 
  10501 /**
  10502  * random string
  10503  *
  10504  * allocate and generate a random string in charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-,"
  10505  *
  10506  *
  10507  * \param
  10508  *   string length
  10509  * \return
  10510  *   random string
  10511  *   NULL error opening /dev/urandom, malloc failed, fread /dev/urandom failed, length is 0
  10512  */
  10513 smallJsont *randomSmallJsonO(uint64_t length);
  10514 smallStringt *randomSO(uint64_t length);
  10515 
  10516 /**
  10517  * random alpha numerical string
  10518  *
  10519  * allocate and generate a random string in charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  10520  *
  10521  *
  10522  * \param
  10523  *   string length
  10524  * \return
  10525  *   random string
  10526  *   NULL error opening /dev/urandom, malloc failed, fread /dev/urandom failed, length is 0
  10527  */
  10528 smallJsont *randomAlphaNumSmallJsonO(uint64_t length);
  10529 smallStringt *randomAlphaNumSO(uint64_t length);
  10530 
  10531 /**
  10532  * read String
  10533  * read user input (one line) as a string
  10534  *
  10535  * \return
  10536  *   line from the user
  10537  *   NULL when buffer allocation failed
  10538  */
  10539 smallJsont *readSmallJsonO(void);
  10540 smallStringt *readO(void);
  10541 
  10542 /**
  10543  * readLine from file stream
  10544  * the fist new line is converted to 0
  10545  *
  10546  * \param
  10547  *   fp: file stream
  10548  * \return
  10549  *   one line in a string
  10550  *   empty string when stream is empty
  10551  *   NULL when the stream is NULL or when there is an error reading the stream
  10552  */
  10553 smallJsont *readLineSmallJsonO(FILE *fp);
  10554 smallStringt *readLineO(FILE *fp);
  10555 
  10556 /**
  10557  * call intToS for intToG
  10558  */
  10559 char *intToSG(char *retType UNUSED, int64_t n);
  10560 
  10561 /**
  10562  * call doubleToS for doubleToG
  10563  */
  10564 char *doubleToSG(char *retType UNUSED, double n);
  10565 
  10566 /**
  10567  * call iListUniqS for uniqG
  10568  */
  10569 char **iListUniqG(char ***list, int dum UNUSED);
  10570 
  10571 /**
  10572  * call iicListUniqS for icUniqG
  10573  */
  10574 char **iicListUniqG(char ***list, int dum UNUSED);
  10575 
  10576 /**
  10577  * call listFromArrayS for fromArrayG
  10578  */
  10579 char **listFromArrayG(char **retType UNUSED, char **array, size_t size);
  10580 char **listFromCArrayG(char **retType UNUSED, const char **array, size_t size);
  10581 
  10582 /**
  10583  * call getS for getG
  10584  */
  10585 char getSG(const char *string, int retType UNUSED, int64_t index);
  10586 
  10587 /**
  10588  * call listGetS for getG
  10589  */
  10590 char *listGetG(char **list, int retType UNUSED, int64_t index);
  10591 char *listGetCG(const char **list, int retType UNUSED, int64_t index);
  10592 
  10593 /**
  10594  * call iListGetS for getG
  10595  */
  10596 char *iListGetG(char **list, int retType UNUSED, int64_t index);
  10597 const char *iListGetCG(const char **list, int retType UNUSED, int64_t index);
  10598 
  10599 /**
  10600  * call listPopS for popG
  10601  */
  10602 char *listPopG(char ***list, int retType UNUSED);
  10603 
  10604 /**
  10605  * call listDequeueS for dequeueG
  10606  */
  10607 char *listDequeueG(char ***list, int retType UNUSED);
  10608 
  10609 char **listDupCG(const char **list);
  10610 
  10611 bool listEqCG(char **list1, const char **list2);
  10612 bool listEqC1G(const char **list1, char **list2);
  10613 bool listEqCCG(const char **list1, const char **list2);
  10614 bool icListEqCG(char **list1, const char **list2);
  10615 bool icListEqC1G(const char **list1, char **list2);
  10616 bool icListEqCCG(const char **list1, const char **list2);
  10617 
  10618 size_t listLengthCG(const char **list);
  10619 
  10620 ssize_t listIndexOfCG(const char **list, const char *string);
  10621 ssize_t listIndexOfCharCG(const char **list, char c);
  10622 ssize_t icListIndexOfCG(const char **list, const char *string);
  10623 ssize_t icListIndexOfCharCG(const char **list, char c);
  10624 
  10625 bool listHasCG(const char **list, const char *string);
  10626 bool listHasCharCG(const char **list, char c);
  10627 bool icListHasCG(const char **list, const char *string);
  10628 bool icListHasCharCG(const char **list, char c);
  10629 
  10630 char *joinCG(const char **list, const char* delim);
  10631 char *joinCharCG(const char **list, char delim);
  10632 
  10633 char **listAddCG(char **list1, const char **list2);
  10634 
  10635 int listPrintCG(const char **list);
  10636 
  10637 
  10638 /**
  10639  * equality functions
  10640  */
  10641 bool eqCharChar(char c, char value);
  10642 bool equalChaOG(char c, baset* value);
  10643 bool equalChaBoolG(char c UNUSED, bool value UNUSED);
  10644 bool equalChaDoubleG(char c, double value);
  10645 bool equalChaInt64G(char c, int64_t value);
  10646 bool equalChaInt32G(char c, int32_t value);
  10647 bool equalChaUint32G(char c, uint32_t value);
  10648 bool equalChaUint64G(char c, uint64_t value);
  10649 bool equalChaSmallBytesG(char c, smallBytest* value);
  10650 bool equalChaSmallDoubleG(char c, smallDoublet* value);
  10651 bool equalChaSmallIntG(char c, smallIntt* value);
  10652 bool equalChaSmallJsonG(char c, smallJsont* value);
  10653 bool equalChaSmallStringG(char c, smallStringt* value);
  10654 bool equalCharOG(const char *s, baset* value);
  10655 bool equalCharBoolG(const char *s, bool value);
  10656 bool equalCharDoubleG(const char *s, double value);
  10657 bool equalCharInt64G(const char *s, int64_t value);
  10658 bool equalCharInt32G(const char *s, int32_t value);
  10659 bool equalCharUint32G(const char *s, uint32_t value);
  10660 bool equalCharUint64G(const char *s, uint64_t value);
  10661 bool equalCharSmallBoolG(const char *s, smallBoolt* value);
  10662 bool equalCharSmallBytesG(const char *s, smallBytest* value);
  10663 bool equalCharSmallDoubleG(const char *s, smallDoublet* value);
  10664 bool equalCharSmallIntG(const char *s, smallIntt* value);
  10665 bool equalCharPSmallJsonG(const char *s, smallJsont* value);
  10666 bool equalCharPSmallStringG(const char *s, smallStringt* value);
  10667 bool equalArrayOG(char ** p1, baset* p2);
  10668 bool equalCArrayOG(const char ** p1, baset* p2);
  10669 bool equalArraySmallJsonG(char ** p1, smallJsont* p2);
  10670 bool equalArraySmallArrayG(char ** p1, smallArrayt* p2);
  10671 bool equalCArraySmallJsonG(const char ** p1, smallJsont* p2);
  10672 bool equalCArraySmallArrayG(const char ** p1, smallArrayt* p2);
  10673 bool equalOChaG(baset* p1, char p2);
  10674 bool equalOCharG(baset* p1, const char * p2);
  10675 bool equalOArrayG(baset* p1, char ** p2);
  10676 bool equalOCArrayG(baset* p1, const char ** p2);
  10677 bool equalOOG(baset* p1, baset* p2);
  10678 bool equalOBoolG(baset* p1, bool p2);
  10679 bool equalODoubleG(baset* p1, double p2);
  10680 bool equalOInt64G(baset* p1, int64_t p2);
  10681 bool equalOInt32G(baset* p1, int32_t p2);
  10682 bool equalOUint32G(baset* p1, uint32_t p2);
  10683 bool equalOUint64G(baset* p1, uint64_t p2);
  10684 bool equalOSmallArrayG(baset* p1, smallArrayt* p2);
  10685 bool equalOSmallBoolG(baset* p1, smallBoolt* p2);
  10686 bool equalOSmallBytesG(baset* p1, smallBytest* p2);
  10687 bool equalOSmallDoubleG(baset* p1, smallDoublet* p2);
  10688 bool equalOSmallDictG(baset* p1, smallDictt* p2);
  10689 bool equalOSmallIntG(baset* p1, smallIntt* p2);
  10690 bool equalOSmallJsonG(baset* p1, smallJsont* p2);
  10691 bool equalOSmallStringG(baset* p1, smallStringt* p2);
  10692 bool equalBoolChaG(bool p1 UNUSED, char p2 UNUSED);
  10693 bool equalBoolCharG(bool p1, const char * p2);
  10694 bool equalBoolOG(bool p1, baset* p2);
  10695 bool equalBoolFG(bool p1, bool p2);
  10696 bool equalBoolDoubleG(bool p1, double p2);
  10697 bool equalBoolInt64G(bool p1, int64_t p2);
  10698 bool equalBoolInt32G(bool p1, int32_t p2);
  10699 bool equalBoolUint32G(bool p1, uint32_t p2);
  10700 bool equalBoolUint64G(bool p1, uint64_t p2);
  10701 bool equalBoolSmallBoolG(bool p1, smallBoolt* p2);
  10702 bool equalBoolSmallBytesG(bool p1, smallBytest* p2);
  10703 bool equalBoolSmallDoubleG(bool p1, smallDoublet* p2);
  10704 bool equalBoolSmallIntG(bool p1, smallIntt* p2);
  10705 bool equalBoolSmallJsonG(bool p1, smallJsont* p2);
  10706 bool equalBoolSmallStringG(bool p1, smallStringt* p2);
  10707 bool equalDoubleChaG(double p1, char p2);
  10708 bool equalDoubleCharG(double p1, const char * p2);
  10709 bool equalDoubleBaseG(double p1, baset* p2);
  10710 bool equalDoubleBoolG(double p1, bool p2);
  10711 bool equalDoubleFG(double p1, double p2);
  10712 bool equalDoubleInt64G(double p1, int64_t p2);
  10713 bool equalDoubleInt32G(double p1, int32_t p2);
  10714 bool equalDoubleUint32G(double p1, uint32_t p2);
  10715 bool equalDoubleUint64G(double p1, uint64_t p2);
  10716 bool equalDoubleSmallBoolG(double p1, smallBoolt* p2);
  10717 bool equalDoubleSmallBytesG(double p1, smallBytest* p2);
  10718 bool equalDoubleSmallDoubleG(double p1, smallDoublet* p2);
  10719 bool equalDoubleSmallIntG(double p1, smallIntt* p2);
  10720 bool equalDoubleSmallJsonG(double p1, smallJsont* p2);
  10721 bool equalDoubleSmallStringG(double p1, smallStringt* p2);
  10722 bool equalInt64ChaG(int64_t p1, char p2);
  10723 bool equalInt64CharG(int64_t p1, const char * p2);
  10724 bool equalInt64BaseG(int64_t p1, baset* p2);
  10725 bool equalInt64BoolG(int64_t p1, bool p2);
  10726 bool equalInt64DoubleG(int64_t p1, double p2);
  10727 bool equalInt64FG(int64_t p1, int64_t p2);
  10728 bool equalInt64Int32G(int64_t p1, int32_t p2);
  10729 bool equalInt64Uint32G(int64_t p1, uint32_t p2);
  10730 bool equalInt64Uint64G(int64_t p1, uint64_t p2);
  10731 bool equalInt64SmallBoolG(int64_t p1, smallBoolt* p2);
  10732 bool equalInt64SmallBytesG(int64_t p1, smallBytest* p2);
  10733 bool equalInt64SmallDoubleG(int64_t p1, smallDoublet* p2);
  10734 bool equalInt64SmallIntG(int64_t p1, smallIntt* p2);
  10735 bool equalInt64SmallJsonG(int64_t p1, smallJsont* p2);
  10736 bool equalInt64SmallStringG(int64_t p1, smallStringt* p2);
  10737 bool equalInt32ChaG(int32_t p1, char p2);
  10738 bool equalInt32CharG(int32_t p1, const char * p2);
  10739 bool equalInt32BaseG(int32_t p1, baset* p2);
  10740 bool equalInt32BoolG(int32_t p1, bool p2);
  10741 bool equalInt32DoubleG(int32_t p1, double p2);
  10742 bool equalInt32Int64G(int32_t p1, int64_t p2);
  10743 bool equalInt32FG(int32_t p1, int32_t p2);
  10744 bool equalInt32Uint32G(int32_t p1, uint32_t p2);
  10745 bool equalInt32Uint64G(int32_t p1, uint64_t p2);
  10746 bool equalInt32SmallBoolG(int32_t p1, smallBoolt* p2);
  10747 bool equalInt32SmallBytesG(int32_t p1, smallBytest* p2);
  10748 bool equalInt32SmallDoubleG(int32_t p1, smallDoublet* p2);
  10749 bool equalInt32SmallIntG(int32_t p1, smallIntt* p2);
  10750 bool equalInt32SmallJsonG(int32_t p1, smallJsont* p2);
  10751 bool equalInt32SmallStringG(int32_t p1, smallStringt* p2);
  10752 bool equalUint32ChaG(uint32_t p1, char p2);
  10753 bool equalUint32CharG(uint32_t p1, const char * p2);
  10754 bool equalUint32BaseG(uint32_t p1, baset* p2);
  10755 bool equalUint32BoolG(uint32_t p1, bool p2);
  10756 bool equalUint32DoubleG(uint32_t p1, double p2);
  10757 bool equalUint32Int64G(uint32_t p1, int64_t p2);
  10758 bool equalUint32Int32G(uint32_t p1, int32_t p2);
  10759 bool equalUint32FG(uint32_t p1, uint32_t p2);
  10760 bool equalUint32Uint64G(uint32_t p1, uint64_t p2);
  10761 bool equalUint32SmallBoolG(uint32_t p1, smallBoolt* p2);
  10762 bool equalUint32SmallBytesG(uint32_t p1, smallBytest* p2);
  10763 bool equalUint32SmallDoubleG(uint32_t p1, smallDoublet* p2);
  10764 bool equalUint32SmallIntG(uint32_t p1, smallIntt* p2);
  10765 bool equalUint32SmallJsonG(uint32_t p1, smallJsont* p2);
  10766 bool equalUint32SmallStringG(uint32_t p1, smallStringt* p2);
  10767 bool equalUint64ChaG(uint64_t p1, char p2);
  10768 bool equalUint64CharG(uint64_t p1, const char * p2);
  10769 bool equalUint64BaseG(uint64_t p1, baset* p2);
  10770 bool equalUint64BoolG(uint64_t p1, bool p2);
  10771 bool equalUint64DoubleG(uint64_t p1, double p2);
  10772 bool equalUint64Int64G(uint64_t p1, int64_t p2);
  10773 bool equalUint64Int32G(uint64_t p1, int32_t p2);
  10774 bool equalUint64Uint32G(uint64_t p1, uint32_t p2);
  10775 bool equalUint64FG(uint64_t p1, uint64_t p2);
  10776 bool equalUint64SmallBoolG(uint64_t p1, smallBoolt* p2);
  10777 bool equalUint64SmallBytesG(uint64_t p1, smallBytest* p2);
  10778 bool equalUint64SmallDoubleG(uint64_t p1, smallDoublet* p2);
  10779 bool equalUint64SmallIntG(uint64_t p1, smallIntt* p2);
  10780 bool equalUint64SmallJsonG(uint64_t p1, smallJsont* p2);
  10781 bool equalUint64SmallStringG(uint64_t p1, smallStringt* p2);
  10782 
  10783 /**
  10784  * return false, used in eqG when object types don't match
  10785  */
  10786 bool notEqualCharG(char c UNUSED, void *value UNUSED);
  10787 bool notEqualOCharG(void *a UNUSED, char c UNUSED);
  10788 bool notEqualOG(void *a UNUSED, void *b UNUSED);
  10789 bool notEqualCCOG(const char *a UNUSED, void *b UNUSED);
  10790 bool notEqualBoolOG(bool p1 UNUSED, void *p2 UNUSED);
  10791 bool notEqualDoubleOG(double p1 UNUSED, void *p2 UNUSED);
  10792 bool notEqualInt64OG(int64_t p1 UNUSED, void *p2 UNUSED);
  10793 bool notEqualInt32OG(int32_t p1 UNUSED, void *p2 UNUSED);
  10794 bool notEqualUint32OG(uint32_t p1 UNUSED, void *p2 UNUSED);
  10795 bool notEqualUint64OG(uint64_t p1 UNUSED, void *p2 UNUSED);
  10796 bool notEqualOBoolG(void *p1 UNUSED, bool p2 UNUSED);
  10797 bool notEqualDoubleG(void *p1 UNUSED, double p2 UNUSED);
  10798 bool notEqualOInt64G(void *p1 UNUSED, int64_t p2 UNUSED);
  10799 bool notEqualOInt32G(void *p1 UNUSED, int32_t p2 UNUSED);
  10800 bool notEqualOUint32G(void *p1 UNUSED, uint32_t p2 UNUSED);
  10801 bool notEqualOUint64G(void *p1 UNUSED, uint64_t p2 UNUSED);
  10802 
  10803 /**
  10804  * ignore case equality functions
  10805  */
  10806 bool icEqCharChar(char c, char value);
  10807 bool icEqualChaOG(char c, baset* value);
  10808 bool icEqualChaSmallJsonG(char c, smallJsont* value);
  10809 bool icEqualChaSmallStringG(char c, smallStringt* value);
  10810 bool icEqualCharOG(const char *s, baset* value);
  10811 bool icEqualCharPSmallJsonG(const char *s, smallJsont* value);
  10812 bool icEqualCharPSmallStringG(const char *s, smallStringt* value);
  10813 bool icEqualArrayOG(char ** p1, baset* p2);
  10814 bool icEqualCArrayOG(const char ** p1, baset* p2);
  10815 bool icEqualArraySmallJsonG(char ** p1, smallJsont* p2);
  10816 bool icEqualArraySmallArrayG(char ** p1, smallArrayt* p2);
  10817 bool icEqualCArraySmallJsonG(const char ** p1, smallJsont* p2);
  10818 bool icEqualCArraySmallArrayG(const char ** p1, smallArrayt* p2);
  10819 bool icEqualOChaG(baset* p1, char p2);
  10820 bool icEqualOCharG(baset* p1, const char * p2);
  10821 bool icEqualOArrayG(baset* p1, char ** p2);
  10822 bool icEqualOCArrayG(baset* p1, const char ** p2);
  10823 bool icEqualOOG(baset* p1, baset* p2);
  10824 bool icEqualOSmallArrayG(baset* p1, smallArrayt* p2);
  10825 bool icEqualOSmallDictG(baset* p1, smallDictt* p2);
  10826 bool icEqualOSmallJsonG(baset* p1, smallJsont* p2);
  10827 bool icEqualOSmallStringG(baset* p1, smallStringt* p2);
  10828 
  10829 /**
  10830  * convert baset object to smallt
  10831  */
  10832 smallt *toSmallt(baset *obj);
  10833 
  10834 /**
  10835  * convert smallt object to baset
  10836  */
  10837 baset *toBaset(smallt *obj);
  10838 
  10839 /**
  10840  * atomic and concurent data structrures
  10841  */
  10842 
  10843 
  10844 #define abool atomic_bool
  10845 #define aflag atomic_flag
  10846 #define ai64 atomic_int_fast64_t
  10847 
  10848 #define aflagClear(flag) atomic_flag_clear(&(flag))
  10849 #define aflagTestNSet(flag) atomic_flag_test_and_set(&(flag))
  10850 #define aStore(obj, desired) atomic_store(&(obj), desired)
  10851 #define aLoad(obj) atomic_load(&(obj))
  10852 #define aCompareExchangeStrong(obj, expected, desired) atomic_compare_exchange_strong(&(obj), &(expected), desired)
  10853 #define aFetchAdd(obj, valueToAdd) atomic_fetch_add(&(obj), valueToAdd)
  10854 #define aFetchSub(obj, valueToSub) atomic_fetch_sub(&(obj), valueToSub)
  10855 
  10856 /**
  10857  * atomic static array
  10858  *
  10859  * WARNING: According to my tests, using a spinlock slows down the execution by 100%,
  10860  * something that takes 4sec with 2 thread would take 8sec with the spinlock
  10861  *
  10862  * this type of array has a static maximum element count (fixed)
  10863  * it is used as a circular buffer, queue, fifo...
  10864  *
  10865  * atomic staticArray is a concurrent data structure
  10866  * when the data stucture is accessed, it needs to be locked with aStaticArrayAcquire
  10867  * and released with aStaticArrayRelease, the lock should be as short as possible
  10868  *
  10869  * there are macros specific to the atomic staticArray otherwise use the regular
  10870  * staticArray macros with acquire and release around:
  10871  * aStaticArrayT, aStaticArrayInit, aStaticArrayAcquire and aStaticArrayRelease
  10872  *
  10873  * no sanity checks are done
  10874  *
  10875  * Usage:
  10876  *
  10877  * to declare an array:
  10878  *
  10879  * typedef struct {
  10880  *   int a;
  10881  *   char *key;
  10882  * } element;
  10883  *
  10884  * aStaticArrayT(typeName, element, 10);
  10885  *
  10886  * typeName array;
  10887  * aStaticArrayInit(array);
  10888  *
  10889  * aStaticArrayAcquire(array);
  10890  * if (!staticArrayIsFull(a)) {
  10891  *   staticArrayPush(array);
  10892  *   staticArrayLast(array).a = fork();
  10893  * }
  10894  * aStaticArrayRelease(array);
  10895  *
  10896  * aStaticArrayAcquire(array);
  10897  * if (!staticArrayIsEmpty(array)) {
  10898  *   val = staticArrayLast(array).a;
  10899  *   staticArrayPop(array);
  10900  * }
  10901  * aStaticArrayRelease(array);
  10902  *
  10903  * Array variables:
  10904  * array.list:     elements
  10905  * array.maxCount: maximum element count allowed
  10906  *
  10907  * Note: some functions are macros to be able to have structs as element and
  10908  *       access the struct members directly, for example:
  10909  *         staticArrayLast(chan).a = 0;
  10910  */
  10911 
  10912 /**
  10913  * base type for atomic staticArrays
  10914  */
  10915 #if (!__OpenBSD__) && ! defined(__TINYC__)  && (__GNUC__ > 4)
  10916 typedef struct {
  10917   i64 last; // last element
  10918   i64 head;
  10919   i64 maxCount;
  10920   bool isEmpty;
  10921   /* atomic spinlock */
  10922   #if (!__OpenBSD__)
  10923   aflag access;
  10924   #endif
  10925 } aStaticArrayBase;
  10926 #endif // (!__OpenBSD__) && ! defined(__TINYC__)  && (__GNUC__ > 4)
  10927 
  10928 /**
  10929  * declares type for atomic staticArray
  10930  *
  10931  * \param
  10932  * typeName atomic staticArray type name
  10933  * \param
  10934  * element type of elements (int, struct, pointer...)
  10935  * \pointer
  10936  * MAXCOUNT array/ring buffer size
  10937  */
  10938 #define aStaticArrayT(typeName, element, MAXCOUNT)\
  10939   typedef struct {\
  10940     i64 last;\
  10941     i64 head;\
  10942     i64 maxCount;\
  10943     bool isEmpty;\
  10944     /* atomic spinlock */\
  10945     aflag access;\
  10946     element list[MAXCOUNT];\
  10947   } typeName;
  10948 
  10949 /**
  10950  * initialize count in array
  10951  *
  10952  * \param
  10953  * name variable name for the atomic staticArray
  10954  */
  10955 #define aStaticArrayInit(name)\
  10956   do{\
  10957     staticArrayInit(name);\
  10958     aflagClear((name).access);\
  10959   } while(0);
  10960 
  10961 /**
  10962  * acquire access to the atomic staticArray
  10963  * this is an atomic spinlock
  10964  */
  10965 #define aStaticArrayAcquire(name) while(aflagTestNSet((name).access));
  10966 
  10967 /**
  10968  * release the previously acquired atomic staticArray
  10969  * clear the atomic flag in the spinlock
  10970  */
  10971 #define aStaticArrayRelease(name) aflagClear((name).access);
  10972 
  10973 /**
  10974  * atomic indexer is an atomic staticArray without the list
  10975  * It indexes an independent array
  10976  *
  10977  * atomic indexer is a concurrent data structure
  10978  * when the data stucture is accessed, it needs to be locked with aIndexerAcquire
  10979  * and released with aIndexerRelease, the lock should be as short as possible
  10980  *
  10981  * there are macros specific to the atomic indexer otherwise use the regular
  10982  * indexer macros with acquire and release around:
  10983  * aIndexer, aIndexerT, aIndexerInit, aIndexerAcquire and aIndexerRelease
  10984  *
  10985  * no sanity checks are done
  10986  *
  10987  * Usage:
  10988  *
  10989  * declare an array:
  10990  * char array[10][5];
  10991  *
  10992  * declare an indexer:
  10993  * aIndexer indx;
  10994  *
  10995  * or declare an indexer with smaller counters (default is int64_t):
  10996  * aIndexerT(typeName, atomic_schar);
  10997  * typeName indx;
  10998  *
  10999  * aIndexerInit(indx, 10);
  11000  *
  11001  * aIndexerAcquire(indx);
  11002  * indexerPush(indx);
  11003  * array[indexerLast(indx)][0] = '0';
  11004  * aIndexerRelease(indx);
  11005  *
  11006  * // or
  11007  * aIndexerAcquire(indx);
  11008  * indexerPush(indx);
  11009  * array[indx.last][0] = '0';
  11010  * aIndexerRelease(indx);
  11011  *
  11012  * aIndexerAcquire(indx);
  11013  * indexerPop(indx);
  11014  * aIndexerRelease(indx);
  11015  *
  11016  * // accessing the first/head element
  11017  *
  11018  * aIndexerAcquire(indx);
  11019  * char c = array[indexerFirst(indx)][0];
  11020  * aIndexerRelease(indx);
  11021  *
  11022  * aIndexerAcquire(indx);
  11023  * char c = array[indx.head][0];
  11024  * aIndexerRelease(indx);
  11025  *
  11026  *
  11027  */
  11028 
  11029 /**
  11030  * base type, same as staticArray
  11031  */
  11032 #define aIndexer aStaticArrayBase
  11033 
  11034 /**
  11035  * declare an atomic indexer type with INT_TYPE counters instead of the default i64
  11036  * INT_TYPE has to be signed integer
  11037  */
  11038 #define aIndexerT(typeName, INT_TYPE)\
  11039   typedef struct {\
  11040     INT_TYPE last;\
  11041     INT_TYPE head;\
  11042     INT_TYPE maxCount;\
  11043     abool isEmpty;\
  11044     /* atomic spinlock */\
  11045     aflag access;\
  11046   } typeName;
  11047 
  11048 /**
  11049  * initialize count in atomic indexer
  11050  *
  11051  * \param
  11052  * name variable name for the atomic indexer
  11053  * \param
  11054  * MAXCOUNT max count for name type
  11055  */
  11056 #define aIndexerInit(name, MAXCOUNT)\
  11057   do{\
  11058     indexerInit(name, MAXCOUNT);\
  11059     aflagClear((name).access);\
  11060   } while(0);
  11061 
  11062 /**
  11063  * acquire access to the atomic indexer
  11064  * this is an atomic spinlock
  11065  */
  11066 #define aIndexerAcquire aStaticArrayAcquire
  11067 
  11068 /**
  11069  * release the previously acquired atomic indexer
  11070  * clear the atomic flag in the spinlock
  11071  */
  11072 #define aIndexerRelease aStaticArrayRelease
  11073 
  11074 
  11075 /*
  11076  * END - atomic and concurent data structrures
  11077  */
  11078 
  11079 /**
  11080  * return number of online CPUs, also number of threads in the thread pool
  11081  */
  11082 int cpuCount(void);
  11083 
  11084 /**
  11085  * function pointer freeing the unused containers of a class in a thread
  11086  */
  11087 typedef void (*recycleContainersFt)(void *arg);
  11088 
  11089 /**
  11090  * register function freeing the unused containers
  11091  * a finalizeRecycle must be registered for each class in order to avoid memory leaks
  11092  */
  11093 unsigned registerFinalizeRecycleContainersInThreadPool(recycleContainersFt f);
  11094 
  11095 /**
  11096  * function called automatically (registered in tpool) when a thread exits
  11097  * This function calls all the registered finalizeRecycle functions
  11098  */
  11099 void finalizeLibsheepyRecycleContainers(void *arg UNUSED);
  11100 
  11101 /**
  11102  * disable finalizeLibsheepy since it is called automatically at exit.
  11103  */
  11104 //void finalizeLibsheepy(void);
  11105 #define finalizeLibsheepy()
  11106 /**
  11107  * free class methods for all classes
  11108  * the objects and classes are not usuable after this
  11109  * an object has to be created for the class to work again
  11110  * free real program path
  11111  *
  11112  * stop the thread pool
  11113  *
  11114  * finalizeLibsheepyAtExit is called automatically at exit.
  11115  */
  11116 void finalizeLibsheepyAtExit(void);
  11117 
  11118 /**
  11119  * called from initLibsheepy in libsheepy.c
  11120  * start the thread pool
  11121  */
  11122 void initLibsheepyObject(void);
  11123 void initLibsheepyObjectWithoutTpool(void);
  11124 
  11125 #undef initLibsheepy
  11126 #define initLibsheepy(progPath) initLibsheepyF(progPath, initLibsheepyObject)