26 #define internal static 131 #define SDICT_MIN_ELEMENTS 12 132 #define SDICT_REALLOC_STEPS 4 134 #define SARRAY_MIN_ELEMENTS 4 135 #define SARRAY_REALLOC_STEPS 4 204 r =
sizeof(
sBytest) +
sizeof(
char) * (((
sBytest* )obj)->count - 1);
675 return(strdup(
"true"));
678 return(strdup(
"false"));
690 return(strdup(
"<data container>"));
707 return(strdup(
"{}"));
710 char *
r = strdup(
"{");
712 bool hasAtLeastOneElement =
no;
716 hasAtLeastOneElement =
yes;
738 if (hasAtLeastOneElement) {
760 isError(s, malloc(256*
sizeof(
char)))
return(NULL);
761 snprintf(s,256,
"%e", obj->
value);
779 isError(s, malloc(256*
sizeof(
char)))
return(NULL);
780 snprintf(s,256,
"%" PRIi64, obj->
value);
814 return(strdup(
"[]"));
817 char *
r = strdup(
"[");
819 bool emptySlot =
false;;
843 if (!cnt && emptySlot) {
864 return(strdup(
"null"));
880 return(strdup(
"[]"));
971 return(strdup(
"{}"));
974 char *
r = strdup(
"{");
976 bool hasAtLeastOneElement =
no;
980 hasAtLeastOneElement =
yes;
1010 if (hasAtLeastOneElement) {
1048 return(strdup(
"[]"));
1051 char *
r = strdup(
"[");
1053 bool emptySlot =
false;;
1085 if (!cnt && emptySlot) {
1111 for (uint32_t
i = 0;
i < types->
count;
i++) {
1112 char b = (&(types->
data))[
i];
1113 if ((
size_t)b >=
ARRAY_SIZE(SMALL_TYPE_NAMES)) {
1187 const char **
r = NULL;
1193 isError(r, malloc((types->
count+1) *
sizeof(
char *)))
return(NULL);
1194 r[types->
count] = NULL;
1196 for (uint32_t
i = 0 ;
i < types->
count ;
i++) {
1197 char b = (&(types->
data))[
i];
1198 if ((
size_t)b >=
ARRAY_SIZE(SMALL_TYPE_NAMES)) {
1202 r[
i] = SMALL_TYPE_NAMES[(size_t) b];
1314 if (!dict || !key) {
1334 if (!dict || !key) {
1339 if (e->key &&
eqS(key, e->key)) {
1360 if (e->key &&
strEq(key, e->key)) {
1399 if (e->key &&
strEq(key, e->key)) {
1439 if (e->key &&
strEq(key, e->key)) {
1486 if ((*dict)->count == 0) {
1487 (*dict)->elements.key = strdup(key);
1488 (*dict)->elements.data =
data;
1491 if ((*dict)->count >= (*dict)->maxCount) {
1503 di[(*dict)->count].
key = strdup(key);
1521 if (e->key &&
strEq(key, e->key)) {
1540 return(&(string->
data));
1581 if ((*array)->count == 0) {
1582 (*array)->data =
data;;
1585 if ((*array)->count >= (*array)->maxCount) {
1597 smallt **arr = &((*array)->data);
1598 arr[(*array)->count] =
data;
1629 if ((*array)->count == 0) {
1630 (*array)->data =
data;;
1633 if ((*array)->count >= (*array)->maxCount) {
1645 smallt **arr = &((*array)->data);
1647 for (uint32_t
i = (*array)->count;
i > 0;
i--) {
1683 for (uint32_t
i = 1 ;
i < array->
count ;
i++) {
1701 return(&(((
smallt **) &(array->
data))[index]));
1763 if (value == (((
smallt **) &(array->
data))[index])) {
1788 for (uint32_t
i = 0 ;
i < array->
count/2 ;
i++) {
1790 arr[
i] = arr[array->
count-1 -
i];
1831 for (uint32_t
i = start ;
i < end ;
i++) {
1836 for (uint32_t
i = 0 ;
i < (array->
count - end) ;
i ++) {
1837 arr[start+
i] = arr[end +
i];;
1840 array->
count -= end - start;
1871 return(&(bytes->
data));
1893 if ((*bytes)->count == 0) {
1894 (*bytes)->data =
data;;
1897 sBytest *tmp = realloc(*bytes,
sizeof(
sBytest) +
sizeof(
char) * ((*bytes)->count));
1903 (&((*bytes)->data))[(*bytes)->count] =
data;
1932 if (!data || !size) {
1952 if ((*bytes)->count == 0) {
1953 sBytest *tmp = realloc(*bytes,
sizeof(
sBytest) +
sizeof(
char) * (size-1));
1959 memcpy(&((*bytes)->data), data, size);
1960 (*bytes)->count = size;;
1964 sBytest *tmp = realloc(*bytes,
sizeof(
sBytest) +
sizeof(
char) * ((*bytes)->count + size-1));
1970 memcpy((&((*bytes)->data))+(*bytes)->count, data, size);
1971 (*bytes)->count += size;;
2077 switch(e->data->type) {
2198 if (!obj || !obj->
count) {
2222 uint32_t *count = NULL;
2230 data = &(obj->
data)+1;
2238 data = (
char *)&(obj->
data)+1;
2242 data = &(obj->
data)+1;
2247 data = &(obj->
data)+1;
2248 i = (int64_t *)data;
2252 s = (
char *)&(obj->
data)+1;
2256 data = (
char *)&(obj->
data)+1;
2261 data = &(obj->
data)+1;
2262 count = (uint32_t *)data;
2263 s = (
char *)data +
sizeof(uint32_t);
2297 uint32_t *count = NULL;
2300 dictCount = *((uint32_t *)(*data));
2301 *data +=
sizeof(uint32_t);
2308 for (uint32_t counter = 0 ; counter < dictCount ; counter++) {
2312 *data += strlen(key)+1;
2313 type = *((*data)++);
2321 b = (
bool *)(*data);
2322 *data +=
sizeof(bool);
2336 D = (
double *)(*data);
2337 *data +=
sizeof(double);
2342 i = (int64_t *)(*data);
2343 *data +=
sizeof(int64_t);
2348 s = (
char *)(*data);
2349 *data += strlen(s)+1;
2362 count = (uint32_t *)(*data);
2363 *data +=
sizeof(uint32_t);
2398 uint32_t *count = NULL;
2399 uint32_t arrayCount;
2401 arrayCount = *((uint32_t *)(*data));
2402 *data +=
sizeof(uint32_t);
2409 for (uint32_t counter = 0 ; counter < arrayCount ; counter++) {
2411 type = *((*data)++);
2419 b = (
bool *)(*data);
2420 *data +=
sizeof(bool);
2434 D = (
double *)(*data);
2435 *data +=
sizeof(double);
2440 i = (int64_t *)(*data);
2441 *data +=
sizeof(int64_t);
2446 s = (
char *)(*data);
2447 *data += strlen(s)+1;
2460 count = (uint32_t *)(*data);
2461 *data +=
sizeof(uint32_t);
char * sEscapeTiny(smallt *obj)
stringify a small object
void sStringSetTiny(sStringt **string, const char *news)
set string in small string
sArrayt * sArrayDuplicateTiny(sArrayt *array)
duplicate array
const char ** sDictTypeStrings(sDictt *obj)
list first level of dictionary types in a list of strings
int sArrayReverseTiny(sArrayt *array)
reverse element order
char * escapeS(const char *s, char delim)
escape string according the json specification (RFC 8259) if there is in the string, the backslash is escaped and it will be parsed as the string '' be the json parsers the unicode characters should be converted to UTF8 codepoints instead of using the result can be included in a json string and the parsing will be correct
dictionary element: key, value
void sDictSetP(sDictt **dict, const char *key, smallt *data)
dictionary set pointer
bool eqS(const char *string1, const char *string2)
string Equal compare string1 to string2
smallt * sDictGet(sDictt *dict, const char *key)
get object stored at key
char * toHexSepS(const void *buf, size_t len, const char *separator)
create a string with bytes in buf converted to hex strings separated by separator ...
char * sToString(smallt *obj)
stringify object
void sDictFreeElements(sDictt *dict)
free dictionary elements
char * sDoubleToStringTiny(sDoublet *obj)
stringify double
sStringt * allocSStringTiny(const char *data)
allocate a small string
void sArraySetP(sArrayt *array, uint32_t index, smallt *value)
set value at index
smallt * sDeserialTiny(sBytest *obj)
deserialize small bytes object
char * sStringEscapeTiny(sStringt *obj)
stringify string
sIntt * allocSInt(int64_t value)
allocate a small int
smallt * sArrayDequeueTiny(sArrayt *array)
dequeue object from array
void sArraySetShortTiny(sArrayt *array, uint32_t index, smallt *value)
set value at index
char * iAppendNFreeS(char **string1, char *string2)
append and free strings
void sArrayDeserialElementsTiny(sArrayt **array, char **data)
deserialize array from data
void sBytesPush(sBytest **bytes, char data)
push char to bytes
sBytest * sDictTypes(sDictt *obj)
list first level of object types in dictionary
void sArrayDelRangeTiny(sArrayt *array, uint32_t start, uint32_t end)
delete range and shift elements
void sArrayDelTiny(sArrayt *array, uint32_t index)
delete element at index
smallt ** sArrayGetP(sArrayt *array, uint32_t index)
get pointer to object at index
void sDictSerialElementsTiny(sBytest **r, sDictt *dict)
serialize dictionary
char * sArrayEscapeTiny(sArrayt *obj)
stringify array
char * sDictToStringTiny(sDictt *obj)
stringify dictionary
sBytest * sSerial(smallt *obj)
serialize object to small bytes
base class for the small objects all small objects have a type
#define forEachSArray(array, element)
sBytest * allocSBytes(void)
allocate a small bytes object
#define libsheepyErrorMask
char * sDictEscapeTiny(sDictt *obj)
stringify dictionary
#define isError(assigned, left)
is Assigment Error catch error when assigned is false, 0 or NULL after being assigned with left ...
char * sStringGetTiny(sStringt *string)
get string in a small string object
const char ** sArrayTypeStrings(sArrayt *obj)
list first level of array types in a list of strings
char * sBytesToStringTiny(sBytest *obj)
stringify small bytes
size_t sSizeTiny(smallt *obj)
unused function and wrong result TODO update or remove
void sArrayPushTiny(sArrayt **array, smallt *data)
push data to array
smallt * sDuplicateTiny(smallt *obj)
duplicate small object
void sDictFreeTiny(sDictt *dict)
free dictionary elements and dictionary object
char * sUndefinedToStringTiny(sUndefinedt *obj UNUSED)
stringify undefined
#define SARRAY_MIN_ELEMENTS
pErrorNULL(iPrependS(&ks, "[1]"))
sContainert * allocSContainer(void *data)
allocate a small container The container holds a pointer to a user buffer
sUndefinedt * allocSUndefined(void)
allocate a small undefined object
void sArraySerialElementsTiny(sBytest **r, sArrayt *array)
serialize array
sBytest * sSerialTiny(smallt *obj)
serialize object to small bytes
char * sBoolToStringTiny(sBoolt *obj)
stringify bool
char * iPrependS(char **string1, const char *string2)
prepend strings
char * setS(char *string, int64_t index, char c)
set string
char * sTypesTiny(smallt *obj)
get list of object types string
#define SDICT_MIN_ELEMENTS
void sDictDeserialElementsTiny(sDictt **dict, char **data)
deserialize dictionary from data
char * sContainerToStringTiny(sContainert *obj UNUSED)
stringify container
#define SDICT_REALLOC_STEPS
const char ** sTypesToStrings(sBytest *types)
convert a list of object types to a list of strings
sBytest * sDictTypesTiny(sDictt *obj)
list first level of object types in dictionary
void sBytesPushBuffer(sBytest **bytes, void *data, uint32_t size)
push data buffer to bytes
sDictt * allocSDict(void)
allocate a small dict
smallt * sDictGetTiny(sDictt *dict, const char *key)
get object stored at key
void sArrayPrependTiny(sArrayt **array, smallt *data)
prepend data in array
void * sBytesGetTiny(sBytest *bytes)
get buffer in small bytes
sDictt * sDictDuplicateTiny(sDictt *dict)
duplicate dictionary
void sArraySetTiny(sArrayt *array, uint32_t index, smallt *value)
set value at index
void sDictPushTiny(sDictt **dict, const char *key, smallt *data)
push new key-value
void * sBytesGet(sBytest *bytes)
get buffer in small bytes
sBytest * sTypesToBytesTiny(smallt *obj)
collect the types in an array or dictionary
smallt * sDeserial(sBytest *obj)
deserialize small bytes object
sDoublet * allocSDouble(double value)
allocate a small double
smallt ** sDictGetP(sDictt *dict, const char *key)
get pointer to object at key
char * sArrayToStringTiny(sArrayt *obj)
stringify array
#define forEachSDict(dict, element)
char * iAppendS(char **string1, const char *string2)
append strings
sBytest * sArrayTypesTiny(sArrayt *obj)
list first level of object types in array
char * sEscape(smallt *obj)
stringify object
char * sToStringTiny(smallt *obj)
stringify a small object
#define isSType(obj, sType)
true when object is type sType
void sDictDelTiny(sDictt *dict, const char *key)
delete dictionary element
void sFreeTiny(smallt *obj)
free any type of small object
void sDictFreeElement(sDictElemt *e)
free a dictionary element
sBoolt * allocSBool(bool value)
allocate a small bool
void sArrayFreeTiny(sArrayt *array)
free array elements and array object
*Tiny functions dont check the parameter validity *ShortTiny do the shortest possible operations ...
void sDictSetTiny(sDictt **dict, const char *key, smallt *data)
dictionary set key, value
#define SARRAY_REALLOC_STEPS
void sBytesPushBufferTiny(sBytest **bytes, void *data, uint32_t size)
push data buffer to bytes
char * sStringToStringTiny(sStringt *obj)
stringify string
bool isSTypeF(smallt *obj, char sType)
is Small Type true if obj has type sType
smallt * sArrayGetTiny(sArrayt *array, uint32_t index)
get object at index
void sFree(smallt *obj)
free non null objects
sArrayt * allocSArray(void)
allocate a small array
sBytest * sArrayTypes(sArrayt *obj)
list first level of object types in array
smallt * sArrayPopTiny(sArrayt *array)
pop object from array
smallt * sDuplicate(smallt *o)
duplicate small object
char * sIntToStringTiny(sIntt *obj)
stringify int
void sArrayFreeElements(sArrayt *array)
free array elements