commit 01669a08f2bd05b4459e1b36ff9c84b4561d3617
parent e72d85d9afaf2f22b4e9c52c87abacc87f176ff0
Author: Remy Noulin <loader2x@gmail.com>
Date: Tue, 1 Sep 2020 12:20:30 +0200
Accept signed index in smallBytes getAt function to allow negative indexes (like python)
completion.txt | 28 +++++++++++++------
documentation.md | 56 ++++++++++++++++++++++---------------
release/json/libsheepyCSmallBytes.h | 4 +--
release/libsheepy.h | 2 +-
src/json/libsheepyCSmallBytes.c | 14 +++++++---
src/json/libsheepyCSmallBytes.h | 4 +--
src/libsheepy.h | 2 +-
7 files changed, 69 insertions(+), 41 deletions(-)
Diffstat:
7 files changed, 69 insertions(+), 41 deletions(-)
diff --git a/completion.txt b/completion.txt
@@ -38,6 +38,7 @@ stringifyExpr(expr)
stringifyExpr1(expr)
libsheepyErrorMask
disableLibsheepyErrorLogs
+shperror(string)
pFuncError
pStrError(str)
shPrintError
@@ -3420,7 +3421,8 @@ createSmallDict(obj) ;smallDictt obj; initiateSmallDict(&obj)
createAllocateSmallDict(obj) ;smallDictt *obj; initiateAllocateSmallDict(&obj)
cleanSmallDictP(name) smallDictt *name CLEANUP(cleanUpSmallDictTerminateG)
cleanAllocateSmallDict(obj) ;cleanSmallDictP(obj); initiateAllocateSmallDict(&obj)
-cleanSmallDict(name) smallDictt name CLEANUP(cleanUpSmallDictFreeG); initiateSmallDict(&name)
+cleanSmallDict(name) smallDictt name CLEANUP(cleanUpSmallDictFreeLocalG); initiateSmallDict(&name)
+cleanFreeSmallDict(name) smallDictt *name CLEANUP(cleanUpSmallDictFreeG)
cleanFinishSmallDictP(name) smallDictt *name CLEANUP(cleanUpSmallDictFinishG)
cleanDisposeSmallDict(name) smallDictt name CLEANUP(cleanUpSmallDictDisposeG); initiateSmallDict(&name)
cleanSmashSmallDictP(name) smallDictt *name CLEANUP(cleanUpSmallDictSmashG)
@@ -3437,7 +3439,8 @@ createSmallArray(obj) ;smallArrayt obj; initiateSmallArray(&obj)
createAllocateSmallArray(obj) ;smallArrayt *obj; initiateAllocateSmallArray(&obj)
cleanSmallArrayP(name) smallArrayt *name CLEANUP(cleanUpSmallArrayTerminateG)
cleanAllocateSmallArray(obj) ;cleanSmallArrayP(obj); initiateAllocateSmallArray(&obj)
-cleanSmallArray(name) smallArrayt name CLEANUP(cleanUpSmallArrayFreeG); initiateSmallArray(&name)
+cleanSmallArray(name) smallArrayt name CLEANUP(cleanUpSmallArrayFreeLocalG); initiateSmallArray(&name)
+cleanFreeSmallArray(name) smallArrayt *name CLEANUP(cleanUpSmallArrayFreeG)
cleanFinishSmallArrayP(name) smallArrayt *name CLEANUP(cleanUpSmallArrayFinishG)
cleanDisposeSmallArray(name) smallArrayt name CLEANUP(cleanUpSmallArrayDisposeG); initiateSmallArray(&name)
cleanSmashSmallArrayP(name) smallArrayt *name CLEANUP(cleanUpSmallArraySmashG)
@@ -3464,7 +3467,8 @@ createAllocateSmallJson(obj) ;smallJsont *obj; initiateAllocateSmallJson(&obj)
createSJ(...) createSJF("", __VA_ARGS__, NULL)
cleanSmallJsonP(name) smallJsont *name CLEANUP(cleanUpSmallJsonTerminateG)
cleanAllocateSmallJson(obj) ;cleanSmallJsonP(obj); initiateAllocateSmallJson(&obj)
-cleanSmallJson(name) smallJsont name CLEANUP(cleanUpSmallJsonFreeG); initiateSmallJson(&name)
+cleanSmallJson(name) smallJsont name CLEANUP(cleanUpSmallJsonFreeLocalG); initiateSmallJson(&name)
+cleanFreeSmallJson(name) smallJsont *name CLEANUP(cleanUpSmallJsonFreeG)
cleanFinishSmallJsonP(name) smallJsont *name CLEANUP(cleanUpSmallJsonFinishG)
cleanDisposeSmallJson(name) smallJsont name CLEANUP(cleanUpSmallJsonDisposeG); initiateSmallJson(&name)
cleanSmashSmallJsonP(name) smallJsont *name CLEANUP(cleanUpSmallJsonSmashG)
@@ -3482,7 +3486,8 @@ createSmallBytes(obj) ;smallBytest obj; initiateSmallBytes(&obj)
createAllocateSmallBytes(obj) ;smallBytest *obj; initiateAllocateSmallBytes(&obj)
cleanSmallBytesP(name) smallBytest *name CLEANUP(cleanUpSmallBytesTerminateG)
cleanAllocateSmallBytes(obj) ;cleanSmallBytesP(obj); initiateAllocateSmallBytes(&obj)
-cleanSmallBytes(name) smallBytest name CLEANUP(cleanUpSmallBytesFreeG); initiateSmallBytes(&name)
+cleanSmallBytes(name) smallBytest name CLEANUP(cleanUpSmallBytesFreeLocalG); initiateSmallBytes(&name)
+cleanFreeSmallBytes(name) smallBytest *name CLEANUP(cleanUpSmallBytesFreeG)
cleanFinishSmallBytesP(name) smallBytest *name CLEANUP(cleanUpSmallBytesFinishG)
Class SmallBool
@@ -3495,7 +3500,8 @@ createSmallBool(obj) ;smallBoolt obj; initiateSmallBool(&obj)
createAllocateSmallBool(obj) ;smallBoolt *obj; initiateAllocateSmallBool(&obj)
cleanSmallBoolP(name) smallBoolt *name CLEANUP(cleanUpSmallBoolTerminateG)
cleanAllocateSmallBool(obj) ;cleanSmallBoolP(obj); initiateAllocateSmallBool(&obj)
-cleanSmallBool(name) smallBoolt name CLEANUP(cleanUpSmallBoolFreeG); initiateSmallBool(&name)
+cleanSmallBool(name) smallBoolt name CLEANUP(cleanUpSmallBoolFreeLocalG); initiateSmallBool(&name)
+cleanFreeSmallBool(name) smallBoolt *name CLEANUP(cleanUpSmallBoolFreeG)
cleanFinishSmallBoolP(name) smallBoolt *name CLEANUP(cleanUpSmallBoolFinishG)
Class SmallContainer
@@ -3508,7 +3514,8 @@ createSmallContainer(obj) ;smallContainert obj; initiateSmallContainer(&obj)
createAllocateSmallContainer(obj) ;smallContainert *obj; initiateAllocateSmallContainer(&obj)
cleanSmallContainerP(name) smallContainert *name CLEANUP(cleanUpSmallContainerTerminateG)
cleanAllocateSmallContainer(obj) ;cleanSmallContainerP(obj); initiateAllocateSmallContainer(&obj)
-cleanSmallContainer(name) smallContainert name CLEANUP(cleanUpSmallContainerFreeG); initiateSmallContainer(&name)
+cleanSmallContainer(name) smallContainert name CLEANUP(cleanUpSmallContainerFreeLocalG); initiateSmallContainer(&name)
+cleanFreeSmallContainer(name) smallContainert *name CLEANUP(cleanUpSmallContainerFreeG)
cleanFinishSmallContainerP(name) smallContainert *name CLEANUP(cleanUpSmallContainerFinishG)
Class SmallDouble
@@ -3521,7 +3528,8 @@ createSmallDouble(obj) ;smallDoublet obj; initiateSmallDouble(&obj)
createAllocateSmallDouble(obj) ;smallDoublet *obj; initiateAllocateSmallDouble(&obj)
cleanSmallDoubleP(name) smallDoublet *name CLEANUP(cleanUpSmallDoubleTerminateG)
cleanAllocateSmallDouble(obj) ;cleanSmallDoubleP(obj); initiateAllocateSmallDouble(&obj)
-cleanSmallDouble(name) smallDoublet name CLEANUP(cleanUpSmallDoubleFreeG); initiateSmallDouble(&name)
+cleanSmallDouble(name) smallDoublet name CLEANUP(cleanUpSmallDoubleFreeLocalG); initiateSmallDouble(&name)
+cleanFreeSmallDouble(name) smallDoublet *name CLEANUP(cleanUpSmallDoubleFreeG)
cleanFinishSmallDoubleP(name) smallDoublet *name CLEANUP(cleanUpSmallDoubleFinishG)
Class SmallInt
@@ -3534,7 +3542,8 @@ createSmallInt(obj) ;smallIntt obj; initiateSmallInt(&obj)
createAllocateSmallInt(obj) ;smallIntt *obj; initiateAllocateSmallInt(&obj)
cleanSmallIntP(name) smallIntt *name CLEANUP(cleanUpSmallIntTerminateG)
cleanAllocateSmallInt(obj) ;cleanSmallIntP(obj); initiateAllocateSmallInt(&obj)
-cleanSmallInt(name) smallIntt name CLEANUP(cleanUpSmallIntFreeG); initiateSmallInt(&name)
+cleanSmallInt(name) smallIntt name CLEANUP(cleanUpSmallIntFreeLocalG); initiateSmallInt(&name)
+cleanFreeSmallInt(name) smallIntt *name CLEANUP(cleanUpSmallIntFreeG)
cleanFinishSmallIntP(name) smallIntt *name CLEANUP(cleanUpSmallIntFinishG)
Class SmallString
@@ -3547,7 +3556,8 @@ createSmallString(obj) ;smallStringt obj; initiateSmallString(&obj)
createAllocateSmallString(obj) ;smallStringt *obj; initiateAllocateSmallString(&obj)
cleanSmallStringP(name) smallStringt *name CLEANUP(cleanUpSmallStringTerminateG)
cleanAllocateSmallString(obj) ;cleanSmallStringP(obj); initiateAllocateSmallString(&obj)
-cleanSmallString(name) smallStringt name CLEANUP(cleanUpSmallStringFreeG); initiateSmallString(&name)
+cleanSmallString(name) smallStringt name CLEANUP(cleanUpSmallStringFreeLocalG); initiateSmallString(&name)
+cleanFreeSmallString(name) smallStringt *name CLEANUP(cleanUpSmallStringFreeG)
cleanFinishSmallStringP(name) smallStringt *name CLEANUP(cleanUpSmallStringFinishG)
createS(...) createSF("", __VA_ARGS__, NULL)
diff --git a/documentation.md b/documentation.md
@@ -69,6 +69,7 @@ stringifyExpr(expr)
stringifyExpr1(expr)
libsheepyErrorMask
disableLibsheepyErrorLogs
+shperror(string)
pFuncError
pStrError(str)
shPrintError
@@ -1576,24 +1577,25 @@ extern const bool FALSE;
// disableLibsheepyErrorLogs;
#define libsheepyErrorMask 0x8000000000000000UL
#define disableLibsheepyErrorLogs do{logMask &= (~libsheepyErrorMask);}while(0)
+#define shperror(string) procbegin\
/*
* print function name and system error
*
* to print error, use either pFuncError and shEPrintfS
* or shPrintError and shEPrintfS
*/
-#define pFuncError do{ if ((libsheepyErrorMask) & logMask) { perror(__func__);logEBtrace;} }while(0);
+#define pFuncError do{ if ((libsheepyErrorMask) & logMask) { shperror(__func__);logEBtrace;} }while(0);
/*
* print string and system error
*/
-#define pStrError(str) do{ if ((libsheepyErrorMask) & logMask) { perror(str);logEBtrace;} }while(0);
+#define pStrError(str) do{ if ((libsheepyErrorMask) & logMask) { shperror(str);logEBtrace;} }while(0);
/*
* print error with line number, function name and file name to stderr
*
* to print error, use either pFuncError and shEPrintfS
* or shPrintError and shEPrintfS
*/
-#define shPrintError do{ if ((libsheepyErrorMask) & logMask) { fprintf(stderr, "Error line "stringifyExpr(__LINE__)", function %s, file "__FILE__"\n", __func__); logEBtrace;} }while(0);
+#define shPrintError do{ if ((libsheepyErrorMask) & logMask) { logE("Error line "stringifyExpr(__LINE__)", function %s, file "__FILE__"\n", __func__); logEBtrace;} }while(0);
/*
* print error when function failed. The error code must be -1
*/
@@ -3549,10 +3551,10 @@ char **btrace(void);
#if __APPLE__
// TODO readelf missing in macOS
#define logBtrace
-#define logBtrace char **UNIQVAR(r)=btrace();if(UNIQVAR(r)){puts("\n"BLD WHT"Backtrace:"RST);listPrintS(UNIQVAR(r));listFreeS(UNIQVAR(r));puts("---");}
+#define logBtrace char **UNIQVAR(r)=btrace();if(UNIQVAR(r)){logN("\n"BLD WHT"Backtrace:"RST);forEachS(UNIQVAR(r), element){logN(element);}listFreeS(UNIQVAR(r));logN("---");}
extern bool btraceCfg;
/** print backtrace in error messages, default is on, use btraceEnable and btraceDisable to configure */
-#define logEBtrace if (btraceCfg) { logBtrace; }
+#define logEBtrace if (btraceCfg) { char **UNIQVAR(r)=btrace();if(UNIQVAR(r)){logE("\n"BLD WHT"Backtrace:"RST);forEachS(UNIQVAR(r), element){logE(element);}listFreeS(UNIQVAR(r));logE("---");} }
// **************************
// void ** lists
// **************************
@@ -8236,14 +8238,14 @@ void shPrintfS(const char *fmt, ...)
/*
* sheepy Error printf String
- * print to stderr
+ * print with logE
*
* when the formating string is NULL, "(null)" is printed
*
* \param
* format string like printf
* \return
- * print to stderr
+ * print with logE
*/
void shEPrintfS(const char *fmt, ...)
@@ -17492,7 +17494,8 @@ createSmallDict(obj) ;smallDictt obj; initiateSmallDict(&obj)
createAllocateSmallDict(obj) ;smallDictt *obj; initiateAllocateSmallDict(&obj)
cleanSmallDictP(name) smallDictt *name CLEANUP(cleanUpSmallDictTerminateG)
cleanAllocateSmallDict(obj) ;cleanSmallDictP(obj); initiateAllocateSmallDict(&obj)
-cleanSmallDict(name) smallDictt name CLEANUP(cleanUpSmallDictFreeG); initiateSmallDict(&name)
+cleanSmallDict(name) smallDictt name CLEANUP(cleanUpSmallDictFreeLocalG); initiateSmallDict(&name)
+cleanFreeSmallDict(name) smallDictt *name CLEANUP(cleanUpSmallDictFreeG)
cleanFinishSmallDictP(name) smallDictt *name CLEANUP(cleanUpSmallDictFinishG)
cleanDisposeSmallDict(name) smallDictt name CLEANUP(cleanUpSmallDictDisposeG); initiateSmallDict(&name)
cleanSmashSmallDictP(name) smallDictt *name CLEANUP(cleanUpSmallDictSmashG)
@@ -17509,7 +17512,8 @@ createSmallArray(obj) ;smallArrayt obj; initiateSmallArray(&obj)
createAllocateSmallArray(obj) ;smallArrayt *obj; initiateAllocateSmallArray(&obj)
cleanSmallArrayP(name) smallArrayt *name CLEANUP(cleanUpSmallArrayTerminateG)
cleanAllocateSmallArray(obj) ;cleanSmallArrayP(obj); initiateAllocateSmallArray(&obj)
-cleanSmallArray(name) smallArrayt name CLEANUP(cleanUpSmallArrayFreeG); initiateSmallArray(&name)
+cleanSmallArray(name) smallArrayt name CLEANUP(cleanUpSmallArrayFreeLocalG); initiateSmallArray(&name)
+cleanFreeSmallArray(name) smallArrayt *name CLEANUP(cleanUpSmallArrayFreeG)
cleanFinishSmallArrayP(name) smallArrayt *name CLEANUP(cleanUpSmallArrayFinishG)
cleanDisposeSmallArray(name) smallArrayt name CLEANUP(cleanUpSmallArrayDisposeG); initiateSmallArray(&name)
cleanSmashSmallArrayP(name) smallArrayt *name CLEANUP(cleanUpSmallArraySmashG)
@@ -17536,7 +17540,8 @@ createAllocateSmallJson(obj) ;smallJsont *obj; initiateAllocateSmallJson(&obj)
createSJ(...) createSJF("", __VA_ARGS__, NULL)
cleanSmallJsonP(name) smallJsont *name CLEANUP(cleanUpSmallJsonTerminateG)
cleanAllocateSmallJson(obj) ;cleanSmallJsonP(obj); initiateAllocateSmallJson(&obj)
-cleanSmallJson(name) smallJsont name CLEANUP(cleanUpSmallJsonFreeG); initiateSmallJson(&name)
+cleanSmallJson(name) smallJsont name CLEANUP(cleanUpSmallJsonFreeLocalG); initiateSmallJson(&name)
+cleanFreeSmallJson(name) smallJsont *name CLEANUP(cleanUpSmallJsonFreeG)
cleanFinishSmallJsonP(name) smallJsont *name CLEANUP(cleanUpSmallJsonFinishG)
cleanDisposeSmallJson(name) smallJsont name CLEANUP(cleanUpSmallJsonDisposeG); initiateSmallJson(&name)
cleanSmashSmallJsonP(name) smallJsont *name CLEANUP(cleanUpSmallJsonSmashG)
@@ -17554,7 +17559,8 @@ createSmallBytes(obj) ;smallBytest obj; initiateSmallBytes(&obj)
createAllocateSmallBytes(obj) ;smallBytest *obj; initiateAllocateSmallBytes(&obj)
cleanSmallBytesP(name) smallBytest *name CLEANUP(cleanUpSmallBytesTerminateG)
cleanAllocateSmallBytes(obj) ;cleanSmallBytesP(obj); initiateAllocateSmallBytes(&obj)
-cleanSmallBytes(name) smallBytest name CLEANUP(cleanUpSmallBytesFreeG); initiateSmallBytes(&name)
+cleanSmallBytes(name) smallBytest name CLEANUP(cleanUpSmallBytesFreeLocalG); initiateSmallBytes(&name)
+cleanFreeSmallBytes(name) smallBytest *name CLEANUP(cleanUpSmallBytesFreeG)
cleanFinishSmallBytesP(name) smallBytest *name CLEANUP(cleanUpSmallBytesFinishG)
Class SmallBool
@@ -17567,7 +17573,8 @@ createSmallBool(obj) ;smallBoolt obj; initiateSmallBool(&obj)
createAllocateSmallBool(obj) ;smallBoolt *obj; initiateAllocateSmallBool(&obj)
cleanSmallBoolP(name) smallBoolt *name CLEANUP(cleanUpSmallBoolTerminateG)
cleanAllocateSmallBool(obj) ;cleanSmallBoolP(obj); initiateAllocateSmallBool(&obj)
-cleanSmallBool(name) smallBoolt name CLEANUP(cleanUpSmallBoolFreeG); initiateSmallBool(&name)
+cleanSmallBool(name) smallBoolt name CLEANUP(cleanUpSmallBoolFreeLocalG); initiateSmallBool(&name)
+cleanFreeSmallBool(name) smallBoolt *name CLEANUP(cleanUpSmallBoolFreeG)
cleanFinishSmallBoolP(name) smallBoolt *name CLEANUP(cleanUpSmallBoolFinishG)
Class SmallContainer
@@ -17580,7 +17587,8 @@ createSmallContainer(obj) ;smallContainert obj; initiateSmallContainer(&obj)
createAllocateSmallContainer(obj) ;smallContainert *obj; initiateAllocateSmallContainer(&obj)
cleanSmallContainerP(name) smallContainert *name CLEANUP(cleanUpSmallContainerTerminateG)
cleanAllocateSmallContainer(obj) ;cleanSmallContainerP(obj); initiateAllocateSmallContainer(&obj)
-cleanSmallContainer(name) smallContainert name CLEANUP(cleanUpSmallContainerFreeG); initiateSmallContainer(&name)
+cleanSmallContainer(name) smallContainert name CLEANUP(cleanUpSmallContainerFreeLocalG); initiateSmallContainer(&name)
+cleanFreeSmallContainer(name) smallContainert *name CLEANUP(cleanUpSmallContainerFreeG)
cleanFinishSmallContainerP(name) smallContainert *name CLEANUP(cleanUpSmallContainerFinishG)
Class SmallDouble
@@ -17593,7 +17601,8 @@ createSmallDouble(obj) ;smallDoublet obj; initiateSmallDouble(&obj)
createAllocateSmallDouble(obj) ;smallDoublet *obj; initiateAllocateSmallDouble(&obj)
cleanSmallDoubleP(name) smallDoublet *name CLEANUP(cleanUpSmallDoubleTerminateG)
cleanAllocateSmallDouble(obj) ;cleanSmallDoubleP(obj); initiateAllocateSmallDouble(&obj)
-cleanSmallDouble(name) smallDoublet name CLEANUP(cleanUpSmallDoubleFreeG); initiateSmallDouble(&name)
+cleanSmallDouble(name) smallDoublet name CLEANUP(cleanUpSmallDoubleFreeLocalG); initiateSmallDouble(&name)
+cleanFreeSmallDouble(name) smallDoublet *name CLEANUP(cleanUpSmallDoubleFreeG)
cleanFinishSmallDoubleP(name) smallDoublet *name CLEANUP(cleanUpSmallDoubleFinishG)
Class SmallInt
@@ -17606,7 +17615,8 @@ createSmallInt(obj) ;smallIntt obj; initiateSmallInt(&obj)
createAllocateSmallInt(obj) ;smallIntt *obj; initiateAllocateSmallInt(&obj)
cleanSmallIntP(name) smallIntt *name CLEANUP(cleanUpSmallIntTerminateG)
cleanAllocateSmallInt(obj) ;cleanSmallIntP(obj); initiateAllocateSmallInt(&obj)
-cleanSmallInt(name) smallIntt name CLEANUP(cleanUpSmallIntFreeG); initiateSmallInt(&name)
+cleanSmallInt(name) smallIntt name CLEANUP(cleanUpSmallIntFreeLocalG); initiateSmallInt(&name)
+cleanFreeSmallInt(name) smallIntt *name CLEANUP(cleanUpSmallIntFreeG)
cleanFinishSmallIntP(name) smallIntt *name CLEANUP(cleanUpSmallIntFinishG)
Class SmallString
@@ -17619,7 +17629,8 @@ createSmallString(obj) ;smallStringt obj; initiateSmallString(&obj)
createAllocateSmallString(obj) ;smallStringt *obj; initiateAllocateSmallString(&obj)
cleanSmallStringP(name) smallStringt *name CLEANUP(cleanUpSmallStringTerminateG)
cleanAllocateSmallString(obj) ;cleanSmallStringP(obj); initiateAllocateSmallString(&obj)
-cleanSmallString(name) smallStringt name CLEANUP(cleanUpSmallStringFreeG); initiateSmallString(&name)
+cleanSmallString(name) smallStringt name CLEANUP(cleanUpSmallStringFreeLocalG); initiateSmallString(&name)
+cleanFreeSmallString(name) smallStringt *name CLEANUP(cleanUpSmallStringFreeG)
cleanFinishSmallStringP(name) smallStringt *name CLEANUP(cleanUpSmallStringFinishG)
createS(...) createSF("", __VA_ARGS__, NULL)
@@ -19217,9 +19228,10 @@ smallBytest* duplicate (smallBytest *self);
void finish(smallBytest **self);
const char* help (smallBytest *self);
void* get (smallBytest *self);
+smallBytest* set (smallBytest *self, void *data, uint32_t size);
smallBytest* push (smallBytest *self, char data);
smallBytest* pushBuffer (smallBytest *self, void *data, uint32_t size);
-char getAt (smallBytest *self, uint32_t index);
+char getAt (smallBytest *self, intmax_t index);
size_t len (smallBytest *self);
bool isEmpty(smallBytest *self);
smallBytest* readFile(smallBytest *self, const char *filePath);
@@ -44567,8 +44579,8 @@ baset* getSmallJsonG (smallJsont *self, baset* retType UNUSED, const char *key);
* \return
* char at index
*/
-char getAtSmallBytes (smallBytest *self, uint32_t index);
-char getAtSmallBytesG(smallBytest *self, char retType UNUSED, uint32_t index);
+char getAtSmallBytes (smallBytest *self, intmax_t index);
+char getAtSmallBytesG(smallBytest *self, char retType UNUSED, intmax_t index);
/*
* get char at python index
*/
@@ -48211,8 +48223,8 @@ baset* getNDupSmallJsonG (smallJsont *self, baset* retType UNUSED, const char *k
* \return
* char at index
*/
-char getAtSmallBytes (smallBytest *self, uint32_t index);
-char getAtSmallBytesG(smallBytest *self, char retType UNUSED, uint32_t index);
+char getAtSmallBytes (smallBytest *self, intmax_t index);
+char getAtSmallBytesG(smallBytest *self, char retType UNUSED, intmax_t index);
/*
* get char at python index
*/
@@ -59845,7 +59857,7 @@ smallStringt* pushNFreeManySSmallString(smallStringt *self, ...);
* push data buffer to object
*
* \param
- * bytes small bytes
+ * self small bytes
* data buffer to push
* size size of buffer
*/
diff --git a/release/json/libsheepyCSmallBytes.h b/release/json/libsheepyCSmallBytes.h
@@ -89,7 +89,7 @@ typedef smallBytest* (*pushBufferSmallBytesFt) (smallBytest *self, void *data
* \return
* char at index
*/
-typedef char (*getAtSmallBytesFt) (smallBytest *self, uint32_t index);
+typedef char (*getAtSmallBytesFt) (smallBytest *self, intmax_t index);
/**
* return buffer size in bytes
@@ -300,7 +300,7 @@ smallBytest* duplicateSmallBytesG (smallBytest *self);
void freeSmallBytesG (smallBytest *self);
-char getAtSmallBytesG(smallBytest *self, char retType UNUSED, uint32_t index);
+char getAtSmallBytesG(smallBytest *self, char retType UNUSED, intmax_t index);
smallBytest* pushSmallBytesG (smallBytest *self, char data);
size_t lenSmallBytesG(smallBytest *self);
bool isEmptySmallBytesG(smallBytest *self);
diff --git a/release/libsheepy.h b/release/libsheepy.h
@@ -98,7 +98,7 @@
// version accoring to the version package: Release.Major.minor.patch
// https://noulin.net/version/file/README.md.html
-#define LIBSHEEPY_VERSION "1.2.3.1"
+#define LIBSHEEPY_VERSION "1.2.3.3"
#ifndef SH_PREFIX
#define SH_PREFIX(NAME) NAME
diff --git a/src/json/libsheepyCSmallBytes.c b/src/json/libsheepyCSmallBytes.c
@@ -56,7 +56,7 @@ internal void* getSmallBytes(smallBytest *self);
internal smallBytest* setSmallBytes(smallBytest *self, void *data, uint32_t size);
internal smallBytest* pushSmallBytes(smallBytest *self, char data);
internal smallBytest* pushBufferSmallBytes(smallBytest *self, void *data, uint32_t size);
-internal char getAtSmallBytes(smallBytest *self, uint32_t index);
+internal char getAtSmallBytes(smallBytest *self, intmax_t index);
internal size_t lenSmallBytes(smallBytest *self);
internal bool isEmptySmallBytes(smallBytest *self);
internal smallBytest* readFileSmallBytes(smallBytest *self, const char *filePath);
@@ -83,7 +83,7 @@ internal bool equalSmallBytesChar(smallBytest *self, const char *value);
internal bool equalSmallBytesSmallString(smallBytest *self, smallStringt *value);
internal bool equalSmallBytesBase(smallBytest *self, baset *value);
smallBytest* duplicateSmallBytesG (smallBytest *self);
-char getAtSmallBytesG(smallBytest *self, char retType UNUSED, uint32_t index);
+char getAtSmallBytesG(smallBytest *self, char retType UNUSED, intmax_t index);
smallBytest* pushSmallBytesG (smallBytest *self, char data);
size_t lenSmallBytesG(smallBytest *self);
bool isEmptySmallBytesG(smallBytest *self);
@@ -318,7 +318,7 @@ internal smallBytest* pushBufferSmallBytes(smallBytest *self, void *data, uint32
return(self);
}
-internal char getAtSmallBytes(smallBytest *self, uint32_t index) {
+internal char getAtSmallBytes(smallBytest *self, intmax_t index) {
if (!self->B) {
return(0);
@@ -327,6 +327,12 @@ internal char getAtSmallBytes(smallBytest *self, uint32_t index) {
if (index >= self->B->count) {
return(0);
}
+ if (index < -(intmax_t)self->B->count) {
+ return(0);
+ }
+ if (index < 0) {
+ index = (intmax_t)self->B->count + index;
+ }
return((&(self->B->data))[index]);
}
@@ -815,7 +821,7 @@ smallBytest* duplicateSmallBytesG (smallBytest *self) {
void freeSmallBytesG (smallBytest *self) {self->f->free(self);}
-char getAtSmallBytesG(smallBytest *self, char retType UNUSED, uint32_t index) {
+char getAtSmallBytesG(smallBytest *self, char retType UNUSED, intmax_t index) {
return(self->f->getAt(self,index));
}
diff --git a/src/json/libsheepyCSmallBytes.h b/src/json/libsheepyCSmallBytes.h
@@ -89,7 +89,7 @@ typedef smallBytest* (*pushBufferSmallBytesFt) (smallBytest *self, void *data
* \return
* char at index
*/
-typedef char (*getAtSmallBytesFt) (smallBytest *self, uint32_t index);
+typedef char (*getAtSmallBytesFt) (smallBytest *self, intmax_t index);
/**
* return buffer size in bytes
@@ -300,7 +300,7 @@ smallBytest* duplicateSmallBytesG (smallBytest *self);
void freeSmallBytesG (smallBytest *self);
-char getAtSmallBytesG(smallBytest *self, char retType UNUSED, uint32_t index);
+char getAtSmallBytesG(smallBytest *self, char retType UNUSED, intmax_t index);
smallBytest* pushSmallBytesG (smallBytest *self, char data);
size_t lenSmallBytesG(smallBytest *self);
bool isEmptySmallBytesG(smallBytest *self);
diff --git a/src/libsheepy.h b/src/libsheepy.h
@@ -98,7 +98,7 @@
// version accoring to the version package: Release.Major.minor.patch
// https://noulin.net/version/file/README.md.html
-#define LIBSHEEPY_VERSION "1.2.3.2"
+#define LIBSHEEPY_VERSION "1.2.3.3"
#ifndef SH_PREFIX
#define SH_PREFIX(NAME) NAME