Add String.split(char) to split into an array, and add a simple char const * + lol::String free operator.undefined
| @@ -228,6 +228,24 @@ public: | |||||
| && memcmp(C() + count() - s.count(), s.C(), s.count()) == 0; | && memcmp(C() + count() - s.count(), s.C(), s.count()) == 0; | ||||
| } | } | ||||
| array<String> split(char c = '\n') const | |||||
| { | |||||
| array<String> ret; | |||||
| for (int start = 0; start < m_count; ) | |||||
| { | |||||
| char const *tmp = strchr(C() + start, c); | |||||
| if (!tmp) | |||||
| { | |||||
| ret.push(String(C() + start)); | |||||
| break; | |||||
| } | |||||
| int size = tmp - C() - start; | |||||
| ret.push(String(C() + start, size)); | |||||
| start += size + 1; | |||||
| } | |||||
| return ret; | |||||
| } | |||||
| bool is_alpha() const | bool is_alpha() const | ||||
| { | { | ||||
| for (int i = 0; i < m_count; i++) | for (int i = 0; i < m_count; i++) | ||||
| @@ -312,6 +330,11 @@ public: | |||||
| static String vformat(char const *format, va_list ap); | static String vformat(char const *format, va_list ap); | ||||
| }; | }; | ||||
| inline String operator +(char const *sz, String const &s) | |||||
| { | |||||
| return String(sz) + s; | |||||
| } | |||||
| inline bool operator ==(char const* sz, String const &s) | inline bool operator ==(char const* sz, String const &s) | ||||
| { | { | ||||
| return s == sz; | return s == sz; | ||||
| @@ -240,6 +240,37 @@ lolunit_declare_fixture(string_test) | |||||
| lolunit_assert(s1 < s4); | lolunit_assert(s1 < s4); | ||||
| lolunit_assert(!(s4 < s1)); | lolunit_assert(!(s4 < s1)); | ||||
| } | } | ||||
| lolunit_declare_test(string_split) | |||||
| { | |||||
| auto l1 = String("abc").split(); | |||||
| lolunit_assert(l1.count() == 1); | |||||
| lolunit_assert(l1[0] == "abc"); | |||||
| auto l2 = String("\nabc").split(); | |||||
| lolunit_assert(l2.count() == 2); | |||||
| lolunit_assert(l2[0] == ""); | |||||
| lolunit_assert(l2[1] == "abc"); | |||||
| auto l3 = String("abc\n").split(); | |||||
| lolunit_assert(l3.count() == 2); | |||||
| lolunit_assert(l3[0] == "abc"); | |||||
| lolunit_assert(l3[1] == ""); | |||||
| auto l4 = String("\n\n").split(); | |||||
| lolunit_assert(l4.count() == 3); | |||||
| lolunit_assert(l4[0] == ""); | |||||
| lolunit_assert(l4[1] == ""); | |||||
| lolunit_assert(l4[2] == ""); | |||||
| auto l5 = String("abc\nde\n\nf\n").split(); | |||||
| lolunit_assert(l5.count() == 5); | |||||
| lolunit_assert(l5[0] == "abc"); | |||||
| lolunit_assert(l5[1] == "de"); | |||||
| lolunit_assert(l5[2] == ""); | |||||
| lolunit_assert(l5[3] == "f"); | |||||
| lolunit_assert(l5[4] == ""); | |||||
| } | |||||
| }; | }; | ||||
| } /* namespace lol */ | } /* namespace lol */ | ||||