aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/deprecated/split/split_iterator.h
diff options
context:
space:
mode:
authordenplusplus <denplusplus@yandex-team.ru>2022-02-10 16:47:34 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:47:34 +0300
commitaddb3626ed629a8c7d9c8c30e87365b478a8c266 (patch)
treec0748b5dcbade83af788c0abfa89c0383d6b779c /library/cpp/deprecated/split/split_iterator.h
parent57c20d143e8a438cd76b9fdc3ca2e8ee3ac1f32a (diff)
downloadydb-addb3626ed629a8c7d9c8c30e87365b478a8c266.tar.gz
Restoring authorship annotation for <denplusplus@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/deprecated/split/split_iterator.h')
-rw-r--r--library/cpp/deprecated/split/split_iterator.h324
1 files changed, 162 insertions, 162 deletions
diff --git a/library/cpp/deprecated/split/split_iterator.h b/library/cpp/deprecated/split/split_iterator.h
index f6f73dae11..0eacc29228 100644
--- a/library/cpp/deprecated/split/split_iterator.h
+++ b/library/cpp/deprecated/split/split_iterator.h
@@ -1,5 +1,5 @@
#pragma once
-
+
#include <library/cpp/deprecated/kmp/kmp.h>
#include <util/string/cast.h>
#include <util/string/util.h>
@@ -11,7 +11,7 @@
#include <util/generic/string.h>
#include <util/generic/vector.h>
#include <util/generic/yexception.h>
-
+
#include <cstdio>
template <typename T>
@@ -57,225 +57,225 @@ inline TUi32Region FromString(const TString& s) {
}
class TSplitDelimiters {
-private:
- bool Delims[256];
-
-public:
+private:
+ bool Delims[256];
+
+public:
explicit TSplitDelimiters(const char* s);
Y_FORCE_INLINE bool IsDelimiter(ui8 ch) const {
- return Delims[ch];
- }
-};
-
+ return Delims[ch];
+ }
+};
+
template <class Split>
-class TSplitIterator;
-
+class TSplitIterator;
+
class TSplitBase {
-protected:
- const char* Str;
- size_t Len;
-
-public:
- TSplitBase(const char* str, size_t length);
+protected:
+ const char* Str;
+ size_t Len;
+
+public:
+ TSplitBase(const char* str, size_t length);
TSplitBase(const TString& s);
-
+
Y_FORCE_INLINE const char* GetString() const {
- return Str;
- }
-
+ return Str;
+ }
+
Y_FORCE_INLINE size_t GetLength() const {
- return Len;
- }
+ return Len;
+ }
private:
// we don't own Str, make sure that no one calls us with temporary object
TSplitBase(TString&&) = delete;
-};
-
-#ifdef _MSC_VER
+};
+
+#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4512)
-#endif
-
+#endif
+
class TDelimitersSplit: public TSplitBase {
-private:
- const TSplitDelimiters& Delimiters;
-
-public:
+private:
+ const TSplitDelimiters& Delimiters;
+
+public:
using TIterator = TSplitIterator<TDelimitersSplit>;
- friend class TSplitIterator<TDelimitersSplit>;
-
- TDelimitersSplit(const char* str, size_t length, const TSplitDelimiters& delimiters);
+ friend class TSplitIterator<TDelimitersSplit>;
+
+ TDelimitersSplit(const char* str, size_t length, const TSplitDelimiters& delimiters);
TDelimitersSplit(const TString& s, const TSplitDelimiters& delimiters);
- TIterator Iterator() const;
- TSizeTRegion Next(size_t& pos) const;
- size_t Begin() const;
+ TIterator Iterator() const;
+ TSizeTRegion Next(size_t& pos) const;
+ size_t Begin() const;
private:
// we don't own Delimiters, make sure that no one calls us with temporary object
TDelimitersSplit(const char*, size_t, TSplitDelimiters&&) = delete;
TDelimitersSplit(const TString&, TSplitDelimiters&&) = delete;
TDelimitersSplit(TString&&, const TSplitDelimiters&) = delete;
-};
-
+};
+
class TDelimitersStrictSplit: public TSplitBase {
-private:
- const TSplitDelimiters& Delimiters;
-
-public:
+private:
+ const TSplitDelimiters& Delimiters;
+
+public:
using TIterator = TSplitIterator<TDelimitersStrictSplit>;
- friend class TSplitIterator<TDelimitersStrictSplit>;
-
- TDelimitersStrictSplit(const char* str, size_t length, const TSplitDelimiters& delimiters);
+ friend class TSplitIterator<TDelimitersStrictSplit>;
+
+ TDelimitersStrictSplit(const char* str, size_t length, const TSplitDelimiters& delimiters);
TDelimitersStrictSplit(const TString& s, const TSplitDelimiters& delimiters);
- TIterator Iterator() const;
- TSizeTRegion Next(size_t& pos) const;
- size_t Begin() const;
+ TIterator Iterator() const;
+ TSizeTRegion Next(size_t& pos) const;
+ size_t Begin() const;
private:
// we don't own Delimiters, make sure that no one calls us with temporary object
TDelimitersStrictSplit(const char*, size_t, TSplitDelimiters&&) = delete;
TDelimitersStrictSplit(const TString&, TSplitDelimiters&&) = delete;
TDelimitersStrictSplit(TString&&, const TSplitDelimiters&) = delete;
-};
-
+};
+
class TScreenedDelimitersSplit: public TSplitBase {
-private:
- const TSplitDelimiters& Delimiters;
- const TSplitDelimiters& Screens;
-
-public:
+private:
+ const TSplitDelimiters& Delimiters;
+ const TSplitDelimiters& Screens;
+
+public:
using TIterator = TSplitIterator<TScreenedDelimitersSplit>;
- friend class TSplitIterator<TScreenedDelimitersSplit>;
-
+ friend class TSplitIterator<TScreenedDelimitersSplit>;
+
TScreenedDelimitersSplit(const char*, size_t, const TSplitDelimiters& delimiters, const TSplitDelimiters& screens);
TScreenedDelimitersSplit(const TString& s, const TSplitDelimiters& delimiters, const TSplitDelimiters& screens);
- TIterator Iterator() const;
- TSizeTRegion Next(size_t& pos) const;
- size_t Begin() const;
+ TIterator Iterator() const;
+ TSizeTRegion Next(size_t& pos) const;
+ size_t Begin() const;
private:
// we don't own Delimiters and Screens, make sure that no one calls us with temporary object
TScreenedDelimitersSplit(TString&&, const TSplitDelimiters&, const TSplitDelimiters&) = delete;
TScreenedDelimitersSplit(const TString&, TSplitDelimiters&&, const TSplitDelimiters&) = delete;
TScreenedDelimitersSplit(const TString&, const TSplitDelimiters&, TSplitDelimiters&&) = delete;
-};
-
+};
+
class TDelimitersSplitWithoutTags: public TSplitBase {
-private:
- const TSplitDelimiters& Delimiters;
- size_t SkipTag(size_t pos) const;
- size_t SkipDelimiters(size_t pos) const;
-
-public:
+private:
+ const TSplitDelimiters& Delimiters;
+ size_t SkipTag(size_t pos) const;
+ size_t SkipDelimiters(size_t pos) const;
+
+public:
using TIterator = TSplitIterator<TDelimitersSplitWithoutTags>;
- friend class TSplitIterator<TDelimitersSplitWithoutTags>;
-
- TDelimitersSplitWithoutTags(const char* str, size_t length, const TSplitDelimiters& delimiters);
+ friend class TSplitIterator<TDelimitersSplitWithoutTags>;
+
+ TDelimitersSplitWithoutTags(const char* str, size_t length, const TSplitDelimiters& delimiters);
TDelimitersSplitWithoutTags(const TString& s, const TSplitDelimiters& delimiters);
- TIterator Iterator() const;
- TSizeTRegion Next(size_t& pos) const;
- size_t Begin() const;
+ TIterator Iterator() const;
+ TSizeTRegion Next(size_t& pos) const;
+ size_t Begin() const;
private:
// we don't own Delimiters, make sure that no one calls us with temporary object
TDelimitersSplitWithoutTags(const char*, size_t, TSplitDelimiters&&) = delete;
TDelimitersSplitWithoutTags(const TString&, TSplitDelimiters&&) = delete;
TDelimitersSplitWithoutTags(TString&&, const TSplitDelimiters&) = delete;
-};
-
+};
+
class TCharSplit: public TSplitBase {
-public:
+public:
using TIterator = TSplitIterator<TCharSplit>;
- friend class TSplitIterator<TCharSplit>;
-
- TCharSplit(const char* str, size_t length);
+ friend class TSplitIterator<TCharSplit>;
+
+ TCharSplit(const char* str, size_t length);
TCharSplit(const TString& s);
- TIterator Iterator() const;
- TSizeTRegion Next(size_t& pos) const;
- size_t Begin() const;
+ TIterator Iterator() const;
+ TSizeTRegion Next(size_t& pos) const;
+ size_t Begin() const;
private:
// we don't own Str, make sure that no one calls us with temporary object
TCharSplit(TString&&) = delete;
-};
-
-#ifdef _MSC_VER
+};
+
+#ifdef _MSC_VER
#pragma warning(pop)
-#endif
-
+#endif
+
class TCharSplitWithoutTags: public TSplitBase {
-private:
- size_t SkipTag(size_t pos) const;
- size_t SkipDelimiters(size_t pos) const;
-
-public:
+private:
+ size_t SkipTag(size_t pos) const;
+ size_t SkipDelimiters(size_t pos) const;
+
+public:
using TIterator = TSplitIterator<TCharSplitWithoutTags>;
- friend class TSplitIterator<TCharSplitWithoutTags>;
-
- TCharSplitWithoutTags(const char* str, size_t length);
+ friend class TSplitIterator<TCharSplitWithoutTags>;
+
+ TCharSplitWithoutTags(const char* str, size_t length);
TCharSplitWithoutTags(const TString& s);
- TIterator Iterator() const;
- TSizeTRegion Next(size_t& pos) const;
- size_t Begin() const;
+ TIterator Iterator() const;
+ TSizeTRegion Next(size_t& pos) const;
+ size_t Begin() const;
private:
// we don't own Str, make sure that no one calls us with temporary object
TCharSplitWithoutTags(TString&&) = delete;
-};
-
+};
+
class TSubstringSplitDelimiter {
-public:
- TKMPMatcher Matcher;
- size_t Len;
-
+public:
+ TKMPMatcher Matcher;
+ size_t Len;
+
TSubstringSplitDelimiter(const TString& s);
-};
-
+};
+
class TSubstringSplit: public TSplitBase {
-private:
- const TSubstringSplitDelimiter& Delimiter;
-
-public:
+private:
+ const TSubstringSplitDelimiter& Delimiter;
+
+public:
using TIterator = TSplitIterator<TSubstringSplit>;
- friend class TSplitIterator<TSubstringSplit>;
-
+ friend class TSplitIterator<TSubstringSplit>;
+
TSubstringSplit(const char* str, size_t length, const TSubstringSplitDelimiter& delimiter);
TSubstringSplit(const TString& str, const TSubstringSplitDelimiter& delimiter);
- TIterator Iterator() const;
- TSizeTRegion Next(size_t& pos) const;
- size_t Begin() const;
+ TIterator Iterator() const;
+ TSizeTRegion Next(size_t& pos) const;
+ size_t Begin() const;
private:
// we don't own Delimiters, make sure that no one calls us with temporary object
TSubstringSplit(TString&&, const TSubstringSplitDelimiter&) = delete;
TSubstringSplit(const TString&, TSubstringSplitDelimiter&&) = delete;
-};
-
+};
+
template <class TSplit>
class TSplitIterator {
-protected:
- const TSplit& Split;
- size_t Pos;
+protected:
+ const TSplit& Split;
+ size_t Pos;
TString* CurrentStroka;
-
-public:
- TSplitIterator(const TSplit& split)
- : Split(split)
- , Pos(Split.Begin())
+
+public:
+ TSplitIterator(const TSplit& split)
+ : Split(split)
+ , Pos(Split.Begin())
, CurrentStroka(nullptr)
- {
- }
-
- virtual ~TSplitIterator() {
- delete CurrentStroka;
- }
-
- inline TSizeTRegion Next() {
+ {
+ }
+
+ virtual ~TSplitIterator() {
+ delete CurrentStroka;
+ }
+
+ inline TSizeTRegion Next() {
Y_ENSURE(!Eof(), TStringBuf("eof reached"));
- return Split.Next(Pos);
- }
+ return Split.Next(Pos);
+ }
TStringBuf NextTok() {
if (Eof())
@@ -285,33 +285,33 @@ public:
}
const TString& NextString() {
- if (!CurrentStroka)
+ if (!CurrentStroka)
CurrentStroka = new TString();
- TSizeTRegion region = Next();
- CurrentStroka->assign(Split.Str, region.Begin, region.Length() - 1);
- return *CurrentStroka;
- }
-
- inline bool Eof() const {
- return Pos >= Split.Len;
- }
-
+ TSizeTRegion region = Next();
+ CurrentStroka->assign(Split.Str, region.Begin, region.Length() - 1);
+ return *CurrentStroka;
+ }
+
+ inline bool Eof() const {
+ return Pos >= Split.Len;
+ }
+
TString GetTail() const {
return TString(Split.Str + Pos);
- }
-
- void Skip(size_t count) {
- for (size_t i = 0; i < count; ++i)
- Next();
- }
-};
-
+ }
+
+ void Skip(size_t count) {
+ for (size_t i = 0; i < count; ++i)
+ Next();
+ }
+};
+
using TSplitTokens = TVector<TString>;
-
+
template <typename TSplit>
void Split(const TSplit& split, TSplitTokens* words) {
- words->clear();
- TSplitIterator<TSplit> it(split);
- while (!it.Eof())
+ words->clear();
+ TSplitIterator<TSplit> it(split);
+ while (!it.Eof())
words->push_back(it.NextString());
-}
+}