diff options
| author | Michael <132351311+perogycook@users.noreply.github.com> | 2023-11-26 00:00:47 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-26 00:00:47 -0700 |
| commit | 9300c99d654448e4ee353caeac5825a6995ea28e (patch) | |
| tree | 2c95d759e62e77f120cd21878adaba1bea566610 /src/string.cpp | |
| parent | 9366bf44a69af7a251a8f96938ae5c9931941c25 (diff) | |
| parent | e8e350144374957cb96d4a38411deba434c93a1d (diff) | |
Merge branch 'odin-lang:master' into raylib5
Diffstat (limited to 'src/string.cpp')
| -rw-r--r-- | src/string.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/string.cpp b/src/string.cpp index 6eac4f53b..9fb933b1b 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -10,6 +10,10 @@ struct String { return text[i]; } }; +struct String_Iterator { + String const &str; + isize pos; +}; // NOTE(bill): used for printf style arguments #define LIT(x) ((int)(x).len), (x).text #if defined(GB_COMPILER_MSVC) && _MSC_VER < 1700 @@ -201,11 +205,31 @@ gb_internal gb_inline String string_trim_starts_with(String const &s, String con } +gb_internal String string_split_iterator(String_Iterator *it, const char sep) { + isize start = it->pos; + isize end = it->str.len; + + if (start == end) { + return str_lit(""); + } + + isize i = start; + for (; i < it->str.len; i++) { + if (it->str[i] == sep) { + String res = substring(it->str, start, i); + it->pos += res.len + 1; + return res; + } + } + it->pos = end; + return substring(it->str, start, end); +} + gb_internal gb_inline isize string_extension_position(String const &str) { isize dot_pos = -1; isize i = str.len; while (i --> 0) { - if (str[i] == GB_PATH_SEPARATOR) + if (str[i] == '\\' || str[i] == '/') break; if (str[i] == '.') { dot_pos = i; |