diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-10-04 16:53:57 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-10-04 16:53:57 +0200 |
| commit | f9f1955748a3b369f0a015405af131c9b6e3285c (patch) | |
| tree | c74cec6b30daccee2d1841627b3913c51fd549e3 /src/strops.cpp | |
| parent | 2855642dd16cea260f3b32351f0529328a0bcb15 (diff) | |
namespace for logger, strops, locales
Diffstat (limited to 'src/strops.cpp')
| -rw-r--r-- | src/strops.cpp | 302 |
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 |
