summaryrefslogtreecommitdiff
path: root/src/strops.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-10-04 16:53:57 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-10-04 16:53:57 +0200
commitf9f1955748a3b369f0a015405af131c9b6e3285c (patch)
treec74cec6b30daccee2d1841627b3913c51fd549e3 /src/strops.cpp
parent2855642dd16cea260f3b32351f0529328a0bcb15 (diff)
namespace for logger, strops, locales
Diffstat (limited to 'src/strops.cpp')
-rw-r--r--src/strops.cpp302
1 files changed, 153 insertions, 149 deletions
diff --git a/src/strops.cpp b/src/strops.cpp
index 28f9bcc..303b64c 100644
--- a/src/strops.cpp
+++ b/src/strops.cpp
@@ -21,174 +21,178 @@
#include "strops.hpp"
-bool strops_prefix(const char *pre, const char *str)
-{
- return strncmp(pre, str, strlen(pre)) == 0;
-}
-
-size_t strops_copy(char *dst, const char *src, size_t size)
-{
- size_t srclen;
- size --;
- srclen = strlen(src);
-
- if (srclen > size)
- srclen = size;
-
- memcpy(dst, src, srclen);
- dst[srclen] = '\0';
-
- return (srclen);
-}
-
-char* strops_stristr(char* haystack, char* needle)
-{
- do {
- const char* h = haystack;
- const char* n = needle;
- while (tolower((unsigned char) *h) == tolower((unsigned char ) *n) && *n) {
- h++;
- n++;
+namespace strops {
+
+ bool prefix(const char *pre, const char *str)
+ {
+ return strncmp(pre, str, strlen(pre)) == 0;
}
- if (*n == 0) {
- return (char *) haystack;
+
+ size_t copy(char *dst, const char *src, size_t size)
+ {
+ size_t srclen;
+ size --;
+ srclen = strlen(src);
+
+ if (srclen > size)
+ srclen = size;
+
+ memcpy(dst, src, srclen);
+ dst[srclen] = '\0';
+
+ return (srclen);
+ }
+
+ char* contains(char* haystack, char* needle)
+ {
+ do {
+ const char* h = haystack;
+ const char* n = needle;
+ while (tolower((unsigned char) *h) == tolower((unsigned char ) *n) && *n) {
+ h++;
+ n++;
+ }
+ if (*n == 0) {
+ return (char *) haystack;
+ }
+ } while (*haystack++);
+ return 0;
}
- } while (*haystack++);
- return 0;
-}
-
-void strops_replace(char *buf, size_t buf_size, const char *search, const char *replace)
-{
- size_t search_len = strlen(search);
- size_t replace_len = strlen(replace);
-
- char *r = buf; // read pointer
- char *w = buf; // write pointer
-
- while (*r && (w - buf) < (signed int)(buf_size - 1)) {
- if (strncmp(r, search, search_len) == 0) {
- // Ensure space
- size_t remaining = buf_size - (w - buf) - 1;
- size_t copy_len = (replace_len < remaining) ? replace_len : remaining;
- size_t skip_size = search_len;
-
- if (replace_len > search_len)
- {
- memmove(w+replace_len, w+search_len, remaining - replace_len);
- skip_size = replace_len;
- }
- memcpy(w, replace, copy_len);
- w += copy_len;
- r += skip_size;
- } else {
- *w++ = *r++;
+ void replace(char *buf, size_t buf_size, const char *search, const char *replace)
+ {
+ size_t search_len = strlen(search);
+ size_t replace_len = strlen(replace);
+
+ char *r = buf; // read pointer
+ char *w = buf; // write pointer
+
+ while (*r && (w - buf) < (signed int)(buf_size - 1)) {
+ if (strncmp(r, search, search_len) == 0) {
+ // Ensure space
+ size_t remaining = buf_size - (w - buf) - 1;
+ size_t copy_len = (replace_len < remaining) ? replace_len : remaining;
+ size_t skip_size = search_len;
+
+ if (replace_len > search_len)
+ {
+ memmove(w+replace_len, w+search_len, remaining - replace_len);
+ skip_size = replace_len;
+ }
+
+ memcpy(w, replace, copy_len);
+ w += copy_len;
+ r += skip_size;
+ } else {
+ *w++ = *r++;
+ }
}
+
+ *w = '\0'; // terminate
}
- *w = '\0'; // terminate
-}
-
-void strops_replace_int32(char *buf, size_t buf_size, const char *search, int32_t number)
-{
- char num_buf[200];
- snprintf(num_buf, 200, "%d", number);
- strops_replace(buf, buf_size, search, num_buf);
-}
-
-void strops_replace_int64(char *buf, size_t buf_size, const char *search, int64_t number)
-{
- char num_buf[200];
- snprintf(num_buf, 200, "%lld", number);
- strops_replace(buf, buf_size, search, num_buf);
-}
-
-void strops_replace_float(char *buf, size_t buf_size, const char *search, float number, int decimals)
-{
- char num_buf[200];
- snprintf(num_buf, 200, "%.*f", decimals, number);
- strops_replace(buf, buf_size, search, num_buf);
-}
-
-char* strops_get_json_value(const char *json, const char *key, char *out, size_t out_size, int skip)
-{
- char pattern[128];
- snprintf(pattern, sizeof(pattern), "\"%s\"", key);
- const char *pos = strstr(json, pattern);
- while(skip > 0) {
- pos = strstr(pos+1, pattern);
- skip--;
+ void replace_int32(char *buf, size_t buf_size, const char *search, int32_t number)
+ {
+ char num_buf[200];
+ snprintf(num_buf, 200, "%d", number);
+ strops::replace(buf, buf_size, search, num_buf);
}
- if (!pos) return NULL;
- pos = strchr(pos, ':');
- if (!pos) return NULL;
- pos++;
- // Skip whitespace and quotes
- while (*pos == ' ' || *pos == '\"') pos++;
+ void replace_int64(char *buf, size_t buf_size, const char *search, int64_t number)
+ {
+ char num_buf[200];
+ snprintf(num_buf, 200, "%lld", number);
+ strops::replace(buf, buf_size, search, num_buf);
+ }
- size_t i = 0;
- while (*pos && !(*pos == '\"' && *(pos-1) != '\\') && i < out_size - 1) {
- out[i++] = *pos++;
+ void replace_float(char *buf, size_t buf_size, const char *search, float number, int decimals)
+ {
+ char num_buf[200];
+ snprintf(num_buf, 200, "%.*f", decimals, number);
+ strops::replace(buf, buf_size, search, num_buf);
}
- out[i] = '\0';
- return out;
-}
-
-char* strops_get_filename(const char* path)
-{
- char* filename = (char*)strrchr(path, '/'); // for Unix-style paths
- if (filename) return filename + 1; // skip the '/'
- filename = (char*)strrchr(path, '\\'); // for Windows-style paths
- if (filename) return filename + 1;
- return (char*)path; // no slashes found, path itself is filename
-}
-
-char* strops_prep_str_for_json(const char *input, size_t buffer_size)
-{
- if (!input) return NULL;
-
- char *result = (char*)malloc(buffer_size * 2 + 1);
- if (!result) return NULL;
-
- const char *src = input;
- char *dst = result;
-
- while (*src) {
- if (*src == '"') {
- *dst++ = '\\';
- *dst++ = '"';
- }
- else if (*src == '\n') {
- // empty
+
+ char* get_json_value(const char *json, const char *key, char *out, size_t out_size, int skip)
+ {
+ char pattern[128];
+ snprintf(pattern, sizeof(pattern), "\"%s\"", key);
+ const char *pos = strstr(json, pattern);
+ while(skip > 0) {
+ pos = strstr(pos+1, pattern);
+ skip--;
}
- else {
- *dst++ = *src;
+ if (!pos) return NULL;
+ pos = strchr(pos, ':');
+ if (!pos) return NULL;
+ pos++;
+
+ // Skip whitespace and quotes
+ while (*pos == ' ' || *pos == '\"') pos++;
+
+ size_t i = 0;
+ while (*pos && !(*pos == '\"' && *(pos-1) != '\\') && i < out_size - 1) {
+ out[i++] = *pos++;
}
- src++;
+ out[i] = '\0';
+ return out;
+ }
+
+ char* get_filename(const char* path)
+ {
+ char* filename = (char*)strrchr(path, '/'); // for Unix-style paths
+ if (filename) return filename + 1; // skip the '/'
+ filename = (char*)strrchr(path, '\\'); // for Windows-style paths
+ if (filename) return filename + 1;
+ return (char*)path; // no slashes found, path itself is filename
}
- *dst = '\0';
- return result;
-}
+ char* prep_str_for_json(const char *input, size_t buffer_size)
+ {
+ if (!input) return NULL;
-char* strops_unprep_str_from_json(char *input)
-{
- if (!input) return NULL;
+ char *result = (char*)malloc(buffer_size * 2 + 1);
+ if (!result) return NULL;
- char *src = input;
- char *dst = input;
+ const char *src = input;
+ char *dst = result;
- while (*src) {
- if (*src == '\\' && *(src+1) == '"') {
+ while (*src) {
+ if (*src == '"') {
+ *dst++ = '\\';
+ *dst++ = '"';
+ }
+ else if (*src == '\n') {
+ // empty
+ }
+ else {
+ *dst++ = *src;
+ }
src++;
}
- else if (*src == '\\' && *(src+1) == 'n') {
- src++;src++;
- }
- *dst++ = *src++;
+ *dst = '\0';
+
+ return result;
+ }
+
+ char* unprep_str_from_json(char *input)
+ {
+ if (!input) return NULL;
+
+ char *src = input;
+ char *dst = input;
+
+ while (*src) {
+ if (*src == '\\' && *(src+1) == '"') {
+ src++;
+ }
+ else if (*src == '\\' && *(src+1) == 'n') {
+ src++;src++;
+ }
+ *dst++ = *src++;
+ }
+ *dst = '\0';
+
+ return input;
}
- *dst = '\0';
- return input;
} \ No newline at end of file