commit 4d1e459b77c9fd56384555d68c1c817b8ecd09a6
parent 832254f482339762aebcba278e34972cfb01933f
Author: Remy Noulin <loader2x@gmail.com>
Date: Sat, 4 Jan 2025 20:19:39 +0200
speed up splitSSmallString
release/libsheepy.h | 2 +-
src/json/libsheepyCSmallString.c | 13 ++++++++++---
src/libsheepy.h | 2 +-
3 files changed, 12 insertions(+), 5 deletions(-)
Diffstat:
3 files changed, 12 insertions(+), 5 deletions(-)
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 "2.2.16.1"
+#define LIBSHEEPY_VERSION "2.2.16.2"
#ifndef SH_PREFIX
#define SH_PREFIX(NAME) NAME
diff --git a/src/json/libsheepyCSmallString.c b/src/json/libsheepyCSmallString.c
@@ -4758,10 +4758,16 @@ internal char** splitSSmallString(smallStringt *self, const char *delim) {
// split using strtok_r
startSmallString = strdup(sStringGetTiny(self->data));
workingSmallString = startSmallString;
+
+ // preallocate list r
+ ssize_t rlen = countS(startSmallString, delim) + 2; /* extra empty line at the end + null*/
+ r = malloc(rlen * sizeof(char*));
+ u32 ridx = 0;
+
line = workingSmallString;
while (strlen(workingSmallString) != 0) {
- token = tokS(line, delim, &workingSmallString);
- pErrorNULL(listPushS(&r, token));
+ token = tokS(line, delim, &workingSmallString);
+ r[ridx++] = strdup(token);
// mac os sets workingSmallString to NULL at the end
if (!workingSmallString) {
break; //LCOV_EXCL_LINE
@@ -4777,9 +4783,10 @@ internal char** splitSSmallString(smallStringt *self, const char *delim) {
size_t lenD = strlen(delim);
// +1 for sType
if (strEq(sStringGetTiny(self->data)+(self->_len-lenD), delim)) {
- pErrorNULL(listPushS(&r, ""));
+ r[ridx++] = strdup("");;
}
+ r[ridx] = NULL;;
return(r);
}
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 "2.2.16.1"
+#define LIBSHEEPY_VERSION "2.2.16.2"
#ifndef SH_PREFIX
#define SH_PREFIX(NAME) NAME