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

libsheepyCSmallString.h (76640B)


      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 #include "string.h"
     25 
     26 // Class smallString
     27 typedef struct smallString smallStringt;
     28 
     29 /**
     30  * help text for this class
     31  * It is public declaration so that child classes can add their help text easily:
     32  * ret "Child help text \n\n" helpTextSmallString;
     33  */
     34 #define helpTextSmallString "TODO smallString help brief, class description /*, definitions,*/ methods, examples"
     35 
     36 // for object inheriting smallString, cast to smallString to be able to use this class functions and generics
     37 #define cSt(self) ( (smallStringt*) self )
     38 
     39 typedef void     (*freeSmallStringFt)      (smallStringt *self);
     40 typedef void     (*terminateSmallStringFt) (smallStringt **self);
     41 typedef char*    (*toStringSmallStringFt)  (smallStringt *self);
     42 typedef smallStringt* (*duplicateSmallStringFt) (smallStringt *self);
     43 
     44 // smallString functions
     45 typedef char*    (*escapeSmallStringFt)    (smallStringt *self);
     46 
     47 /**
     48  * free self but not the smallString buffer
     49  *
     50  * Useful when smallString buffer is shared or
     51  * when the buffer holds a static smallString
     52  */
     53 typedef void     (*smashSmallStringFt)     (smallStringt **self);
     54 
     55 /**
     56  * free container
     57  */
     58 typedef void     (*finishSmallStringFt)    (smallStringt **self);
     59 
     60 typedef const char* (*helpSmallStringFt)   (smallStringt *self);
     61 
     62 /**
     63  * get a pointer to the string in smallString
     64  *
     65  * \return
     66  *   char*
     67  */
     68 typedef char*    (*getSmallStringFt)       (smallStringt *self);
     69 
     70 /**
     71  * set smallString
     72  *
     73  * \param
     74  *   string buffer to store in object (the buffer is duplicated)
     75  */
     76 typedef smallStringt*     (*setSmallStringFt)           (smallStringt *self, const char *string);
     77 typedef smallStringt*     (*setCharSmallStringFt)       (smallStringt *self, char c);
     78 typedef smallStringt*     (*setNFreeSmallStringFt)      (smallStringt *self, char *string);
     79 
     80 typedef smallStringt*     (*setBoolSmallStringFt)       (smallStringt* self, bool p2);
     81 typedef smallStringt*     (*setDoubleSmallStringFt)     (smallStringt* self, double p2);
     82 typedef smallStringt*     (*setInt64SmallStringFt)      (smallStringt* self, int64_t p2);
     83 typedef smallStringt*     (*setInt32SmallStringFt)      (smallStringt* self, int32_t p2);
     84 typedef smallStringt*     (*setUint32SmallStringFt)     (smallStringt* self, uint32_t p2);
     85 typedef smallStringt*     (*setUint64SmallStringFt)     (smallStringt* self, uint64_t p2);
     86 typedef smallStringt*     (*setSmallArraySmallStringFt) (smallStringt* self, smallArrayt* p2);
     87 typedef smallStringt*     (*setFromSmallDictSmallStringFt)(smallStringt* self, smallDictt* p2);
     88 typedef smallStringt*     (*setFromSmallJsonSmallStringFt)(smallStringt* self, smallJsont* p2);
     89 typedef smallStringt*     (*setSmallBoolSmallStringFt)  (smallStringt* self, smallBoolt* p2);
     90 typedef smallStringt*     (*setSmallDoubleSmallStringFt)(smallStringt* self, smallDoublet* p2);
     91 typedef smallStringt*     (*setSmallIntSmallStringFt)   (smallStringt* self, smallIntt* p2);
     92 typedef smallStringt*     (*setSmallJsonSmallStringFt)  (smallStringt* self, smallJsont* p2);
     93 typedef smallStringt*     (*setSmallStringSmallStringFt)(smallStringt* self, smallStringt* p2);
     94 
     95 /**
     96  * append smallString to self
     97  *
     98  * \param
     99  *  smallString smallString to append at the end of self
    100  */
    101 typedef smallStringt*     (*appendSmallStringFt)               (smallStringt *self, smallStringt *string);
    102 typedef smallStringt*     (*appendSmallJsonSmallStringFt)      (smallStringt *self, smallJsont *string);
    103 typedef smallStringt*     (*appendSSmallStringFt)              (smallStringt *self, const char *string);
    104 typedef smallStringt*     (*appendCharSmallStringFt)           (smallStringt *self, char c);
    105 typedef smallStringt*     (*appendNSmashSmallStringFt)         (smallStringt *self, smallStringt *string);
    106 typedef smallStringt*     (*appendNSmashSmallJsonSmallStringFt)(smallStringt *self, smallJsont *string);
    107 typedef smallStringt*     (*appendNSmashSSmallStringFt)        (smallStringt *self, char *string);
    108 
    109 /**
    110  * prepend string
    111  * append string at the beginning of the list
    112  * when string is NULL, the operation is canceled
    113  *
    114  * \param
    115  *   string: string to prepend
    116  */
    117 typedef smallStringt*     (*prependSmallStringFt)               (smallStringt *self, smallStringt *string);
    118 typedef smallStringt*     (*prependSmallJsonSmallStringFt)      (smallStringt *self, smallJsont *json);
    119 typedef smallStringt*     (*prependSSmallStringFt)              (smallStringt *self, const char *string);
    120 typedef smallStringt*     (*prependCharSmallStringFt)           (smallStringt *self, char c);
    121 typedef smallStringt*     (*prependNSmashSmallStringFt)         (smallStringt *self, smallStringt *string);
    122 typedef smallStringt*     (*prependNSmashSmallJsonSmallStringFt)(smallStringt *self, smallJsont *json);
    123 typedef smallStringt*     (*prependNSmashSSmallStringFt)        (smallStringt *self, char *string);
    124 
    125 /**
    126  * cat string
    127  *
    128  * append all strings in the list to self
    129  *
    130  * \param
    131  *   arbitrary list of strings seperated by commas
    132  */
    133 typedef smallStringt*      (*catSmallStringFt)          (smallStringt *self, ...);
    134 typedef smallStringt*      (*catSSmallStringFt)         (smallStringt *self, ...);
    135 
    136 /**
    137  * push many strings and free
    138  *
    139  * \param
    140  *   arbitrary list of smallStringt or char* strings seperated by commas
    141  */
    142 typedef smallStringt*      (*pushNFreeManySmallStringFt) (smallStringt *self, ...);
    143 typedef smallStringt*      (*pushNFreeManySSmallStringFt)(smallStringt *self, ...);
    144 
    145 /**
    146  * replace
    147  * the olds smallString is replaced with the news smallString max times in the result
    148  * 0 for max means replace all olds smallStrings
    149  *
    150  * \param
    151  *   olds: old smallString to be replaced in self
    152  * \param
    153  *   news: new smallString replacing olds in self
    154  * \param
    155  *   max: number of times to replace olds, 0 to replace all found olds
    156  * \return
    157  *   0  modified self
    158  *   -1 s not modified when self buffer is NULL or empty and when olds is empty
    159  */
    160 typedef smallStringt*      (*replaceSmallStringFt)                      (smallStringt *self, const char *olds, const char *news, size_t max);
    161 typedef smallStringt*      (*replaceCharSSmallStringFt)                 (smallStringt *self, char olds, const char *news, size_t max);
    162 typedef smallStringt*      (*replaceSCharSmallStringFt)                 (smallStringt *self, const char *olds, char news, size_t max);
    163 typedef smallStringt*      (*replaceCharCharSmallStringFt)              (smallStringt *self, char olds, char news, size_t max);
    164 typedef smallStringt*      (*replaceSmallJsonSmallJsonSmallStringFt)    (smallStringt *self, smallJsont *olds, smallJsont *news, size_t max);
    165 typedef smallStringt*      (*replaceSmallJsonSmallStringSmallStringFt)  (smallStringt *self, smallJsont *olds, smallStringt *news, size_t max);
    166 typedef smallStringt*      (*replaceSmallJsonSSmallStringFt)            (smallStringt *self, smallJsont *olds, const char *news, size_t max);
    167 typedef smallStringt*      (*replaceSmallJsonCharSmallStringFt)         (smallStringt *self, smallJsont *olds, char news, size_t max);
    168 typedef smallStringt*      (*replaceSmallStringSmallJsonSmallStringFt)  (smallStringt *self, smallStringt *olds, smallJsont *news, size_t max);
    169 typedef smallStringt*      (*replaceSmallStringSmallStringSmallStringFt)(smallStringt *self, smallStringt *olds, smallStringt *news, size_t max);
    170 typedef smallStringt*      (*replaceSmallStringSSmallStringFt)          (smallStringt *self, smallStringt *olds, const char *news, size_t max);
    171 typedef smallStringt*      (*replaceSmallStringCharSmallStringFt)       (smallStringt *self, smallStringt *olds, char news, size_t max);
    172 typedef smallStringt*      (*replaceSSmallJsonSmallStringFt)            (smallStringt *self, const char *olds, smallJsont *news, size_t max);
    173 typedef smallStringt*      (*replaceSSmallStringSmallStringFt)          (smallStringt *self, const char *olds, smallStringt *news, size_t max);
    174 typedef smallStringt*      (*replaceCharSmallJsonSmallStringFt)         (smallStringt *self, char olds, smallJsont *news, size_t max);
    175 typedef smallStringt*      (*replaceCharSmallStringSmallStringFt)       (smallStringt *self, char olds, smallStringt *news, size_t max);
    176 
    177 /**
    178  * replace Many Strings
    179  * the olds string is replaced with the news string max times in the result
    180  *
    181  * Example:
    182  * replaceMany(self, "s",  "BNM", "a",  "AAA")
    183  *                          ^olds ^news  ^olds ^news
    184  *
    185  * \param
    186  *   self
    187  *   olds: old string to be replaced in s
    188  *   news: new string replacing olds in s
    189  *   ...
    190  * \return
    191  *   0  modified string
    192  *   -1 not modified when s is empty, when s is NULL, when only 2 parameters are given,
    193  *     when any olds is empty
    194  */
    195 typedef smallStringt*      (*replaceManySmallStringFt)(smallStringt *self, const char *paramType, ...);
    196 
    197 /**
    198  * ignore case replace
    199  * the olds smallString is replaced with the news smallString max times in the result
    200  * 0 for max means replace all olds smallStrings
    201  *
    202  * \param
    203  *   olds: old smallString to be replaced in self
    204  * \param
    205  *   news: new smallString replacing olds in self
    206  * \param
    207  *   max: number of times to replace olds, 0 to replace all found olds
    208  * \return
    209  *   0  modified self
    210  *   -1 s not modified when self buffer is NULL or empty and when olds is empty
    211  */
    212 typedef smallStringt*      (*icReplaceSmallStringFt)                      (smallStringt *self, const char *olds, const char *news, size_t max);
    213 typedef smallStringt*      (*icReplaceCharSSmallStringFt)                 (smallStringt *self, char olds, const char *news, size_t max);
    214 typedef smallStringt*      (*icReplaceSCharSmallStringFt)                 (smallStringt *self, const char *olds, char news, size_t max);
    215 typedef smallStringt*      (*icReplaceCharCharSmallStringFt)              (smallStringt *self, char olds, char news, size_t max);
    216 typedef smallStringt*      (*icReplaceSmallJsonSmallJsonSmallStringFt)    (smallStringt *self, smallJsont *olds, smallJsont *news, size_t max);
    217 typedef smallStringt*      (*icReplaceSmallJsonSmallStringSmallStringFt)  (smallStringt *self, smallJsont *olds, smallStringt *news, size_t max);
    218 typedef smallStringt*      (*icReplaceSmallJsonSSmallStringFt)            (smallStringt *self, smallJsont *olds, const char *news, size_t max);
    219 typedef smallStringt*      (*icReplaceSmallJsonCharSmallStringFt)         (smallStringt *self, smallJsont *olds, char news, size_t max);
    220 typedef smallStringt*      (*icReplaceSmallStringSmallJsonSmallStringFt)  (smallStringt *self, smallStringt *olds, smallJsont *news, size_t max);
    221 typedef smallStringt*      (*icReplaceSmallStringSmallStringSmallStringFt)(smallStringt *self, smallStringt *olds, smallStringt *news, size_t max);
    222 typedef smallStringt*      (*icReplaceSmallStringSSmallStringFt)          (smallStringt *self, smallStringt *olds, const char *news, size_t max);
    223 typedef smallStringt*      (*icReplaceSmallStringCharSmallStringFt)       (smallStringt *self, smallStringt *olds, char news, size_t max);
    224 typedef smallStringt*      (*icReplaceSSmallJsonSmallStringFt)            (smallStringt *self, const char *olds, smallJsont *news, size_t max);
    225 typedef smallStringt*      (*icReplaceSSmallStringSmallStringFt)          (smallStringt *self, const char *olds, smallStringt *news, size_t max);
    226 typedef smallStringt*      (*icReplaceCharSmallJsonSmallStringFt)         (smallStringt *self, char olds, smallJsont *news, size_t max);
    227 typedef smallStringt*      (*icReplaceCharSmallStringSmallStringFt)       (smallStringt *self, char olds, smallStringt *news, size_t max);
    228 
    229 /**
    230  * ignore case replace Many Strings
    231  * the olds string is replaced with the news string max times in the result
    232  *
    233  * Example:
    234  * replaceMany(self, "s",  "BNM", "a",  "AAA")
    235  *                          ^olds ^news  ^olds ^news
    236  *
    237  * \param
    238  *   self
    239  *   olds: old string to be replaced in s
    240  *   news: new string replacing olds in s
    241  *   ...
    242  * \return
    243  *   0  modified string
    244  *   -1 not modified when s is empty, when s is NULL, when only 2 parameters are given,
    245  *     when any olds is empty
    246  */
    247 typedef smallStringt*      (*icReplaceManySmallStringFt)(smallStringt *self, const char *paramType, ...);
    248 
    249 /**
    250  * equal
    251  * compare self to smallString
    252  *
    253  * \param
    254  *   smallString to compare
    255  * \return
    256  *   true the smallStrings have identical content
    257  *   false they differ
    258  */
    259 typedef bool     (*equalSmallStringFt)        (smallStringt *self, smallStringt *string);
    260 
    261 /**
    262  * equal
    263  * compare self to smallString
    264  *
    265  * \param
    266  *   smallString to compare
    267  * \return
    268  *   true the smallStrings have identical content
    269  *   false they differ
    270  */
    271 typedef bool     (*equalSSmallStringFt)       (smallStringt *self, const char *string);
    272 typedef bool     (*equalCharSmallStringFt)    (smallStringt *self, char c);
    273 
    274 typedef bool     (*equalSmallStringBaseFt)    (smallStringt* self, baset* p2);
    275 typedef bool     (*equalSmallStringBoolFt)    (smallStringt* self, bool p2);
    276 typedef bool     (*equalSmallStringDoubleFt)  (smallStringt* self, double p2);
    277 typedef bool     (*equalSmallStringInt64Ft)   (smallStringt* self, int64_t p2);
    278 typedef bool     (*equalSmallStringInt32Ft)   (smallStringt* self, int32_t p2);
    279 typedef bool     (*equalSmallStringUint32Ft)  (smallStringt* self, uint32_t p2);
    280 typedef bool     (*equalSmallStringUint64Ft)  (smallStringt* self, uint64_t p2);
    281 typedef bool     (*equalSmallStringSmallBoolFt)(smallStringt* self, smallBoolt* p2);
    282 typedef bool     (*equalSmallStringSmallBytesFt)(smallStringt* self, smallBytest* p2);
    283 typedef bool     (*equalSmallStringSmallDoubleFt)(smallStringt* self, smallDoublet* p2);
    284 typedef bool     (*equalSmallStringSmallIntFt)(smallStringt* self, smallIntt* p2);
    285 typedef bool     (*equalSmallStringSmallJsonFt)(smallStringt* self, smallJsont* p2);
    286 
    287 
    288 /**
    289  * ignore case equal
    290  * compare self to smallString
    291  *
    292  * \param
    293  *   smallString to compare
    294  * \return
    295  *   true the smallStrings have identical content
    296  *   false they differ
    297  */
    298 typedef bool     (*icEqualSmallStringFt)        (smallStringt *self, smallStringt *string);
    299 
    300 /**
    301  * ignore case equal
    302  * compare self to smallString
    303  *
    304  * \param
    305  *   smallString to compare
    306  * \return
    307  *   true the smallStrings have identical content
    308  *   false they differ
    309  */
    310 typedef bool     (*icEqualSSmallStringFt)       (smallStringt *self, const char *string);
    311 typedef bool     (*icEqualCharSmallStringFt)    (smallStringt *self, char c);
    312 
    313 typedef bool     (*icEqualSmallStringBaseFt)     (smallStringt* self, baset* p2);
    314 typedef bool     (*icEqualSmallStringSmallJsonFt)(smallStringt* self, smallJsont* p2);
    315 
    316 /**
    317  * equal at Index
    318  * compare self at index to smallString
    319  *
    320  * \param
    321  *   smallString to compare
    322  * \return
    323  *   true smallString at index is equal to string
    324  *   false they differ
    325  */
    326 typedef bool     (*equalISSmallStringFt)          (smallStringt *self, const char *string, int64_t index);
    327 typedef bool     (*equalICharSmallStringFt)       (smallStringt *self, char c, int64_t index);
    328 typedef bool     (*equalISmallJsonSmallStringFt)  (smallStringt *self, smallJsont *string, int64_t index);
    329 typedef bool     (*equalISmallStringSmallStringFt)(smallStringt *self, smallStringt *string, int64_t index);
    330 
    331 /**
    332  * starts With String
    333  * compare start of self with string
    334  *
    335  * \param
    336  *   string
    337  * \return
    338  *   true when self starts with string
    339  *   false for other cases
    340  */
    341 typedef bool     (*startsWithSSmallStringFt)          (smallStringt *self, const char *string);
    342 typedef bool     (*startsWithCharSmallStringFt)       (smallStringt *self, char c);
    343 typedef bool     (*startsWithSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *string);
    344 typedef bool     (*startsWithSmallStringSmallStringFt)(smallStringt *self, smallStringt *string);
    345 
    346 /**
    347  * ends With String
    348  * compare end of self with string
    349  *
    350  * \param
    351  *   string
    352  * \return
    353  *   true when self ends with string2
    354  *   false for other cases
    355  */
    356 typedef bool     (*endsWithSSmallStringFt)          (smallStringt *self, const char *string);
    357 typedef bool     (*endsWithCharSmallStringFt)       (smallStringt *self, char c);
    358 typedef bool     (*endsWithSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *string);
    359 typedef bool     (*endsWithSmallStringSmallStringFt)(smallStringt *self, smallStringt *string);
    360 
    361 /**
    362  * count String
    363  * count number of (non-overlapping) occurrences of a substring
    364  *
    365  * Example:
    366  *   assert(countS("aaa aaa", "a") == 6);
    367  *   assert(countS("aaa aaa", "ab") == 0);
    368  *   assert(countS("aaa aaa", "aa") == 2);
    369  *
    370  * \param
    371  *   string
    372  * \return
    373  *   string count
    374  *   -1 when there is an error
    375  */
    376 typedef ssize_t  (*countSSmallStringFt)          (smallStringt *self, const char *string);
    377 typedef ssize_t  (*countCharSmallStringFt)       (smallStringt *self, char c);
    378 typedef ssize_t  (*countSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *string);
    379 typedef ssize_t  (*countSmallStringSmallStringFt)(smallStringt *self, smallStringt *string);
    380 
    381 /**
    382  * ignore case starts With String
    383  * compare start of self with string
    384  *
    385  * \param
    386  *   string
    387  * \return
    388  *   true when self starts with string
    389  *   false for other cases
    390  */
    391 typedef bool     (*icStartsWithSSmallStringFt)          (smallStringt *self, const char *string);
    392 typedef bool     (*icStartsWithCharSmallStringFt)       (smallStringt *self, char c);
    393 typedef bool     (*icStartsWithSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *string);
    394 typedef bool     (*icStartsWithSmallStringSmallStringFt)(smallStringt *self, smallStringt *string);
    395 
    396 /**
    397  * ignore case ends With String
    398  * compare end of self with string
    399  *
    400  * \param
    401  *   string
    402  * \return
    403  *   true when self ends with string2
    404  *   false for other cases
    405  */
    406 typedef bool     (*icEndsWithSSmallStringFt)          (smallStringt *self, const char *string);
    407 typedef bool     (*icEndsWithCharSmallStringFt)       (smallStringt *self, char c);
    408 typedef bool     (*icEndsWithSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *string);
    409 typedef bool     (*icEndsWithSmallStringSmallStringFt)(smallStringt *self, smallStringt *string);
    410 
    411 /**
    412  * ignore case count String
    413  * count number of (non-overlapping) occurrences of a substring
    414  *
    415  * Example:
    416  *   assert(countS("aaa aaa", "a") == 6);
    417  *   assert(countS("aaa aaa", "ab") == 0);
    418  *   assert(countS("aaa aaa", "aa") == 2);
    419  *
    420  * \param
    421  *   string
    422  * \return
    423  *   string count
    424  *   -1 when there is an error
    425  */
    426 typedef ssize_t  (*icCountSSmallStringFt)          (smallStringt *self, const char *string);
    427 typedef ssize_t  (*icCountCharSmallStringFt)       (smallStringt *self, char c);
    428 typedef ssize_t  (*icCountSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *string);
    429 typedef ssize_t  (*icCountSmallStringSmallStringFt)(smallStringt *self, smallStringt *string);
    430 
    431 /**
    432  * is Number (integer or float) String
    433  *
    434  * 1, -12
    435  * 1e+4, .44E-1
    436  *
    437  * \param
    438  *   string
    439  * \return
    440  *   true when string is a number
    441  *   false when string is not a number or string is empty or NULL
    442  */
    443 typedef bool (*isNumberSmallStringFt) (smallStringt *self);
    444 
    445 /**
    446  * is Integer String
    447  *
    448  * \param
    449  *   string
    450  * \return
    451  *   true when string is an integer
    452  *   false when string is not an integer or string is empty or NULL
    453  */
    454 typedef bool (*isIntSmallStringFt) (smallStringt *self);
    455 
    456 /**
    457  * convert self to decimal integer
    458  *
    459  * \return
    460  *   int64_t
    461  *   0 when smallString represents 0 or doesnt represent a number or the input is NULL
    462  *   INTM64_MAX or INT64_MIN for strtoll parse errors.
    463  */
    464 typedef int64_t (*parseIntSmallStringFt)  (smallStringt *self);
    465 
    466 /**
    467  * convert self to double
    468  *
    469  * \return
    470  *   double
    471  *   0 when smallString represents 0 or doesnt represent a number or the input is NULL
    472  */
    473 typedef double (*parseDoubleSmallStringFt)  (smallStringt *self);
    474 
    475 /**
    476  * int To SmallString
    477  *
    478  * convert int to smallString, assign result to self
    479  *
    480  * \param
    481  *   int64_t number
    482  */
    483 typedef smallStringt*     (*intToSmallStringFt)     (smallStringt *self, int64_t n);
    484 
    485 /**
    486  * double To String
    487  *
    488  * convert int to string
    489  *
    490  * \param
    491  *   double number
    492  */
    493 typedef smallStringt*     (*doubleToSmallStringFt)             (smallStringt *self, double n);
    494 
    495 /**
    496  * length
    497  * \return
    498  *   smallString length
    499  */
    500 typedef size_t   (*lenSmallStringFt)       (smallStringt *self);
    501 
    502 /**
    503  * upper case self
    504  */
    505 typedef smallStringt*      (*upperSmallStringFt)     (smallStringt *self);
    506 
    507 /**
    508  * lower case self
    509  */
    510 typedef smallStringt*      (*lowerSmallStringFt)     (smallStringt *self);
    511 
    512 /**
    513  * remove leading and trailing white spaces (spaces and tabs) in self
    514  */
    515 typedef smallStringt*      (*trimSmallStringFt)      (smallStringt *self);
    516 typedef smallStringt*      (*lTrimSmallStringFt)     (smallStringt *self);
    517 typedef smallStringt*      (*rTrimSmallStringFt)     (smallStringt *self);
    518 
    519 /**
    520  * uniq String
    521  *
    522  * remove successive repetitions of char c
    523  *
    524  * \param
    525  *   string
    526  *   c character to remove
    527  * \return
    528  *   string without successive repetitions of char c
    529  *   0 ok
    530  *   -1 error
    531  */
    532 typedef smallStringt*      (*uniqSmallStringFt)      (smallStringt *self, char c);
    533 
    534 /**
    535  * ignore case uniq String
    536  *
    537  * remove successive repetitions of char c
    538  *
    539  * \param
    540  *   string
    541  *   c character to remove
    542  * \return
    543  *   string without successive repetitions of char c
    544  *   0 ok
    545  *   -1 error
    546  */
    547 typedef smallStringt*      (*icUniqSmallStringFt)    (smallStringt *self, char c);
    548 
    549 /**
    550  * get char at python index
    551  */
    552 typedef char     (*getAtSmallStringFt)     (smallStringt *self, int64_t index);
    553 
    554 /**
    555  * set char at python index
    556  */
    557 typedef smallStringt*      (*setAtSmallStringFt)     (smallStringt *self, int64_t index, char c);
    558 
    559 /**
    560  * slice self
    561  * self becomes the smallString between start and end
    562  * negative indexes are allowed
    563  *
    564  * \param
    565  *   start: start index, must be in the smallString
    566  * \param
    567  *   end: end index, must be in the smallString after start
    568  * \return
    569  *   0  sliced smallString
    570  *      "" when start=end
    571  *   -1 unchanged smallString when start and end are not set correctly
    572  */
    573 typedef smallStringt*      (*sliceSmallStringFt)     (smallStringt *self, int64_t start, int64_t end);
    574 
    575 /**
    576  * Crop characters from start to end
    577  * return a new string with characters from start and end
    578  * and delete characters from start to end in the original string
    579  * negative indexes are allowed
    580  *
    581  * \param
    582  *   start index, must be in the string
    583  * \param
    584  *   end index, must be in the string
    585  * \return
    586  *   new sliced string (you must free (terimate) the pointer)
    587  *   empty list when start=end
    588  *   unchanged when string is empty
    589  *   unchanged when string is NULL or when start and end are not set correctly
    590  *   NULL error
    591  */
    592 typedef smallStringt* (*cropSmallStringFt)(smallStringt *self, int64_t start, int64_t end);
    593 typedef char* (*cropSSmallStringFt)(smallStringt *self, int64_t start, int64_t end);
    594 typedef smallJsont* (*cropSmallJsonSmallStringFt)(smallStringt *self, int64_t start, int64_t end);
    595 
    596 
    597 /**
    598  * Crop a single character
    599  * return character at index
    600  * and delete character at index in the original string
    601  * negative indexes are allowed
    602  *
    603  * \param
    604  *   index must be in the string
    605  * \return
    606  *   character at index
    607  *   unchanged when list is empty
    608  *   0 error
    609  */
    610 typedef char (*cropElemSmallStringFt)(smallStringt *self, int64_t index);
    611 
    612 
    613 /**
    614  * copy string between start and end in a new smallString object
    615  * negative indexes are allowed
    616  *
    617  * \param
    618  *   start: start index, must be in the smallString
    619  * \param
    620  *   end: end index, must be in the smallString after start
    621  * \return
    622  *   new sliced smallString
    623  *      "" when start=end
    624  *   NULL when start and end are not set correctly
    625  */
    626 typedef smallStringt* (*copySmallStringFt) (smallStringt *self, int64_t start, int64_t end);
    627 
    628 /**
    629  * insert smallString in self at index
    630  *
    631  * return smallString with toInsert at index
    632  * negative indexes are allowed
    633  * index -1 is the end of the array and is equivalent to index len
    634  *
    635  * \param
    636  *   index in smallString
    637  * \param
    638  *   toInsert smallString
    639  * \return
    640  *   self smallString
    641  *   NULL unchanged smallString when smallString is NULL or invalid index
    642  */
    643 typedef smallStringt*      (*insertSmallStringFt)              (smallStringt *self, int64_t index, smallStringt *toInsert);
    644 typedef smallStringt*      (*insertSmallJsonSmallStringFt)     (smallStringt *self, int64_t index, smallJsont *toInsert);
    645 typedef smallStringt*      (*insertSSmallStringFt)             (smallStringt *self, int64_t index, const char *toInsert);
    646 typedef smallStringt*      (*insertNFreeSmallStringFt)         (smallStringt *self, int64_t index, smallStringt *toInsert);
    647 typedef smallStringt*      (*insertNFreeSmallJsonSmallStringFt)(smallStringt *self, int64_t index, smallJsont *toInsert);
    648 typedef smallStringt*      (*insertSNFreeSmallStringFt)        (smallStringt *self, int64_t index, char *toInsert);
    649 
    650 /**
    651  * inject a char in self at index
    652  *
    653  * return smallString with toInject at index
    654  * negative indexes are allowed
    655  * index -1 is the end of the array and is equivalent to index len
    656  *
    657  * \param
    658  *   index in smallString
    659  * \param
    660  *   toInject char
    661  * \return
    662  *   self smallString
    663  *   NULL unchanged smallString when smallString is NULL or invalid index
    664  */
    665 typedef smallStringt*      (*injectSmallStringFt)    (smallStringt *self, int64_t index, char toInject);
    666 
    667 /**
    668  * delete smallString
    669  *
    670  * delete the smallString between start and end in self
    671  * negative indexes are allowed
    672  *
    673  * \param
    674  *   start: start index, must be in the smallString
    675  * \param
    676  *   end: end index, must be in the smallString after start
    677  * \return
    678  *   0  sliced smallString
    679  *      unchanged smallString when start=end
    680  *   -1 when start and end are not set correctly
    681  *        or when input smallString is NULL or when malloc failed or when end is under start
    682  */
    683 typedef smallStringt*      (*delSmallStringFt)       (smallStringt *self, int64_t start, int64_t end);
    684 typedef smallStringt*      (*delElemSmallStringFt)   (smallStringt *self, int64_t index);
    685 
    686 /**
    687  * has SmallString
    688  *
    689  * \param
    690  *   needle: smallString to find
    691  * \return
    692  *   pointer to first occurence of needle in smallString
    693  *   NULL when needle is not found
    694  *   NULL when smallString or needle are NULL
    695  */
    696 typedef char*    (*hasSmallStringFt)           (smallStringt *self, const char *needle);
    697 typedef char*    (*hasCharSmallStringFt)       (smallStringt *self, char c);
    698 typedef char*    (*hasSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *needle);
    699 typedef char*    (*hasSmallStringSmallStringFt)(smallStringt *self, smallStringt *needle);
    700 
    701 /**
    702  * find SmallString
    703  *
    704  * \param
    705  *   needle: smallString to find
    706  * \return
    707  *   new smallStringt smallString of first occurence of needle in smallString
    708  *   NULL when needle is not found
    709  *   NULL when smallString or needle are NULL
    710  */
    711 typedef smallStringt* (*findSmallStringFt)           (smallStringt *self, const char *needle);
    712 typedef smallStringt* (*findCharSmallStringFt)       (smallStringt *self, char c);
    713 typedef smallStringt* (*findSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *needle);
    714 typedef smallStringt* (*findSmallStringSmallStringFt)(smallStringt *self, smallStringt *needle);
    715 
    716 /**
    717  * indexOf SmallString
    718  *
    719  * \param
    720  *   needle: smallString to find
    721  * \return
    722  *   index of first occurence of needle in smallString
    723  *   -1 when needle is not found
    724  *   -1 when smallString or needle are NULL
    725  */
    726 typedef ssize_t (*indexOfSmallStringFt)           (smallStringt *self, const char *needle);
    727 typedef ssize_t (*indexOfCharSmallStringFt)       (smallStringt *self, char c);
    728 typedef ssize_t (*indexOfSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *needle);
    729 typedef ssize_t (*indexOfSmallStringSmallStringFt)(smallStringt *self, smallStringt *needle);
    730 
    731 /**
    732  * ignore case has SmallString
    733  *
    734  * \param
    735  *   needle: smallString to find
    736  * \return
    737  *   pointer to first occurence of needle in smallString
    738  *   NULL when needle is not found
    739  *   NULL when smallString or needle are NULL
    740  */
    741 typedef char*    (*icHasSmallStringFt)           (smallStringt *self, const char *needle);
    742 typedef char*    (*icHasCharSmallStringFt)       (smallStringt *self, char c);
    743 typedef char*    (*icHasSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *needle);
    744 typedef char*    (*icHasSmallStringSmallStringFt)(smallStringt *self, smallStringt *needle);
    745 
    746 /**
    747  * ignore case find SmallString
    748  *
    749  * \param
    750  *   needle: smallString to find
    751  * \return
    752  *   new smallStringt smallString of first occurence of needle in smallString
    753  *   NULL when needle is not found
    754  *   NULL when smallString or needle are NULL
    755  */
    756 typedef smallStringt* (*icFindSmallStringFt)           (smallStringt *self, const char *needle);
    757 typedef smallStringt* (*icFindCharSmallStringFt)       (smallStringt *self, char c);
    758 typedef smallStringt* (*icFindSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *needle);
    759 typedef smallStringt* (*icFindSmallStringSmallStringFt)(smallStringt *self, smallStringt *needle);
    760 
    761 /**
    762  * ignore case indexOf SmallString
    763  *
    764  * \param
    765  *   needle: smallString to find
    766  * \return
    767  *   index of first occurence of needle in smallString
    768  *   -1 when needle is not found
    769  *   -1 when smallString or needle are NULL
    770  */
    771 typedef ssize_t (*icIndexOfSmallStringFt)           (smallStringt *self, const char *needle);
    772 typedef ssize_t (*icIndexOfCharSmallStringFt)       (smallStringt *self, char c);
    773 typedef ssize_t (*icIndexOfSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *needle);
    774 typedef ssize_t (*icIndexOfSmallStringSmallStringFt)(smallStringt *self, smallStringt *needle);
    775 
    776 /**
    777  * empty self
    778  *
    779  * free self and set empty smallString
    780  */
    781 typedef smallStringt*      (*emptySmallStringFt)     (smallStringt *self);
    782 
    783 /**
    784  * is Empty SmallString
    785  *
    786  * \return
    787  *   false when there are characters in the smallString
    788  *   true when smallString is empty
    789  *   true when smallString is NULL
    790  */
    791 typedef bool     (*isEmptySmallStringFt)   (smallStringt *self);
    792 
    793 /**
    794  * is Blank SmallString
    795  *
    796  * \return
    797  *   false when there are non white space characters in the smallString
    798  *   true when there are only white spaces in the smallString
    799  *   true when smallString is empty
    800  *   true when smallString is NULL
    801  */
    802 typedef bool     (*isBlankSmallStringFt)   (smallStringt *self);
    803 
    804 /**
    805  * split self with delim smallString
    806  * return smallStringArray
    807  *
    808  * \param
    809  *   delim delimiter
    810  * \return
    811  *   list of tokens
    812  *   NULL when list or delim are NULL
    813  */
    814 typedef smallArrayt* (*splitSmallStringFt)           (smallStringt *self, const char *delim);
    815 typedef smallArrayt* (*splitCharSmallStringFt)       (smallStringt *self, char c);
    816 typedef smallArrayt* (*splitSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *delim);
    817 typedef smallArrayt* (*splitSmallStringSmallStringFt)(smallStringt *self, smallStringt *delim);
    818 
    819 /**
    820  * split self with delim smallString
    821  * return list
    822  *
    823  * \param
    824  *   delim delimiter
    825  * \return
    826  *   list of tokens
    827  *   NULL when list or delim are NULL
    828  */
    829 typedef char**   (*splitSSmallStringFt)           (smallStringt *self, const char *delim);
    830 typedef char**   (*splitCharSSmallStringFt)       (smallStringt *self, char c);
    831 typedef char**   (*splitSmallJsonSSmallStringFt)  (smallStringt *self, smallJsont *delim);
    832 typedef char**   (*splitSmallStringSSmallStringFt)(smallStringt *self, smallStringt *delim);
    833 
    834 /**
    835  * extract string between delim1 and delim2 strings
    836  * return list
    837  *
    838  * \param
    839  *   string to split
    840  *   delim1 first delimiter
    841  *   delim2 second delimiter, has to be different from delim1
    842  * \return
    843  *   list of tokens
    844  *   NULL when list or delim are NULL
    845  */
    846 typedef smallArrayt* (*extractSmallStringFt)        (smallStringt *self, const char* delim1, const char* delim2);
    847 typedef smallArrayt* (*extractCharSSmallStringFt)   (smallStringt *self, char delim1, const char* delim2);
    848 typedef smallArrayt* (*extractSCharSmallStringFt)   (smallStringt *self, const char* delim1, char delim2);
    849 typedef smallArrayt* (*extractCharCharSmallStringFt)(smallStringt *self, char delim1, char delim2);
    850 typedef smallArrayt* (*extractSmallJsonSmallJsonSmallStringFt)    (smallStringt *self, smallJsont* delim1, smallJsont* delim2);
    851 typedef smallArrayt* (*extractSmallJsonSmallStringSmallStringFt)  (smallStringt *self, smallJsont* delim1, smallStringt* delim2);
    852 typedef smallArrayt* (*extractSmallJsonSSmallStringFt)            (smallStringt *self, smallJsont* delim1, const char* delim2);
    853 typedef smallArrayt* (*extractSmallJsonCharSmallStringFt)         (smallStringt *self, smallJsont* delim1, char delim2);
    854 typedef smallArrayt* (*extractSmallStringSmallJsonSmallStringFt)  (smallStringt *self, smallStringt* delim1, smallJsont* delim2);
    855 typedef smallArrayt* (*extractSmallStringSmallStringSmallStringFt)(smallStringt *self, smallStringt* delim1, smallStringt* delim2);
    856 typedef smallArrayt* (*extractSmallStringSSmallStringFt)          (smallStringt *self, smallStringt* delim1, const char* delim2);
    857 typedef smallArrayt* (*extractSmallStringCharSmallStringFt)       (smallStringt *self, smallStringt* delim1, char delim2);
    858 typedef smallArrayt* (*extractSSmallJsonSmallStringFt)            (smallStringt *self, const char* delim1, smallJsont* delim2);
    859 typedef smallArrayt* (*extractSSmallStringSmallStringFt)          (smallStringt *self, const char* delim1, smallStringt* delim2);
    860 typedef smallArrayt* (*extractCharSmallJsonSmallStringFt)         (smallStringt *self, char delim1, smallJsont* delim2);
    861 typedef smallArrayt* (*extractCharSmallStringSmallStringFt)       (smallStringt *self, char delim1, smallStringt* delim2);
    862 
    863 /**
    864  * ignore case split self with delim smallString
    865  * return smallStringArray
    866  *
    867  * \param
    868  *   delim delimiter
    869  * \return
    870  *   list of tokens
    871  *   NULL when list or delim are NULL
    872  */
    873 typedef smallArrayt* (*icSplitSmallStringFt)           (smallStringt *self, const char *delim);
    874 typedef smallArrayt* (*icSplitCharSmallStringFt)       (smallStringt *self, char c);
    875 typedef smallArrayt* (*icSplitSmallJsonSmallStringFt)  (smallStringt *self, smallJsont *delim);
    876 typedef smallArrayt* (*icSplitSmallStringSmallStringFt)(smallStringt *self, smallStringt *delim);
    877 
    878 /**
    879  * ignore case split self with delim smallString
    880  * return list
    881  *
    882  * \param
    883  *   delim delimiter
    884  * \return
    885  *   list of tokens
    886  *   NULL when list or delim are NULL
    887  */
    888 typedef char**   (*icSplitSSmallStringFt)           (smallStringt *self, const char *delim);
    889 typedef char**   (*icSplitCharSSmallStringFt)       (smallStringt *self, char c);
    890 typedef char**   (*icSplitSmallJsonSSmallStringFt)  (smallStringt *self, smallJsont *delim);
    891 typedef char**   (*icSplitSmallStringSSmallStringFt)(smallStringt *self, smallStringt *delim);
    892 
    893 /**
    894  * ignore case extract string between delim1 and delim2 strings
    895  * return list
    896  *
    897  * \param
    898  *   string to split
    899  *   delim1 first delimiter
    900  *   delim2 second delimiter, has to be different from delim1
    901  * \return
    902  *   list of tokens
    903  *   NULL when list or delim are NULL
    904  */
    905 typedef smallArrayt* (*icExtractSmallStringFt)        (smallStringt *self, const char* delim1, const char* delim2);
    906 typedef smallArrayt* (*icExtractCharSSmallStringFt)   (smallStringt *self, char delim1, const char* delim2);
    907 typedef smallArrayt* (*icExtractSCharSmallStringFt)   (smallStringt *self, const char* delim1, char delim2);
    908 typedef smallArrayt* (*icExtractCharCharSmallStringFt)(smallStringt *self, char delim1, char delim2);
    909 typedef smallArrayt* (*icExtractSmallJsonSmallJsonSmallStringFt)    (smallStringt *self, smallJsont* delim1, smallJsont* delim2);
    910 typedef smallArrayt* (*icExtractSmallJsonSmallStringSmallStringFt)  (smallStringt *self, smallJsont* delim1, smallStringt* delim2);
    911 typedef smallArrayt* (*icExtractSmallJsonSSmallStringFt)            (smallStringt *self, smallJsont* delim1, const char* delim2);
    912 typedef smallArrayt* (*icExtractSmallJsonCharSmallStringFt)         (smallStringt *self, smallJsont* delim1, char delim2);
    913 typedef smallArrayt* (*icExtractSmallStringSmallJsonSmallStringFt)  (smallStringt *self, smallStringt* delim1, smallJsont* delim2);
    914 typedef smallArrayt* (*icExtractSmallStringSmallStringSmallStringFt)(smallStringt *self, smallStringt* delim1, smallStringt* delim2);
    915 typedef smallArrayt* (*icExtractSmallStringSSmallStringFt)          (smallStringt *self, smallStringt* delim1, const char* delim2);
    916 typedef smallArrayt* (*icExtractSmallStringCharSmallStringFt)       (smallStringt *self, smallStringt* delim1, char delim2);
    917 typedef smallArrayt* (*icExtractSSmallJsonSmallStringFt)            (smallStringt *self, const char* delim1, smallJsont* delim2);
    918 typedef smallArrayt* (*icExtractSSmallStringSmallStringFt)          (smallStringt *self, const char* delim1, smallStringt* delim2);
    919 typedef smallArrayt* (*icExtractCharSmallJsonSmallStringFt)         (smallStringt *self, char delim1, smallJsont* delim2);
    920 typedef smallArrayt* (*icExtractCharSmallStringSmallStringFt)       (smallStringt *self, char delim1, smallStringt* delim2);
    921 
    922 /**
    923  * color self for terminal
    924  *
    925  * Use the color/effect defines in this file for the color parameter.
    926  * Effects and colors can be combined.
    927  *
    928  * \param
    929  *   color color/effect code
    930  */
    931 typedef smallStringt*     (*colorSmallStringFt)     (smallStringt *self, const char *colr);
    932 
    933 /**
    934  * color self for terminal
    935  *
    936  * Use the color/effect defines in this file for the color parameter.
    937  * Effects and colors can be combined.
    938  *
    939  * \param
    940  *   color color/effect code
    941  * \return
    942  *   duplicated self with colors
    943  */
    944 typedef char*    (*colordSmallStringFt)    (smallStringt *self, const char *color);
    945 
    946 /**
    947  * read file to string
    948  *
    949  * 0 is added at the end to terminate the string
    950  *
    951  * \param
    952  *   filePath: path to file
    953  * \return
    954  *   0 data in file
    955  *   -1 an error occured
    956  */
    957 typedef smallStringt* (*readFileSmallStringFt)(smallStringt *self, const char *filePath);
    958 typedef smallStringt* (*readFileSmallJsonSmallStringFt)(smallStringt *self, smallJsont *filePath);
    959 typedef smallStringt* (*readFileSmallStringSmallStringFt)(smallStringt *self, smallStringt *filePath);
    960 typedef smallStringt* (*readStreamSmallStringFt)(smallStringt *self, FILE *fp);
    961 
    962 /**
    963  * write string to file
    964  *
    965  * \param
    966  *   filePath path to file
    967  *   string
    968  * \return
    969  *   1 success
    970  *   0 error
    971  */
    972 typedef int (*writeFileSmallStringFt)(smallStringt *self, const char *filePath);
    973 typedef int (*writeFileSmallJsonSmallStringFt)(smallStringt *self, smallJsont *filePath);
    974 typedef int (*writeFileSmallStringSmallStringFt)(smallStringt *self, smallStringt *filePath);
    975 typedef int (*writeStreamSmallStringFt)(smallStringt *self, FILE *fp);
    976 
    977 /**
    978  * append string to filePath
    979  *
    980  * \param
    981  *   filePath
    982  *   list
    983  * \return
    984  *   true success
    985  *   false failed, filePath or string are NULL
    986  */
    987 typedef int (*appendFileSmallStringFt)(smallStringt *self, const char *filePath);
    988 typedef int (*appendFileSmallStringSmallStringFt)(smallStringt *self, smallStringt *filePath);
    989 
    990 /**
    991  * class functions
    992  * allocated once for all objects
    993  *
    994  * freed with finalizeSmallString or finalizeLibsheepy
    995  */
    996 
    997 /**
    998  * use this define in child classes and add the new function after this class functions
    999  *
   1000  * in this define, add the methods after <finishClassTemplateFt    finish;>
   1001  *
   1002  * Example:
   1003  * #define RINGFUNCTIONST \
   1004  *   CLASSTEMPLATEFUNCTIONST; \
   1005  *   setSizeRingFt           setSize
   1006  */
   1007 #define SMALLSTRINGFUNCTIONST \
   1008   helpSmallStringFt                     help;\
   1009   escapeSmallStringFt                   escape;\
   1010   getSmallStringFt                      get;\
   1011   setSmallStringFt                      set;\
   1012   setBoolSmallStringFt                  setBool;\
   1013   setDoubleSmallStringFt                setDouble;\
   1014   setInt64SmallStringFt                 setInt64;\
   1015   setInt32SmallStringFt                 setInt32;\
   1016   setUint32SmallStringFt                setUint32;\
   1017   setUint64SmallStringFt                setUint64;\
   1018   setSmallArraySmallStringFt            setSmallArray;\
   1019   setCharSmallStringFt                  setChar;\
   1020   setFromSmallDictSmallStringFt         setFromSmallDict;\
   1021   setFromSmallJsonSmallStringFt         setFromSmallJson;\
   1022   setSmallBoolSmallStringFt             setSmallBool;\
   1023   setSmallDoubleSmallStringFt           setSmallDouble;\
   1024   setSmallIntSmallStringFt              setSmallInt;\
   1025   setSmallJsonSmallStringFt             setSmallJson;\
   1026   setSmallStringSmallStringFt           setSmallString;\
   1027   setNFreeSmallStringFt                 setNFree;\
   1028   appendSmallStringFt                   append;\
   1029   appendSmallJsonSmallStringFt          appendSmallJson;\
   1030   appendSSmallStringFt                  appendS;\
   1031   appendNSmashSmallStringFt             appendNSmash;\
   1032   appendNSmashSmallJsonSmallStringFt    appendNSmashSmallJson;\
   1033   appendNSmashSSmallStringFt            appendNSmashS;\
   1034   appendCharSmallStringFt               appendChar;\
   1035   appendSSmallStringFt                  push;\
   1036   catSmallStringFt                      pushMany;\
   1037   catSSmallStringFt                     pushManyS;\
   1038   pushNFreeManySmallStringFt            pushNFreeMany;\
   1039   pushNFreeManySSmallStringFt           pushNFreeManyS;\
   1040   prependSmallStringFt                  prepend;\
   1041   prependSmallJsonSmallStringFt         prependSmallJson;\
   1042   prependSSmallStringFt                 prependS;\
   1043   prependCharSmallStringFt              prependChar;\
   1044   prependNSmashSmallStringFt            prependNSmash;\
   1045   prependNSmashSmallJsonSmallStringFt   prependNSmashSmallJson;\
   1046   prependNSmashSSmallStringFt           prependNSmashS;\
   1047   catSmallStringFt                      cat;\
   1048   catSSmallStringFt                     catSt;\
   1049   replaceSmallStringFt                  replace;\
   1050   replaceCharSSmallStringFt             replaceCharS;\
   1051   replaceSCharSmallStringFt             replaceSChar;\
   1052   replaceCharCharSmallStringFt          replaceCharChar;\
   1053   replaceSmallJsonSmallJsonSmallStringFt replaceSmallJsonSmallJson;\
   1054   replaceSmallJsonSmallStringSmallStringFt replaceSmallJsonSmallString;\
   1055   replaceSmallJsonSSmallStringFt        replaceSmallJsonS;\
   1056   replaceSmallJsonCharSmallStringFt     replaceSmallJsonChar;\
   1057   replaceSmallStringSmallJsonSmallStringFt replaceSmallStringSmallJson;\
   1058   replaceSmallStringSmallStringSmallStringFt replaceSmallStringSmallString;\
   1059   replaceSmallStringSSmallStringFt      replaceSmallStringS;\
   1060   replaceSmallStringCharSmallStringFt   replaceSmallStringChar;\
   1061   replaceSSmallJsonSmallStringFt        replaceSSmallJson;\
   1062   replaceSSmallStringSmallStringFt      replaceSSmallString;\
   1063   replaceCharSmallJsonSmallStringFt     replaceCharSmallJson;\
   1064   replaceCharSmallStringSmallStringFt   replaceCharSmallString;\
   1065   replaceManySmallStringFt              replaceMany;\
   1066   icReplaceSmallStringFt                icReplace;\
   1067   icReplaceCharSSmallStringFt           icReplaceCharS;\
   1068   icReplaceSCharSmallStringFt           icReplaceSChar;\
   1069   icReplaceCharCharSmallStringFt        icReplaceCharChar;\
   1070   icReplaceSmallJsonSmallJsonSmallStringFt icReplaceSmallJsonSmallJson;\
   1071   icReplaceSmallJsonSmallStringSmallStringFt icReplaceSmallJsonSmallString;\
   1072   icReplaceSmallJsonSSmallStringFt      icReplaceSmallJsonS;\
   1073   icReplaceSmallJsonCharSmallStringFt   icReplaceSmallJsonChar;\
   1074   icReplaceSmallStringSmallJsonSmallStringFt icReplaceSmallStringSmallJson;\
   1075   icReplaceSmallStringSmallStringSmallStringFt icReplaceSmallStringSmallString;\
   1076   icReplaceSmallStringSSmallStringFt    icReplaceSmallStringS;\
   1077   icReplaceSmallStringCharSmallStringFt icReplaceSmallStringChar;\
   1078   icReplaceSSmallJsonSmallStringFt      icReplaceSSmallJson;\
   1079   icReplaceSSmallStringSmallStringFt    icReplaceSSmallString;\
   1080   icReplaceCharSmallJsonSmallStringFt   icReplaceCharSmallJson;\
   1081   icReplaceCharSmallStringSmallStringFt icReplaceCharSmallString;\
   1082   icReplaceManySmallStringFt            icReplaceMany;\
   1083   equalSmallStringFt                    equal;\
   1084   equalSSmallStringFt                   equalS;\
   1085   equalCharSmallStringFt                equalChar;\
   1086   equalSmallStringBaseFt                equalBase;\
   1087   equalSmallStringBoolFt                equalBool;\
   1088   equalSmallStringDoubleFt              equalDouble;\
   1089   equalSmallStringInt64Ft               equalInt64;\
   1090   equalSmallStringInt32Ft               equalInt32;\
   1091   equalSmallStringUint32Ft              equalUint32;\
   1092   equalSmallStringUint64Ft              equalUint64;\
   1093   equalSmallStringSmallBoolFt           equalSmallBool;\
   1094   equalSmallStringSmallBytesFt          equalSmallBytes;\
   1095   equalSmallStringSmallDoubleFt         equalSmallDouble;\
   1096   equalSmallStringSmallIntFt            equalSmallInt;\
   1097   equalSmallStringSmallJsonFt           equalSmallJson;\
   1098   icEqualSmallStringFt                  icEqual;\
   1099   icEqualSSmallStringFt                 icEqualS;\
   1100   icEqualCharSmallStringFt              icEqualChar;\
   1101   icEqualSmallStringBaseFt              icEqualBase;\
   1102   icEqualSmallStringSmallJsonFt         icEqualSmallJson;\
   1103   equalISSmallStringFt                  equalIS;\
   1104   equalICharSmallStringFt               equalIChar;\
   1105   equalISmallJsonSmallStringFt          equalISmallJson;\
   1106   equalISmallStringSmallStringFt        equalISmallString;\
   1107   startsWithSSmallStringFt              startsWithS;\
   1108   startsWithCharSmallStringFt           startsWithChar;\
   1109   startsWithSmallJsonSmallStringFt      startsWithSmallJson;\
   1110   startsWithSmallStringSmallStringFt    startsWithSmallString;\
   1111   endsWithSSmallStringFt                endsWithS;\
   1112   endsWithCharSmallStringFt             endsWithChar;\
   1113   endsWithSmallJsonSmallStringFt        endsWithSmallJson;\
   1114   endsWithSmallStringSmallStringFt      endsWithSmallString;\
   1115   countSSmallStringFt                   countS;\
   1116   countCharSmallStringFt                countChar;\
   1117   countSmallJsonSmallStringFt           countSmallJson;\
   1118   countSmallStringSmallStringFt         countSmallString;\
   1119   icStartsWithSSmallStringFt            icStartsWithS;\
   1120   icStartsWithCharSmallStringFt         icStartsWithChar;\
   1121   icStartsWithSmallJsonSmallStringFt    icStartsWithSmallJson;\
   1122   icStartsWithSmallStringSmallStringFt  icStartsWithSmallString;\
   1123   icEndsWithSSmallStringFt              icEndsWithS;\
   1124   icEndsWithCharSmallStringFt           icEndsWithChar;\
   1125   icEndsWithSmallJsonSmallStringFt      icEndsWithSmallJson;\
   1126   icEndsWithSmallStringSmallStringFt    icEndsWithSmallString;\
   1127   icCountSSmallStringFt                 icCountS;\
   1128   icCountCharSmallStringFt              icCountChar;\
   1129   icCountSmallJsonSmallStringFt         icCountSmallJson;\
   1130   icCountSmallStringSmallStringFt       icCountSmallString;\
   1131   isNumberSmallStringFt                 isNumber;\
   1132   isIntSmallStringFt                    isInt;\
   1133   parseIntSmallStringFt                 parseInt;\
   1134   parseDoubleSmallStringFt              parseDouble;\
   1135   intToSmallStringFt                    intTo;\
   1136   doubleToSmallStringFt                 doubleTo;\
   1137   lenSmallStringFt                      len;\
   1138   upperSmallStringFt                    upper;\
   1139   lowerSmallStringFt                    lower;\
   1140   trimSmallStringFt                     trim;\
   1141   lTrimSmallStringFt                    lTrim;\
   1142   rTrimSmallStringFt                    rTrim;\
   1143   uniqSmallStringFt                     uniq;\
   1144   icUniqSmallStringFt                   icUniq;\
   1145   getAtSmallStringFt                    getAt;\
   1146   setAtSmallStringFt                    setAt;\
   1147   sliceSmallStringFt                    slice;\
   1148   cropSmallStringFt                     crop;\
   1149   cropSSmallStringFt                    cropS;\
   1150   cropSmallJsonSmallStringFt            cropSmallJson;\
   1151   cropElemSmallStringFt                 cropElem;\
   1152   copySmallStringFt                     copy;\
   1153   insertSmallStringFt                   insert;\
   1154   insertSmallJsonSmallStringFt          insertSmallJson;\
   1155   insertSSmallStringFt                  insertS;\
   1156   insertNFreeSmallJsonSmallStringFt     insertNFreeSmallJson;\
   1157   insertNFreeSmallStringFt              insertNFree;\
   1158   insertSNFreeSmallStringFt             insertSNFree;\
   1159   injectSmallStringFt                   inject;\
   1160   delSmallStringFt                      del;\
   1161   delElemSmallStringFt                  delElem;\
   1162   hasSmallStringFt                      has;\
   1163   hasCharSmallStringFt                  hasChar;\
   1164   hasSmallJsonSmallStringFt             hasSmallJson;\
   1165   hasSmallStringSmallStringFt           hasSmallString;\
   1166   findSmallStringFt                     find;\
   1167   findCharSmallStringFt                 findChar;\
   1168   findSmallJsonSmallStringFt            findSmallJson;\
   1169   findSmallStringSmallStringFt          findSmallString;\
   1170   indexOfSmallStringFt                  indexOf;\
   1171   indexOfCharSmallStringFt              indexOfChar;\
   1172   indexOfSmallJsonSmallStringFt         indexOfSmallJson;\
   1173   indexOfSmallStringSmallStringFt       indexOfSmallString;\
   1174   icHasSmallStringFt                    icHas;\
   1175   icHasCharSmallStringFt                icHasChar;\
   1176   icHasSmallJsonSmallStringFt           icHasSmallJson;\
   1177   icHasSmallStringSmallStringFt         icHasSmallString;\
   1178   icFindSmallStringFt                   icFind;\
   1179   icFindCharSmallStringFt               icFindChar;\
   1180   icFindSmallJsonSmallStringFt          icFindSmallJson;\
   1181   icFindSmallStringSmallStringFt        icFindSmallString;\
   1182   icIndexOfSmallStringFt                icIndexOf;\
   1183   icIndexOfCharSmallStringFt            icIndexOfChar;\
   1184   icIndexOfSmallJsonSmallStringFt       icIndexOfSmallJson;\
   1185   icIndexOfSmallStringSmallStringFt     icIndexOfSmallString;\
   1186   emptySmallStringFt                    empty;\
   1187   isEmptySmallStringFt                  isEmpty;\
   1188   isBlankSmallStringFt                  isBlank;\
   1189   splitSmallStringFt                    split;\
   1190   splitCharSmallStringFt                splitChar;\
   1191   splitSmallJsonSmallStringFt           splitSmallJson;\
   1192   splitSmallStringSmallStringFt         splitSmallString;\
   1193   splitSSmallStringFt                   splitS;\
   1194   splitCharSSmallStringFt               splitCharS;\
   1195   splitSmallJsonSSmallStringFt          splitSmallJsonS;\
   1196   splitSmallStringSSmallStringFt        splitSmallStringS;\
   1197   extractSmallStringFt                  extract;\
   1198   extractCharSSmallStringFt             extractCharS;\
   1199   extractSCharSmallStringFt             extractSChar;\
   1200   extractCharCharSmallStringFt          extractCharChar;\
   1201   extractSmallJsonSmallJsonSmallStringFt   extractSmallJsonSmallJson;\
   1202   extractSmallJsonSmallStringSmallStringFt extractSmallJsonSmallString;\
   1203   extractSmallJsonSSmallStringFt           extractSmallJsonS;\
   1204   extractSmallJsonCharSmallStringFt        extractSmallJsonChar;\
   1205   extractSmallStringSmallJsonSmallStringFt   extractSmallStringSmallJson;\
   1206   extractSmallStringSmallStringSmallStringFt extractSmallStringSmallString;\
   1207   extractSmallStringSSmallStringFt      extractSmallStringS;\
   1208   extractSmallStringCharSmallStringFt   extractSmallStringChar;\
   1209   extractSSmallJsonSmallStringFt        extractSSmallJson;\
   1210   extractSSmallStringSmallStringFt      extractSSmallString;\
   1211   extractCharSmallJsonSmallStringFt     extractCharSmallJson;\
   1212   extractCharSmallStringSmallStringFt   extractCharSmallString;\
   1213   icSplitSmallStringFt                  icSplit;\
   1214   icSplitCharSmallStringFt              icSplitChar;\
   1215   icSplitSmallJsonSmallStringFt         icSplitSmallJson;\
   1216   icSplitSmallStringSmallStringFt       icSplitSmallString;\
   1217   icSplitSSmallStringFt                 icSplitS;\
   1218   icSplitCharSSmallStringFt             icSplitCharS;\
   1219   icSplitSmallJsonSSmallStringFt        icSplitSmallJsonS;\
   1220   icSplitSmallStringSSmallStringFt      icSplitSmallStringS;\
   1221   icExtractSmallStringFt                icExtract;\
   1222   icExtractCharSSmallStringFt           icExtractCharS;\
   1223   icExtractSCharSmallStringFt           icExtractSChar;\
   1224   icExtractCharCharSmallStringFt        icExtractCharChar;\
   1225   icExtractSmallJsonSmallJsonSmallStringFt   icExtractSmallJsonSmallJson;\
   1226   icExtractSmallJsonSmallStringSmallStringFt icExtractSmallJsonSmallString;\
   1227   icExtractSmallJsonSSmallStringFt           icExtractSmallJsonS;\
   1228   icExtractSmallJsonCharSmallStringFt        icExtractSmallJsonChar;\
   1229   icExtractSmallStringSmallJsonSmallStringFt icExtractSmallStringSmallJson;\
   1230   icExtractSmallStringSmallStringSmallStringFt icExtractSmallStringSmallString;\
   1231   icExtractSmallStringSSmallStringFt           icExtractSmallStringS;\
   1232   icExtractSmallStringCharSmallStringFt        icExtractSmallStringChar;\
   1233   icExtractSSmallJsonSmallStringFt      icExtractSSmallJson;\
   1234   icExtractSSmallStringSmallStringFt    icExtractSSmallString;\
   1235   icExtractCharSmallJsonSmallStringFt   icExtractCharSmallJson;\
   1236   icExtractCharSmallStringSmallStringFt icExtractCharSmallString;\
   1237   colorSmallStringFt                    color;\
   1238   colordSmallStringFt                   colord;\
   1239   readFileSmallStringFt                 readFile;\
   1240   readFileSmallJsonSmallStringFt        readFileSmallJson;\
   1241   readFileSmallStringSmallStringFt      readFileSmallString;\
   1242   readStreamSmallStringFt               readStream;\
   1243   writeFileSmallStringFt                writeFile;\
   1244   writeFileSmallJsonSmallStringFt       writeFileSmallJson;\
   1245   writeFileSmallStringSmallStringFt     writeFileSmallString;\
   1246   writeStreamSmallStringFt              writeStream;\
   1247   appendFileSmallStringFt               appendFile;\
   1248   appendFileSmallStringSmallStringFt    appendFileSmallString
   1249 
   1250 typedef struct {
   1251   freeSmallStringFt                     free;
   1252   terminateSmallStringFt                terminate;
   1253   toStringSmallStringFt                 toString;
   1254   duplicateSmallStringFt                duplicate;
   1255   smashSmallStringFt                    smash;
   1256   finishSmallStringFt                   finish;
   1257   SMALLSTRINGFUNCTIONST;
   1258 } smallStringFunctionst;
   1259 
   1260 /**
   1261  * class
   1262  */
   1263 struct smallString {
   1264   const char *type;
   1265   smallStringFunctionst *f;
   1266 
   1267   // internal
   1268   sStringt *data;
   1269   size_t _len;
   1270 };
   1271 
   1272 // base
   1273 
   1274 #define createSmallString(obj) ;smallStringt obj; initiateSmallString(&obj)
   1275 #define createAllocateSmallString(obj) ;smallStringt *obj; initiateAllocateSmallString(&obj)
   1276 
   1277 void initiateSmallString(smallStringt *self);
   1278 void initiateAllocateSmallString(smallStringt **self);
   1279 void finalizeRecycleSmallString(void *arg UNUSED);
   1280 void finalizeSmallString(void);
   1281 
   1282 // initialize class methods, call registerMethodsSmallString from classes inheriting this class
   1283 void registerMethodsSmallString(smallStringFunctionst *f);
   1284 
   1285 smallStringt* allocSmallString(const char *string);
   1286 
   1287 // terminate smallStringt val when it is out of scope
   1288 void cleanUpSmallStringTerminateG(smallStringt **val);
   1289 
   1290 // free smallStringt local val when it is out of scope
   1291 void cleanUpSmallStringFreeLocalG(smallStringt *val);
   1292 
   1293 // free smallStringt val when it is out of scope
   1294 void cleanUpSmallStringFreeG(smallStringt **val);
   1295 
   1296 // finish smallStringt val when it is out of scope
   1297 void cleanUpSmallStringFinishG(smallStringt **val);
   1298 
   1299 /**
   1300  * declare pointer name with type smallStringt and terminate name when it is out of scope
   1301  */
   1302 #define cleanSmallStringP(name) smallStringt *name CLEANUP(cleanUpSmallStringTerminateG)
   1303 
   1304 /**
   1305  * allocate smallString (pointer) and clean up when it is out of scope
   1306  */
   1307 #define cleanAllocateSmallString(obj) ;cleanSmallStringP(obj); initiateAllocateSmallString(&obj)
   1308 
   1309 /**
   1310  * declare local object name with type smallStringt and free name when it is out of scope
   1311  */
   1312 #define cleanSmallString(name) smallStringt name CLEANUP(cleanUpSmallStringFreeLocalG); initiateSmallString(&name)
   1313 
   1314 /**
   1315  * declare pointer name with type smallStringt and free name when it is out of scope
   1316  */
   1317 #define cleanFreeSmallString(name) smallStringt *name CLEANUP(cleanUpSmallStringFreeG)
   1318 
   1319 /**
   1320  * declare pointer name with Type smallStringt and finish name when it is out of scope
   1321  */
   1322 #define cleanFinishSmallStringP(name) smallStringt *name CLEANUP(cleanUpSmallStringFinishG)
   1323 
   1324 /**
   1325  * create String: f("qwd ", str," werr ", str2)
   1326  * like catS, concatenate strings to a new smallString
   1327  */
   1328 smallStringt* createSF(const char *paramType, ...);
   1329 #define createS(...) createSF("", __VA_ARGS__, NULL)
   1330 
   1331 smallStringt* duplicateSmallStringG (smallStringt *self);
   1332 
   1333 void freeSmallStringG          (smallStringt *self);
   1334 
   1335 smallStringt* setBoolSmallStringG       (smallStringt* self, bool p2);
   1336 smallStringt* setDoubleSmallStringG     (smallStringt* self, double p2);
   1337 smallStringt* setInt64SmallStringG      (smallStringt* self, int64_t p2);
   1338 smallStringt* setInt32SmallStringG      (smallStringt* self, int32_t p2);
   1339 smallStringt* setUint32SmallStringG     (smallStringt* self, uint32_t p2);
   1340 smallStringt* setUint64SmallStringG     (smallStringt* self, uint64_t p2);
   1341 smallStringt* setCharSmallStringG       (smallStringt *self, char c);
   1342 smallStringt* setSmallStringG           (smallStringt* self, const char* p2);
   1343 smallStringt* setSmallArraySmallStringG (smallStringt* self, smallArrayt* p2);
   1344 smallStringt* setFromSmallDictSmallStringG(smallStringt* self, smallDictt* p2);
   1345 smallStringt* setFromSmallJsonSmallStringG(smallStringt* self, smallJsont* p2);
   1346 smallStringt* setSmallBoolSmallStringG  (smallStringt* self, smallBoolt* p2);
   1347 smallStringt* setSmallDoubleSmallStringG(smallStringt* self, smallDoublet* p2);
   1348 smallStringt* setSmallIntSmallStringG   (smallStringt* self, smallIntt* p2);
   1349 smallStringt* setSmallJsonSmallStringG  (smallStringt* self, smallJsont* p2);
   1350 smallStringt* setSmallStringSmallStringG(smallStringt* self, smallStringt* p2);
   1351 
   1352 char getAtSmallStringG        (smallStringt *self, char retType UNUSED, int64_t index);
   1353 smallStringt* setAtSmallStringG         (smallStringt *self, int64_t index, char c);
   1354 
   1355 smallStringt* appendSmallStringG               (smallStringt *self, smallStringt *string);
   1356 smallStringt* appendSmallJsonSmallStringG      (smallStringt *self, smallJsont *string);
   1357 smallStringt* appendSSmallStringG              (smallStringt *self, const char *string);
   1358 smallStringt* appendCharSmallStringG           (smallStringt *self, char c);
   1359 smallStringt* appendNSmashSmallStringG         (smallStringt *self, smallStringt *smallString);
   1360 smallStringt* appendNSmashSmallJsonSmallStringG(smallStringt *self, smallJsont *string);
   1361 smallStringt* appendNSmashSSmallStringG        (smallStringt *self, char *string);
   1362 
   1363 smallStringt* prependSmallStringG      (smallStringt *self, smallStringt *string);
   1364 smallStringt* prependSmallJsonSmallStringG(smallStringt *self, smallJsont *json);
   1365 smallStringt* prependSSmallStringG     (smallStringt *self, const char *string);
   1366 smallStringt* prependCharSmallStringG  (smallStringt *self, char c);
   1367 smallStringt* prependNSmashSmallStringG(smallStringt *self, smallStringt *string);
   1368 smallStringt* prependNSmashSmallJsonSmallStringG(smallStringt *self, smallJsont *json);
   1369 smallStringt* prependNSmashSSmallStringG(smallStringt *self, char *string);
   1370 smallStringt* replaceSmallStringG      (smallStringt *self, const char *olds, const char *news, size_t max);
   1371 smallStringt* replaceCharSSmallStringG (smallStringt *self, char olds, const char *news, size_t max);
   1372 smallStringt* replaceSCharSmallStringG (smallStringt *self, const char *olds, char news, size_t max);
   1373 smallStringt* replaceCharCharSmallStringG(smallStringt *self, char olds, char news, size_t max);
   1374 smallStringt* replaceSmallJsonSmallJsonSmallStringG(smallStringt *self, smallJsont *olds, smallJsont *news, size_t max);
   1375 smallStringt* replaceSmallJsonSmallStringSmallStringG(smallStringt *self, smallJsont *olds, smallStringt *news, size_t max);
   1376 smallStringt* replaceSmallJsonSSmallStringG(smallStringt *self, smallJsont *olds, const char *news, size_t max);
   1377 smallStringt* replaceSmallJsonCharSmallStringG(smallStringt *self, smallJsont *olds, char news, size_t max);
   1378 smallStringt* replaceSmallStringSmallJsonSmallStringG(smallStringt *self, smallStringt *olds, smallJsont *news, size_t max);
   1379 smallStringt* replaceSmallStringSmallStringSmallStringG(smallStringt *self, smallStringt *olds, smallStringt *news, size_t max);
   1380 smallStringt* replaceSmallStringSSmallStringG(smallStringt *self, smallStringt *olds, const char *news, size_t max);
   1381 smallStringt* replaceSmallStringCharSmallStringG(smallStringt *self, smallStringt *olds, char news, size_t max);
   1382 smallStringt* replaceSSmallJsonSmallStringG(smallStringt *self, const char *olds, smallJsont *news, size_t max);
   1383 smallStringt* replaceSSmallStringSmallStringG(smallStringt *self, const char *olds, smallStringt *news, size_t max);
   1384 smallStringt* replaceCharSmallJsonSmallStringG(smallStringt *self, char olds, smallJsont *news, size_t max);
   1385 smallStringt* replaceCharSmallStringSmallStringG(smallStringt *self, char olds, smallStringt *news, size_t max);
   1386 smallStringt* icReplaceSmallStringG    (smallStringt *self, const char *olds, const char *news, size_t max);
   1387 smallStringt* icReplaceCharSSmallStringG(smallStringt *self, char olds, const char *news, size_t max);
   1388 smallStringt* icReplaceSCharSmallStringG(smallStringt *self, const char *olds, char news, size_t max);
   1389 smallStringt* icReplaceCharCharSmallStringG(smallStringt *self, char olds, char news, size_t max);
   1390 smallStringt* icReplaceSmallJsonSmallJsonSmallStringG(smallStringt *self, smallJsont *olds, smallJsont *news, size_t max);
   1391 smallStringt* icReplaceSmallJsonSmallStringSmallStringG(smallStringt *self, smallJsont *olds, smallStringt *news, size_t max);
   1392 smallStringt* icReplaceSmallJsonSSmallStringG(smallStringt *self, smallJsont *olds, const char *news, size_t max);
   1393 smallStringt* icReplaceSmallJsonCharSmallStringG(smallStringt *self, smallJsont *olds, char news, size_t max);
   1394 smallStringt* icReplaceSmallStringSmallJsonSmallStringG(smallStringt *self, smallStringt *olds, smallJsont *news, size_t max);
   1395 smallStringt* icReplaceSmallStringSmallStringSmallStringG(smallStringt *self, smallStringt *olds, smallStringt *news, size_t max);
   1396 smallStringt* icReplaceSmallStringSSmallStringG(smallStringt *self, smallStringt *olds, const char *news, size_t max);
   1397 smallStringt* icReplaceSmallStringCharSmallStringG(smallStringt *self, smallStringt *olds, char news, size_t max);
   1398 smallStringt* icReplaceSSmallJsonSmallStringG(smallStringt *self, const char *olds, smallJsont *news, size_t max);
   1399 smallStringt* icReplaceSSmallStringSmallStringG(smallStringt *self, const char *olds, smallStringt *news, size_t max);
   1400 smallStringt* icReplaceCharSmallJsonSmallStringG(smallStringt *self, char olds, smallJsont *news, size_t max);
   1401 smallStringt* icReplaceCharSmallStringSmallStringG(smallStringt *self, char olds, smallStringt *news, size_t max);
   1402 bool equalSmallStringBaseG    (smallStringt* self, baset* p2);
   1403 bool equalSmallStringBoolG    (smallStringt* self, bool p2);
   1404 bool equalSmallStringDoubleG  (smallStringt* self, double p2);
   1405 bool equalSmallStringInt64G   (smallStringt* self, int64_t p2);
   1406 bool equalSmallStringInt32G   (smallStringt* self, int32_t p2);
   1407 bool equalSmallStringUint32G  (smallStringt* self, uint32_t p2);
   1408 bool equalSmallStringUint64G  (smallStringt* self, uint64_t p2);
   1409 bool equalSmallStringSmallBoolG(smallStringt* self, smallBoolt* p2);
   1410 bool equalSmallStringSmallBytesG(smallStringt* self, smallBytest* p2);
   1411 bool equalSmallStringSmallDoubleG(smallStringt* self, smallDoublet* p2);
   1412 bool equalSmallStringSmallIntG(smallStringt* self, smallIntt* p2);
   1413 bool equalSmallStringSmallJsonG(smallStringt* self, smallJsont* p2);
   1414 bool equalSmallStringFG       (smallStringt* self, smallStringt* p2);
   1415 bool equalCharSmallStringG    (smallStringt *self, char c);
   1416 bool equalSSmallStringG       (smallStringt *self, const char *string);
   1417 bool icEqualSmallStringBaseG     (smallStringt* self, baset* p2);
   1418 bool icEqualSmallStringSmallJsonG(smallStringt* self, smallJsont* p2);
   1419 bool icEqualSmallStringFG        (smallStringt* self, smallStringt* p2);
   1420 bool icEqualCharSmallStringG     (smallStringt *self, char c);
   1421 bool icEqualSSmallStringG        (smallStringt *self, const char *string);
   1422 bool equalISSmallStringG      (smallStringt *self, const char *string, int64_t index);
   1423 bool equalICharSmallStringG   (smallStringt *self, char c, int64_t index);
   1424 bool equalISmallJsonSmallStringG(smallStringt *self, smallJsont *string, int64_t index);
   1425 bool equalISmallStringSmallStringG(smallStringt *self, smallStringt *string, int64_t index);
   1426 bool startsWithSSmallStringG          (smallStringt *self, const char *string);
   1427 bool startsWithCharSmallStringG       (smallStringt *self, char c);
   1428 bool startsWithSmallJsonSmallStringG  (smallStringt *self, smallJsont *string);
   1429 bool startsWithSmallStringSmallStringG(smallStringt *self, smallStringt *string);
   1430 bool endsWithSSmallStringG          (smallStringt *self, const char *string);
   1431 bool endsWithCharSmallStringG       (smallStringt *self, char c);
   1432 bool endsWithSmallJsonSmallStringG  (smallStringt *self, smallJsont *string);
   1433 bool endsWithSmallStringSmallStringG(smallStringt *self, smallStringt *string);
   1434 ssize_t countSSmallStringG          (smallStringt *self, const char *string);
   1435 ssize_t countCharSmallStringG       (smallStringt *self, char c);
   1436 ssize_t countSmallJsonSmallStringG  (smallStringt *self, smallJsont *string);
   1437 ssize_t countSmallStringSmallStringG(smallStringt *self, smallStringt *string);
   1438 bool icStartsWithSSmallStringG          (smallStringt *self, const char *string);
   1439 bool icStartsWithCharSmallStringG       (smallStringt *self, char c);
   1440 bool icStartsWithSmallJsonSmallStringG  (smallStringt *self, smallJsont *string);
   1441 bool icStartsWithSmallStringSmallStringG(smallStringt *self, smallStringt *string);
   1442 bool icEndsWithSSmallStringG          (smallStringt *self, const char *string);
   1443 bool icEndsWithCharSmallStringG       (smallStringt *self, char c);
   1444 bool icEndsWithSmallJsonSmallStringG  (smallStringt *self, smallJsont *string);
   1445 bool icEndsWithSmallStringSmallStringG(smallStringt *self, smallStringt *string);
   1446 ssize_t icCountSSmallStringG          (smallStringt *self, const char *string);
   1447 ssize_t icCountCharSmallStringG       (smallStringt *self, char c);
   1448 ssize_t icCountSmallJsonSmallStringG  (smallStringt *self, smallJsont *string);
   1449 ssize_t icCountSmallStringSmallStringG(smallStringt *self, smallStringt *string);
   1450 bool isNumberSmallStringG     (smallStringt *self);
   1451 bool isIntSmallStringG        (smallStringt *self);
   1452 int64_t parseIntSmallStringG (smallStringt *self);
   1453 smallStringt* intToSmallStringG        (smallStringt *self, int64_t n);
   1454 double   parseDoubleSmallStringG (smallStringt *self);
   1455 smallStringt* doubleToSmallStringG     (smallStringt *self, double n);
   1456 size_t lenSmallStringG        (smallStringt *self);
   1457 smallStringt*    upperSmallStringG      (smallStringt *self);
   1458 smallStringt*    lowerSmallStringG      (smallStringt *self);
   1459 smallStringt*    trimSmallStringG       (smallStringt *self);
   1460 smallStringt*    lTrimSmallStringG      (smallStringt *self);
   1461 smallStringt*    rTrimSmallStringG      (smallStringt *self);
   1462 smallStringt*    uniqSmallStringG       (smallStringt *self, char c);
   1463 smallStringt*    icUniqSmallStringG     (smallStringt *self, char c);
   1464 smallStringt*    sliceSmallStringG      (smallStringt *self, int64_t start, int64_t end);
   1465 smallStringt* cropSmallStringG       (smallStringt *self, int64_t start, int64_t end);
   1466 char* cropSSmallStringG              (smallStringt *self, int64_t start, int64_t end);
   1467 smallJsont* cropSmallJsonSmallStringG(smallStringt *self, int64_t start, int64_t end);
   1468 char cropElemSmallStringG            (smallStringt *self, int64_t index);
   1469 smallStringt* copySmallStringG(smallStringt *self, int64_t start, int64_t end);
   1470 smallStringt*    insertSmallStringG              (smallStringt *self, int64_t index, smallStringt *toInsert);
   1471 smallStringt*    insertSmallJsonSmallStringG     (smallStringt *self, int64_t index, smallJsont *toInsert);
   1472 smallStringt*    insertSSmallStringG             (smallStringt *self, int64_t index, const char *toInsert);
   1473 smallStringt*    insertNFreeSmallStringG         (smallStringt *self, int64_t index, smallStringt *toInsert);
   1474 smallStringt*    insertNFreeSmallJsonSmallStringG(smallStringt *self, int64_t index, smallJsont *toInsert);
   1475 smallStringt*    insertSNFreeSmallStringG        (smallStringt *self, int64_t index, char *toInsert);
   1476 smallStringt*    injectSmallStringG     (smallStringt *self, int64_t index, char toInject);
   1477 smallStringt*  delSmallStringG          (smallStringt *self, int64_t start, int64_t end);
   1478 smallStringt*  delElemSmallStringG      (smallStringt *self, int64_t index);
   1479 char* hasSmallStringG           (smallStringt *self, const char *needle);
   1480 char* hasCharSmallStringG       (smallStringt *self, char c);
   1481 char* hasSmallJsonSmallStringG  (smallStringt *self, smallJsont *needle);
   1482 char* hasSmallStringSmallStringG(smallStringt *self, smallStringt *needle);
   1483 smallStringt* findSmallStringG           (smallStringt *self, const char *needle);
   1484 smallStringt* findCharSmallStringG       (smallStringt *self, char c);
   1485 smallStringt* findSmallJsonSmallStringG  (smallStringt *self, smallJsont *needle);
   1486 smallStringt* findSmallStringSmallStringG(smallStringt *self, smallStringt *needle);
   1487 ssize_t indexOfSmallStringG           (smallStringt *self, const char *needle);
   1488 ssize_t indexOfCharSmallStringG       (smallStringt *self, char c);
   1489 ssize_t indexOfSmallJsonSmallStringG  (smallStringt *self, smallJsont *needle);
   1490 ssize_t indexOfSmallStringSmallStringG(smallStringt *self, smallStringt *needle);
   1491 char* icHasSmallStringG           (smallStringt *self, const char *needle);
   1492 char* icHasCharSmallStringG       (smallStringt *self, char c);
   1493 char* icHasSmallJsonSmallStringG  (smallStringt *self, smallJsont *needle);
   1494 char* icHasSmallStringSmallStringG(smallStringt *self, smallStringt *needle);
   1495 smallStringt* icFindSmallStringG           (smallStringt *self, const char *needle);
   1496 smallStringt* icFindCharSmallStringG       (smallStringt *self, char c);
   1497 smallStringt* icFindSmallJsonSmallStringG  (smallStringt *self, smallJsont *needle);
   1498 smallStringt* icFindSmallStringSmallStringG(smallStringt *self, smallStringt *needle);
   1499 ssize_t icIndexOfSmallStringG           (smallStringt *self, const char *needle);
   1500 ssize_t icIndexOfCharSmallStringG       (smallStringt *self, char c);
   1501 ssize_t icIndexOfSmallJsonSmallStringG  (smallStringt *self, smallJsont *needle);
   1502 ssize_t icIndexOfSmallStringSmallStringG(smallStringt *self, smallStringt *needle);
   1503 smallStringt*    emptySmallStringG      (smallStringt *self);
   1504 bool   isEmptySmallStringG    (smallStringt *self);
   1505 bool   isBlankSmallStringG    (smallStringt *self);
   1506 smallArrayt* splitSmallStringG           (smallStringt *self, const char *delim);
   1507 smallArrayt* splitCharSmallStringG       (smallStringt *self, char c);
   1508 smallArrayt* splitSmallJsonSmallStringG  (smallStringt *self, smallJsont *delim);
   1509 smallArrayt* splitSmallStringSmallStringG(smallStringt *self, smallStringt *delim);
   1510 char** splitCharPSSmallStringG      (smallStringt *self, const char* delim);
   1511 char** splitCharSSmallStringG       (smallStringt *self, char c);
   1512 char** splitSmallJsonSSmallStringG  (smallStringt *self, smallJsont *delim);
   1513 char** splitSmallStringSSmallStringG(smallStringt *self, smallStringt *delim);
   1514 smallArrayt* extractSmallStringG(smallStringt *self, const char* delim1, const char* delim2);
   1515 smallArrayt* extractCharSSmallStringG                 (smallStringt *self, char delim1, const char* delim2);
   1516 smallArrayt* extractSCharSmallStringG                 (smallStringt *self, const char* delim1, char delim2);
   1517 smallArrayt* extractCharCharSmallStringG              (smallStringt *self, char delim1, char delim2);
   1518 smallArrayt* extractSmallJsonSmallJsonSmallStringG    (smallStringt *self, smallJsont* delim1, smallJsont* delim2);
   1519 smallArrayt* extractSmallJsonSmallStringSmallStringG  (smallStringt *self, smallJsont* delim1, smallStringt* delim2);
   1520 smallArrayt* extractSmallJsonSSmallStringG            (smallStringt *self, smallJsont* delim1, const char* delim2);
   1521 smallArrayt* extractSmallJsonCharSmallStringG         (smallStringt *self, smallJsont* delim1, char delim2);
   1522 smallArrayt* extractSmallStringSmallJsonSmallStringG  (smallStringt *self, smallStringt* delim1, smallJsont* delim2);
   1523 smallArrayt* extractSmallStringSmallStringSmallStringG(smallStringt *self, smallStringt* delim1, smallStringt* delim2);
   1524 smallArrayt* extractSmallStringSSmallStringG          (smallStringt *self, smallStringt* delim1, const char* delim2);
   1525 smallArrayt* extractSmallStringCharSmallStringG       (smallStringt *self, smallStringt* delim1, char delim2);
   1526 smallArrayt* extractSSmallJsonSmallStringG            (smallStringt *self, const char* delim1, smallJsont* delim2);
   1527 smallArrayt* extractSSmallStringSmallStringG          (smallStringt *self, const char* delim1, smallStringt* delim2);
   1528 smallArrayt* extractCharSmallJsonSmallStringG         (smallStringt *self, char delim1, smallJsont* delim2);
   1529 smallArrayt* extractCharSmallStringSmallStringG       (smallStringt *self, char delim1, smallStringt* delim2);
   1530 smallArrayt* icSplitSmallStringG           (smallStringt *self, const char *delim);
   1531 smallArrayt* icSplitCharSmallStringG       (smallStringt *self, char c);
   1532 smallArrayt* icSplitSmallJsonSmallStringG  (smallStringt *self, smallJsont *delim);
   1533 smallArrayt* icSplitSmallStringSmallStringG(smallStringt *self, smallStringt *delim);
   1534 char** icSplitCharPSSmallStringG      (smallStringt *self, char *delim);
   1535 char** icSplitCharSSmallStringG       (smallStringt *self, char c);
   1536 char** icSplitSmallJsonSSmallStringG  (smallStringt *self, smallJsont *delim);
   1537 char** icSplitSmallStringSSmallStringG(smallStringt *self, smallStringt *delim);
   1538 smallArrayt* icExtractSmallStringG(smallStringt *self, const char* delim1, const char* delim2);
   1539 smallArrayt* icExtractCharSSmallStringG                 (smallStringt *self, char delim1, const char* delim2);
   1540 smallArrayt* icExtractSCharSmallStringG                 (smallStringt *self, const char* delim1, char delim2);
   1541 smallArrayt* icExtractCharCharSmallStringG              (smallStringt *self, char delim1, char delim2);
   1542 smallArrayt* icExtractSmallJsonSmallJsonSmallStringG    (smallStringt *self, smallJsont* delim1, smallJsont* delim2);
   1543 smallArrayt* icExtractSmallJsonSmallStringSmallStringG  (smallStringt *self, smallJsont* delim1, smallStringt* delim2);
   1544 smallArrayt* icExtractSmallJsonSSmallStringG            (smallStringt *self, smallJsont* delim1, const char* delim2);
   1545 smallArrayt* icExtractSmallJsonCharSmallStringG         (smallStringt *self, smallJsont* delim1, char delim2);
   1546 smallArrayt* icExtractSmallStringSmallJsonSmallStringG  (smallStringt *self, smallStringt* delim1, smallJsont* delim2);
   1547 smallArrayt* icExtractSmallStringSmallStringSmallStringG(smallStringt *self, smallStringt* delim1, smallStringt* delim2);
   1548 smallArrayt* icExtractSmallStringSSmallStringG          (smallStringt *self, smallStringt* delim1, const char* delim2);
   1549 smallArrayt* icExtractSmallStringCharSmallStringG       (smallStringt *self, smallStringt* delim1, char delim2);
   1550 smallArrayt* icExtractSSmallJsonSmallStringG            (smallStringt *self, const char* delim1, smallJsont* delim2);
   1551 smallArrayt* icExtractSSmallStringSmallStringG          (smallStringt *self, const char* delim1, smallStringt* delim2);
   1552 smallArrayt* icExtractCharSmallJsonSmallStringG         (smallStringt *self, char delim1, smallJsont* delim2);
   1553 smallArrayt* icExtractCharSmallStringSmallStringG       (smallStringt *self, char delim1, smallStringt* delim2);
   1554 smallStringt* readFileSmallStringG           (smallStringt *self, const char *filePath);
   1555 smallStringt* readFileSmallJsonSmallStringG  (smallStringt *self, smallJsont *filePath);
   1556 smallStringt* readFileSmallStringSmallStringG(smallStringt *self, smallStringt *filePath);
   1557 smallStringt* readStreamSmallStringG         (smallStringt *self, FILE *fp);
   1558 int writeFileSmallStringG           (smallStringt *self, const char *filePath);
   1559 int writeFileSmallJsonSmallStringG  (smallStringt *self, smallJsont *filePath);
   1560 int writeFileSmallStringSmallStringG(smallStringt *self, smallStringt *filePath);
   1561 int writeStreamSmallStringG         (smallStringt *self, FILE *fp);
   1562 int appendFileSmallStringFG           (smallStringt *self, const char *filePath); //TODO remove F - oGMacros generates a macro making the compilation fail
   1563 int appendFileSmallStringSmallStringG(smallStringt *self, smallStringt *filePath);
   1564 
   1565 // see libsheepy.h for colors and effects
   1566 // end class smallString