diff --git a/BAN/BAN/StringView.cpp b/BAN/BAN/StringView.cpp index 76093331..14ae5b3a 100644 --- a/BAN/BAN/StringView.cpp +++ b/BAN/BAN/StringView.cpp @@ -63,13 +63,20 @@ namespace BAN } ErrorOr> StringView::Split(char delim, bool allow_empties) + { + // FIXME: Won't work while multithreading + static char s_delim = delim; + return Split([](char c){ return c == s_delim; }, allow_empties); + } + + ErrorOr> StringView::Split(bool(*comp)(char), bool allow_empties) { size_type count = 0; { size_type start = 0; for (size_type i = 0; i < m_size; i++) { - if (m_data[i] == delim) + if (comp(m_data[i])) { if (allow_empties || start != i) count++; @@ -86,7 +93,7 @@ namespace BAN size_type start = 0; for (size_type i = 0; i < m_size; i++) { - if (m_data[i] == delim) + if (comp(m_data[i])) { if (allow_empties || start != i) result.PushBack(this->Substring(start, i - start)); diff --git a/BAN/Makefile b/BAN/Makefile index 1bf066ee..81c7d54e 100644 --- a/BAN/Makefile +++ b/BAN/Makefile @@ -16,7 +16,7 @@ LIBDIR?=$(EXEC_PREFIX)/lib CFLAGS:=$(CFLAGS) -Iinclude -ffreestanding -Wall -Wextra CPPFLAGS:=$(CPPFLAGS) LIBBANK_CFLAGS:=$(CFLAGS) -D__is_kernel -Iinclude -ffreestanding -Wall -Wextra -LIBBANK_CPPFLAGS:=$(CPPFLAGS) -fno-rtti -fno-exceptions +LIBBANK_CPPFLAGS:=$(CPPFLAGS) -fno-rtti -fno-exceptions -fno-threadsafe-statics ARCHDIR=arch/$(HOSTARCH) diff --git a/BAN/include/BAN/StringView.h b/BAN/include/BAN/StringView.h index 3db5c8e2..f9b2ff82 100644 --- a/BAN/include/BAN/StringView.h +++ b/BAN/include/BAN/StringView.h @@ -25,6 +25,7 @@ namespace BAN StringView Substring(size_type, size_type = -1) const; ErrorOr> Split(char, bool = false); + ErrorOr> Split(bool(*comp)(char), bool = false); size_type Count(char) const;