aboutsummaryrefslogtreecommitdiffstats
path: root/util/string
diff options
context:
space:
mode:
authorantonovvk <antonovvk@yandex-team.ru>2022-02-10 16:47:51 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:47:51 +0300
commit37a63debdc21e372d99e1808cdd31aecf75018c3 (patch)
treefd84293fb9a1b16381dd6c1a5e14c78afacb8710 /util/string
parent1fe621e70df847cc201ac942fe6d7804ea10508d (diff)
downloadydb-37a63debdc21e372d99e1808cdd31aecf75018c3.tar.gz
Restoring authorship annotation for <antonovvk@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'util/string')
-rw-r--r--util/string/cast.h18
-rw-r--r--util/string/split.h74
-rw-r--r--util/string/split_ut.cpp176
-rw-r--r--util/string/util.h22
4 files changed, 145 insertions, 145 deletions
diff --git a/util/string/cast.h b/util/string/cast.h
index 90e925c194..eee2ba1813 100644
--- a/util/string/cast.h
+++ b/util/string/cast.h
@@ -3,7 +3,7 @@
#include <util/system/defaults.h>
#include <util/stream/str.h>
#include <util/generic/string.h>
-#include <util/generic/strbuf.h>
+#include <util/generic/strbuf.h>
#include <util/generic/typetraits.h>
#include <util/generic/yexception.h>
@@ -151,11 +151,11 @@ inline T FromString(const TChar* data) {
}
template <class T>
-inline T FromString(const TStringBuf& s) {
+inline T FromString(const TStringBuf& s) {
return ::FromString<T>(s.data(), s.size());
-}
-
-template <class T>
+}
+
+template <class T>
inline T FromString(const TString& s) {
return ::FromString<T>(s.data(), s.size());
}
@@ -171,11 +171,11 @@ inline TString FromString<TString>(const TString& s) {
}
template <class T>
-inline T FromString(const TWtringBuf& s) {
+inline T FromString(const TWtringBuf& s) {
return ::FromString<T, typename TWtringBuf::char_type>(s.data(), s.size());
-}
-
-template <class T>
+}
+
+template <class T>
inline T FromString(const TUtf16String& s) {
return ::FromString<T, wchar16>(s.data(), s.size());
}
diff --git a/util/string/split.h b/util/string/split.h
index bc46d9e64c..17149d1785 100644
--- a/util/string/split.h
+++ b/util/string/split.h
@@ -198,29 +198,29 @@ private:
template <class Char>
struct TFindFirstOf {
inline TFindFirstOf(Char* set)
- : Set(set)
- {
- }
-
+ : Set(set)
+ {
+ }
+
inline Char* FindFirstOf(Char* b, Char* e) const noexcept {
Char* ret = b;
- for (; ret != e; ++ret) {
+ for (; ret != e; ++ret) {
if (NStringSplitPrivate::Find(Set, *ret))
- break;
- }
- return ret;
- }
-
+ break;
+ }
+ return ret;
+ }
+
inline Char* FindFirstOf(Char* b) const noexcept {
const std::basic_string_view<Char> bView(b);
const auto ret = bView.find_first_of(Set);
return ret != std::string::npos ? b + ret : b + bView.size();
- }
-
+ }
+
Char* Set;
-};
-
-template <>
+};
+
+template <>
struct TFindFirstOf<const char>: public TCompactStrSpn {
inline TFindFirstOf(const char* set, const char* e)
: TCompactStrSpn(set, e)
@@ -229,37 +229,37 @@ struct TFindFirstOf<const char>: public TCompactStrSpn {
inline TFindFirstOf(const char* set)
: TCompactStrSpn(set)
- {
- }
+ {
+ }
};
-
+
template <class Char>
struct TSetDelimiter: private TFindFirstOf<const Char> {
using TFindFirstOf<const Char>::TFindFirstOf;
-
+
inline Char* Find(Char*& b, Char* e) const noexcept {
Char* ret = const_cast<Char*>(this->FindFirstOf(b, e));
- if (ret != e) {
- b = ret + 1;
- return ret;
- }
-
- return (b = e);
- }
-
+ if (ret != e) {
+ b = ret + 1;
+ return ret;
+ }
+
+ return (b = e);
+ }
+
inline Char* Find(Char*& b) const noexcept {
Char* ret = const_cast<Char*>(this->FindFirstOf(b));
-
- if (*ret) {
- b = ret + 1;
- return ret;
- }
-
- return (b = ret);
- }
-};
-
+
+ if (*ret) {
+ b = ret + 1;
+ return ret;
+ }
+
+ return (b = ret);
+ }
+};
+
namespace NSplitTargetHasPushBack {
Y_HAS_MEMBER(push_back, PushBack);
}
diff --git a/util/string/split_ut.cpp b/util/string/split_ut.cpp
index 43e59f2d75..ee67fd8a29 100644
--- a/util/string/split_ut.cpp
+++ b/util/string/split_ut.cpp
@@ -22,113 +22,113 @@ static inline void OldSplit(char* pszBuf, T* pRes) {
}
}
-template <class T1, class T2>
-inline void Cmp(const T1& t1, const T2& t2) {
- try {
+template <class T1, class T2>
+inline void Cmp(const T1& t1, const T2& t2) {
+ try {
UNIT_ASSERT_EQUAL(t1.size(), t2.size());
- } catch (...) {
- Print(t1);
- Cerr << "---------------" << Endl;
- Print(t2);
-
- throw;
- }
-
+ } catch (...) {
+ Print(t1);
+ Cerr << "---------------" << Endl;
+ Print(t2);
+
+ throw;
+ }
+
auto i = t1.begin();
auto j = t2.begin();
for (; i != t1.end() && j != t2.end(); ++i, ++j) {
- try {
+ try {
UNIT_ASSERT_EQUAL(*i, *j);
- } catch (...) {
+ } catch (...) {
Cerr << "(" << *i << ")->(" << *j << ")" << Endl;
-
- throw;
- }
- }
+
+ throw;
+ }
+ }
}
-template <class T>
-inline void Print(const T& t) {
+template <class T>
+inline void Print(const T& t) {
for (typename T::const_iterator i = t.begin(); i != t.end(); ++i) {
Cerr << *i << Endl;
- }
+ }
}
template <template <typename> class TConsumer, typename TResult, typename I, typename TDelimiter>
-void TestDelimiterOnString(TResult& good, I* str, const TDelimiter& delim) {
- TResult test;
+void TestDelimiterOnString(TResult& good, I* str, const TDelimiter& delim) {
+ TResult test;
TConsumer<TResult> consumer(&test);
- SplitString(str, delim, consumer);
- Cmp(good, test);
- UNIT_ASSERT_EQUAL(good, test);
+ SplitString(str, delim, consumer);
+ Cmp(good, test);
+ UNIT_ASSERT_EQUAL(good, test);
}
template <template <typename> class TConsumer, typename TResult, typename I, typename TDelimiter>
-void TestDelimiterOnRange(TResult& good, I* b, I* e, const TDelimiter& delim) {
- TResult test;
+void TestDelimiterOnRange(TResult& good, I* b, I* e, const TDelimiter& delim) {
+ TResult test;
TConsumer<TResult> consumer(&test);
- SplitString(b, e, delim, consumer);
- Cmp(good, test);
- UNIT_ASSERT_EQUAL(good, test);
-}
-
-template <typename TConsumer, typename TResult, typename I>
-void TestConsumerOnString(TResult& good, I* str, I* d) {
- TResult test;
- TContainerConsumer<TResult> consumer(&test);
- TConsumer tested(&consumer);
- TCharDelimiter<const I> delim(*d);
- SplitString(str, delim, tested);
- Cmp(good, test);
- UNIT_ASSERT_EQUAL(good, test);
-}
-
-template <typename TConsumer, typename TResult, typename I>
-void TestConsumerOnRange(TResult& good, I* b, I* e, I* d) {
- TResult test;
- TContainerConsumer<TResult> consumer(&test);
- TConsumer tested(&consumer);
- TCharDelimiter<const I> delim(*d);
- SplitString(b, e, delim, tested);
- Cmp(good, test);
- UNIT_ASSERT_EQUAL(good, test);
-}
+ SplitString(b, e, delim, consumer);
+ Cmp(good, test);
+ UNIT_ASSERT_EQUAL(good, test);
+}
+
+template <typename TConsumer, typename TResult, typename I>
+void TestConsumerOnString(TResult& good, I* str, I* d) {
+ TResult test;
+ TContainerConsumer<TResult> consumer(&test);
+ TConsumer tested(&consumer);
+ TCharDelimiter<const I> delim(*d);
+ SplitString(str, delim, tested);
+ Cmp(good, test);
+ UNIT_ASSERT_EQUAL(good, test);
+}
+
+template <typename TConsumer, typename TResult, typename I>
+void TestConsumerOnRange(TResult& good, I* b, I* e, I* d) {
+ TResult test;
+ TContainerConsumer<TResult> consumer(&test);
+ TConsumer tested(&consumer);
+ TCharDelimiter<const I> delim(*d);
+ SplitString(b, e, delim, tested);
+ Cmp(good, test);
+ UNIT_ASSERT_EQUAL(good, test);
+}
using TStrokaConsumer = TContainerConsumer<TVector<TString>>;
void TestLimitingConsumerOnString(TVector<TString>& good, const char* str, const char* d, size_t n, const char* last) {
TVector<TString> test;
- TStrokaConsumer consumer(&test);
- TLimitingConsumer<TStrokaConsumer, const char> limits(n, &consumer);
- TCharDelimiter<const char> delim(*d);
- SplitString(str, delim, limits);
- Cmp(good, test);
- UNIT_ASSERT_EQUAL(good, test);
+ TStrokaConsumer consumer(&test);
+ TLimitingConsumer<TStrokaConsumer, const char> limits(n, &consumer);
+ TCharDelimiter<const char> delim(*d);
+ SplitString(str, delim, limits);
+ Cmp(good, test);
+ UNIT_ASSERT_EQUAL(good, test);
UNIT_ASSERT_EQUAL(TString(limits.Last), TString(last)); // Quite unobvious behaviour. Why the last token is not added to slave consumer?
-}
+}
void TestLimitingConsumerOnRange(TVector<TString>& good, const char* b, const char* e, const char* d, size_t n, const char* last) {
TVector<TString> test;
- TStrokaConsumer consumer(&test);
- TLimitingConsumer<TStrokaConsumer, const char> limits(n, &consumer);
- TCharDelimiter<const char> delim(*d);
- SplitString(b, e, delim, limits);
- Cmp(good, test);
- UNIT_ASSERT_EQUAL(good, test);
+ TStrokaConsumer consumer(&test);
+ TLimitingConsumer<TStrokaConsumer, const char> limits(n, &consumer);
+ TCharDelimiter<const char> delim(*d);
+ SplitString(b, e, delim, limits);
+ Cmp(good, test);
+ UNIT_ASSERT_EQUAL(good, test);
UNIT_ASSERT_EQUAL(TString(limits.Last), TString(last));
-}
+}
Y_UNIT_TEST_SUITE(SplitStringTest) {
Y_UNIT_TEST(TestCharSingleDelimiter) {
TString data("qw ab qwabcab");
TString canonic[] = {"qw", "ab", "", "qwabcab"};
TVector<TString> good(canonic, canonic + 4);
- TCharDelimiter<const char> delim(' ');
+ TCharDelimiter<const char> delim(' ');
TestDelimiterOnString<TContainerConsumer>(good, data.data(), delim);
TestDelimiterOnRange<TContainerConsumer>(good, data.data(), data.end(), delim);
- }
+ }
Y_UNIT_TEST(TestWideSingleDelimiter) {
TUtf16String data(u"qw ab qwabcab");
@@ -138,7 +138,7 @@ Y_UNIT_TEST_SUITE(SplitStringTest) {
TestDelimiterOnString<TContainerConsumer>(good, data.data(), delim);
TestDelimiterOnRange<TContainerConsumer>(good, data.data(), data.end(), delim);
- }
+ }
Y_UNIT_TEST(TestConvertToIntCharSingleDelimiter) {
TString data("42 4242 -12345 0");
@@ -157,7 +157,7 @@ Y_UNIT_TEST_SUITE(SplitStringTest) {
TestConsumerOnString<TSkipEmptyTokens<TStrokaConsumer>>(good, data.data(), " ");
TestConsumerOnRange<TSkipEmptyTokens<TStrokaConsumer>>(good, data.data(), data.end(), " ");
- }
+ }
Y_UNIT_TEST(TestCharKeepDelimiters) {
TString data("qw ab qwabcab ");
@@ -166,7 +166,7 @@ Y_UNIT_TEST_SUITE(SplitStringTest) {
TestConsumerOnString<TKeepDelimiters<TStrokaConsumer>>(good, data.data(), " ");
TestConsumerOnRange<TKeepDelimiters<TStrokaConsumer>>(good, data.data(), data.end(), " ");
- }
+ }
Y_UNIT_TEST(TestCharLimit) {
TString data("qw ab qwabcab ");
@@ -175,17 +175,17 @@ Y_UNIT_TEST_SUITE(SplitStringTest) {
TestLimitingConsumerOnString(good, data.data(), " ", 3, " qwabcab ");
TestLimitingConsumerOnRange(good, data.data(), data.end(), " ", 3, " qwabcab ");
- }
+ }
Y_UNIT_TEST(TestCharStringDelimiter) {
TString data("qw ab qwababcab");
TString canonic[] = {"qw ", " qw", "", "c", ""};
TVector<TString> good(canonic, canonic + 5);
- TStringDelimiter<const char> delim("ab");
+ TStringDelimiter<const char> delim("ab");
TestDelimiterOnString<TContainerConsumer>(good, data.data(), delim);
TestDelimiterOnRange<TContainerConsumer>(good, data.data(), data.end(), delim);
- }
+ }
Y_UNIT_TEST(TestWideStringDelimiter) {
TUtf16String data(u"qw ab qwababcab");
@@ -196,17 +196,17 @@ Y_UNIT_TEST_SUITE(SplitStringTest) {
TestDelimiterOnString<TContainerConsumer>(good, data.data(), delim);
TestDelimiterOnRange<TContainerConsumer>(good, data.data(), data.end(), delim);
- }
+ }
Y_UNIT_TEST(TestCharSetDelimiter) {
TString data("qw ab qwababccab");
TString canonic[] = {"q", " ab q", "abab", "", "ab"};
TVector<TString> good(canonic, canonic + 5);
- TSetDelimiter<const char> delim("wc");
+ TSetDelimiter<const char> delim("wc");
TestDelimiterOnString<TContainerConsumer>(good, data.data(), delim);
TestDelimiterOnRange<TContainerConsumer>(good, data.data(), data.end(), delim);
- }
+ }
Y_UNIT_TEST(TestWideSetDelimiter) {
TUtf16String data(u"qw ab qwababccab");
@@ -216,7 +216,7 @@ Y_UNIT_TEST_SUITE(SplitStringTest) {
TSetDelimiter<const wchar16> delim(wideDelim.data());
TestDelimiterOnString<TContainerConsumer>(good, data.data(), delim);
- }
+ }
Y_UNIT_TEST(TestWideSetDelimiterRange) {
TUtf16String data(u"qw ab qwababccab");
@@ -224,19 +224,19 @@ Y_UNIT_TEST_SUITE(SplitStringTest) {
TVector<TUtf16String> good(1);
TUtf16String wideDelim(u"wc");
TSetDelimiter<const wchar16> delim(wideDelim.data());
-
+
TVector<TUtf16String> test;
TContainerConsumer<TVector<TUtf16String>> consumer(&test);
SplitString(data.data(), data.data(), delim, consumer); // Empty string is still inserted into consumer
- Cmp(good, test);
-
- good.assign(canonic, canonic + 4);
+ Cmp(good, test);
+
+ good.assign(canonic, canonic + 4);
good.push_back(TUtf16String());
- test.clear();
+ test.clear();
SplitString(data.data(), data.end() - 2, delim, consumer);
- Cmp(good, test);
- }
-
+ Cmp(good, test);
+ }
+
Y_UNIT_TEST(TestSplit) {
TString data("qw ab qwababcba");
TString canonic[] = {"qw ", " qw", "c"};
@@ -301,7 +301,7 @@ Y_UNIT_TEST_SUITE(SplitStringTest) {
UNIT_ASSERT_NO_EXCEPTION(Split(data, ' ', s1, s2, m1, m2, m1, m1, m1, m1));
UNIT_ASSERT_EXCEPTION(Split(data, ' ', s1, s2, m1, m2, m1, m1, m1, m1, s1), yexception);
}
-}
+}
template <typename I, typename C>
void TestStringSplitterCount(I* str, C delim, size_t good) {
diff --git a/util/string/util.h b/util/string/util.h
index 0d77a5042b..4901e8ba22 100644
--- a/util/string/util.h
+++ b/util/string/util.h
@@ -77,12 +77,12 @@ public:
return s;
}
- const char* brk(const char* s, const char* e) const {
- while (s < e && c_chars_table[(ui8)*s])
+ const char* brk(const char* s, const char* e) const {
+ while (s < e && c_chars_table[(ui8)*s])
++s;
- return s;
- }
-
+ return s;
+ }
+
/// Return first character not in table, like strpbrk() for inverted table.
/// That is, skip all characters in table
const char* cbrk(const char* s) const {
@@ -91,12 +91,12 @@ public:
return s;
}
- const char* cbrk(const char* s, const char* e) const {
- while (s < e && chars_table[(ui8)*s])
+ const char* cbrk(const char* s, const char* e) const {
+ while (s < e && chars_table[(ui8)*s])
++s;
- return s;
- }
-
+ return s;
+ }
+
/// Offset of the first character not in table, like strspn().
size_t spn(const char* s) const {
return cbrk(s) - s;
@@ -172,7 +172,7 @@ public:
void Do(char* s, size_t l) const {
for (size_t i = 0; i < l && s[i]; i++)
s[i] = ConvertChar(s[i]);
- }
+ }
void Do(TString& str) const;
private: