16#ifndef UTILS_STRINGUTILS_H
17#define UTILS_STRINGUTILS_H
69 int16
strip(
const char* input,
char* output,
size_t output_size);
83 int16
stringReplace(
const char* source,
const char* orig,
const char* repl,
84 char* output,
size_t output_size);
100 int16
splitString(
const char* text,
const char* delimiter,
101 char** tokens,
size_t max_tokens,
102 char* token_buf,
size_t token_buf_size);
122 template <
typename T>
134 int16
numberToString(
const std::array<char, N>& val,
char* retval,
size_t size);
144 template<
typename Tn,
size_t N>
145 int16
numberToString(
const std::array<Tn, N>& val,
char* retval,
size_t size);
184 int16
numberToString(
float num,
char* out,
size_t out_size, uint8 precision = 6);
195 int16
numberToString(float16 num,
char* out,
size_t out_size, uint8 precision = 3);
206 int16
numberToString(
double num,
char* out,
size_t out_size, uint8 precision = 6);
227 size_t strnlen(
const char *s,
size_t maxlen);
229 template <
typename T>
236 size_t len = strlen(s);
243 uint32 filled_num = 0;
244 uint32 start_idx = 0;
247 while(filled_num < array_size && end_idx < len) {
249 while(s[end_idx] !=
',' && s[end_idx] !=
'\0') {
254 char num_arr[end_idx - start_idx + 1];
255 memcpy(num_arr, s + start_idx, end_idx - start_idx);
256 num_arr[end_idx - start_idx] =
'\0';
258 if(err) {
return err;}
261 if(end_idx < len - 1) {
262 start_idx = ++end_idx;
268 if(filled_num != array_size) {
275 template<
typename Tn,
size_t N>
279 bool dimensions_error =
false;
281 int num_chars_filled = 0;
282 while (val_idx < N && !dimensions_error) {
284 int16 err =
numberToString(val[val_idx], retval + num_chars_filled, size - num_chars_filled);
285 if(err) {dimensions_error =
true;}
287 if(!dimensions_error) {
289 num_chars_filled =
strnlen(retval, size);
292 if(size - num_chars_filled > 1) {
293 if(val_idx < N - 1) {
294 strcpy(retval + num_chars_filled,
",");
295 num_chars_filled += 1;
298 dimensions_error =
true;
310 int16
numberToString(
const std::array<char, N>& val,
char* retval,
size_t size) {
314 uint32 length =
strnlen(val.data(), N);
318 memcpy(retval, val.data(), length);
319 retval[length] =
'\0';
#define NO_ERROR
Error code in the case where matrix math executed successfully.
Definition clockwerkerrors.h:34
#define ERROR_NULLPTR
Error code in case of a null pointer.
Definition clockwerkerrors.h:60
#define ERROR_DIMENSIONS
Definition clockwerkerrors.h:41
Definition CircularBuffer.hpp:28
bool isValidNumber(const char *s)
Checks whether a C-style string represents a valid number.
Definition stringutils.cpp:148
int16 splitString(const char *text, const char *delimiter, char **tokens, size_t max_tokens, char *token_buf, size_t token_buf_size)
Splits a string using a specified delimiter.
Definition stringutils.cpp:106
int16 stringReplace(const char *source, const char *orig, const char *repl, char *output, size_t output_size)
Replaces the first occurrence of a substring with another string.
Definition stringutils.cpp:76
void toLower(char *input)
Converts a C-style string to lowercase in place.
Definition stringutils.cpp:33
int16 numberFromString(const char *s, uint8 &num)
Overloaded - convert string to number.
Definition stringutils.cpp:318
int16 strip(const char *input, char *output, size_t output_size)
Removes leading and trailing whitespace from an input string.
Definition stringutils.cpp:54
int16 numberToString(int64 num, char *out, size_t out_size)
Definition stringutils.cpp:156
bool caseInsensitiveEqual(const char *a, const char *b)
Compares two C-style strings case-insensitively.
Definition stringutils.cpp:41
const uint16 MAX_CHARS_PER_ARRAY_STRING
Definition stringutils.hpp:34
size_t strnlen(const char *s, size_t maxlen)
Function to calculate the string length with a length bound.
Definition stringutils.cpp:428
const uint8 MAX_CHARS_PER_STRING_VALUE
Definition stringutils.hpp:31
void toUpper(char *input)
Converts a C-style string to uppercase in place.
Definition stringutils.cpp:25
int16 setArrayFromString(const char *s, T *array, size_t array_size)
Converts a bracket-enclosed comma-separated string to a float array.
Definition stringutils.hpp:230