20 StringSpan(
const char* ptr_,
size_t size_) : ptr(ptr_), size(size_) {}
22 const char* begin()
const {
return ptr; }
23 const char* end()
const {
return ptr + size; }
24 const char* pastend()
const {
return ptr + size + 1; }
33 StringSplitSpan(
const char* ptr_,
size_t size_,
bool found_) : span(ptr_, size_), found(found_) {}
35 const char* ptr()
const {
return span.ptr; }
36 size_t size()
const {
return span.size; }
37 const char* begin()
const {
return span.begin(); }
38 const char* end()
const {
return span.end(); }
39 const char* pastend()
const {
return span.pastend(); }
49 for (
size_t idx = 0; ; ++idx)
55 for (
size_t d = 0; ; ++d)
57 char s = delimiters[d];
69 enum class StringSplitIgnoreEmpty { No, Yes };
85 inline size_t StringSplit(
const char* ptr,
const char* delimiters,
const F& callable, StringSplitIgnoreEmpty ignoreEmpty = StringSplitIgnoreEmpty::Yes)
92 if (ignoreEmpty == StringSplitIgnoreEmpty::No || split.size() != 0)
98 if (split.found ==
false)
101 ptr = split.pastend();
108 inline size_t StringPrintV(
char* buffer,
size_t buffer_size,
const char* format, va_list vlist)
111 #if defined(KY_CC_MSVC) && KY_CC_MSVC < 1900 // < vc14 aka vs2015
113 if (buffer_size != 0)
114 length = _vsnprintf_s(buffer, buffer_size, _TRUNCATE, format, vlist);
116 length = _vscprintf(format, vlist);
120 int length = vsnprintf(buffer, buffer_size, format, vlist);
126 if (((
size_t)length) >= buffer_size)
127 return buffer_size - 1;
129 return (
size_t)length;
132 inline size_t StringPrint(
char* buffer,
size_t buffer_size,
const char* format, ...)
135 va_start(vlist, format);
136 size_t length =
StringPrintV(buffer, buffer_size, format, vlist);
142 inline size_t StringPrint(
char (&buffer)[N],
const char* format, ...)
145 va_start(vlist, format);
152 template<
int ByteSize>
158 va_start(args_list, format);
159 length =
StringPrintV(str, ByteSize, format, args_list);
size_t StringSplit(const char *ptr, const char *delimiters, const F &callable, StringSplitIgnoreEmpty ignoreEmpty=StringSplitIgnoreEmpty::Yes)
Calls callable(const StringSpan& span) for each substring separated by one of the delimiters...
Definition: stringutils.h:85
usage: MyLogFuncThatTakesCharPtr(StringFmt<32>("my_integer = %d", my_integer).str) ...32>
Definition: stringutils.h:153
size_t StringPrintV(char *buffer, size_t buffer_size, const char *format, va_list vlist)
Writes at most buffer_size chars, always put a null char, returns the number of chars written (not in...
Definition: stringutils.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
result of StringSplitFirst, StringSplit
Definition: stringutils.h:31
Non owning range of char.
Definition: stringutils.h:17
StringSplitSpan StringSplitFirst(const char *ptr, const char *delimiters)
returns {ptr, size, true} where ptr[size] == first delimiter found returns {ptr, size, false} where ptr[size] == null if no delimiter can be found
Definition: stringutils.h:47