diff options
Diffstat (limited to 'library/cpp/deprecated/split/split_iterator.cpp')
-rw-r--r-- | library/cpp/deprecated/split/split_iterator.cpp | 458 |
1 files changed, 229 insertions, 229 deletions
diff --git a/library/cpp/deprecated/split/split_iterator.cpp b/library/cpp/deprecated/split/split_iterator.cpp index 32262d25bd..88790475a6 100644 --- a/library/cpp/deprecated/split/split_iterator.cpp +++ b/library/cpp/deprecated/split/split_iterator.cpp @@ -1,112 +1,112 @@ #include "split_iterator.h" #include <util/system/yassert.h> - + #include <cctype> #include <cstring> #include <cstdlib> -/****************** TSplitDelimiters2 ******************/ - +/****************** TSplitDelimiters2 ******************/ + TSplitDelimiters::TSplitDelimiters(const char* s) { - memset(Delims, 0, sizeof(Delims)); - while (*s) + memset(Delims, 0, sizeof(Delims)); + while (*s) Delims[(ui8) * (s++)] = true; -} - -/****************** TSplitBase ******************/ +} + +/****************** TSplitBase ******************/ TSplitBase::TSplitBase(const char* str, size_t length) : Str(str) , Len(length) -{ -} - +{ +} + TSplitBase::TSplitBase(const TString& s) : Str(s.data()) , Len(s.size()) -{ -} - -/****************** TDelimitersSplit ******************/ - +{ +} + +/****************** TDelimitersSplit ******************/ + TDelimitersSplit::TDelimitersSplit(const char* str, size_t length, const TSplitDelimiters& delimiters) : TSplitBase(str, length) , Delimiters(delimiters) -{ -} - +{ +} + TDelimitersSplit::TDelimitersSplit(const TString& s, const TSplitDelimiters& delimiters) : TSplitBase(s) , Delimiters(delimiters) -{ -} - +{ +} + size_t TDelimitersSplit::Begin() const { - size_t pos = 0; + size_t pos = 0; while ((pos < Len) && Delimiters.IsDelimiter(Str[pos])) - ++pos; - return pos; -} - + ++pos; + return pos; +} + TSizeTRegion TDelimitersSplit::Next(size_t& pos) const { - size_t begin = pos; + size_t begin = pos; while ((pos < Len) && !Delimiters.IsDelimiter(Str[pos])) - ++pos; - TSizeTRegion result(begin, pos); - + ++pos; + TSizeTRegion result(begin, pos); + while ((pos < Len) && Delimiters.IsDelimiter(Str[pos])) - ++pos; - - return result; -} + ++pos; + return result; +} + TDelimitersSplit::TIterator TDelimitersSplit::Iterator() const { - return TIterator(*this); -} - -/****************** TDelimitersStrictSplit ******************/ - + return TIterator(*this); +} + +/****************** TDelimitersStrictSplit ******************/ + TDelimitersStrictSplit::TDelimitersStrictSplit(const char* str, size_t length, const TSplitDelimiters& delimiters) : TSplitBase(str, length) , Delimiters(delimiters) -{ -} - +{ +} + TDelimitersStrictSplit::TDelimitersStrictSplit(const TString& s, const TSplitDelimiters& delimiters) : TSplitBase(s) , Delimiters(delimiters) -{ -} - +{ +} + TDelimitersStrictSplit::TIterator TDelimitersStrictSplit::Iterator() const { - return TIterator(*this); -} - + return TIterator(*this); +} + TSizeTRegion TDelimitersStrictSplit::Next(size_t& pos) const { - size_t begin = pos; + size_t begin = pos; while ((pos < Len) && !Delimiters.IsDelimiter(Str[pos])) - ++pos; - TSizeTRegion result(begin, pos); - - if (pos < Len) - ++pos; - - return result; -} - + ++pos; + TSizeTRegion result(begin, pos); + + if (pos < Len) + ++pos; + + return result; +} + size_t TDelimitersStrictSplit::Begin() const { - return 0; -} - -/****************** TScreenedDelimitersSplit ******************/ - + return 0; +} + +/****************** TScreenedDelimitersSplit ******************/ + TScreenedDelimitersSplit::TScreenedDelimitersSplit(const TString& s, const TSplitDelimiters& delimiters, const TSplitDelimiters& screens) - : TSplitBase(s) - , Delimiters(delimiters) - , Screens(screens) -{ -} - + : TSplitBase(s) + , Delimiters(delimiters) + , Screens(screens) +{ +} + TScreenedDelimitersSplit::TScreenedDelimitersSplit(const char* str, size_t length, const TSplitDelimiters& delimiters, const TSplitDelimiters& screens) : TSplitBase(str, length) , Delimiters(delimiters) @@ -114,174 +114,174 @@ TScreenedDelimitersSplit::TScreenedDelimitersSplit(const char* str, size_t lengt { } -TScreenedDelimitersSplit::TIterator TScreenedDelimitersSplit::Iterator() const { - return TIterator(*this); -} - -TSizeTRegion TScreenedDelimitersSplit::Next(size_t& pos) const { - size_t begin = pos; - bool screened = false; - while (pos < Len) { - if (Screens.IsDelimiter(Str[pos])) - screened = !screened; - if (Delimiters.IsDelimiter(Str[pos]) && !screened) - break; - ++pos; - } - TSizeTRegion result(begin, pos); - - if (pos < Len) - ++pos; - - return result; -} - -size_t TScreenedDelimitersSplit::Begin() const { - return 0; -} - -/****************** TDelimitersSplitWithoutTags ******************/ - +TScreenedDelimitersSplit::TIterator TScreenedDelimitersSplit::Iterator() const { + return TIterator(*this); +} + +TSizeTRegion TScreenedDelimitersSplit::Next(size_t& pos) const { + size_t begin = pos; + bool screened = false; + while (pos < Len) { + if (Screens.IsDelimiter(Str[pos])) + screened = !screened; + if (Delimiters.IsDelimiter(Str[pos]) && !screened) + break; + ++pos; + } + TSizeTRegion result(begin, pos); + + if (pos < Len) + ++pos; + + return result; +} + +size_t TScreenedDelimitersSplit::Begin() const { + return 0; +} + +/****************** TDelimitersSplitWithoutTags ******************/ + TDelimitersSplitWithoutTags::TDelimitersSplitWithoutTags(const char* str, size_t length, const TSplitDelimiters& delimiters) : TSplitBase(str, length) , Delimiters(delimiters) -{ -} - +{ +} + TDelimitersSplitWithoutTags::TDelimitersSplitWithoutTags(const TString& s, const TSplitDelimiters& delimiters) : TSplitBase(s) , Delimiters(delimiters) -{ -} - +{ +} + size_t TDelimitersSplitWithoutTags::SkipTag(size_t pos) const { Y_ASSERT('<' == Str[pos]); - while ((pos < Len) && ('>' != Str[pos])) - ++pos; - return pos + 1; -} - + while ((pos < Len) && ('>' != Str[pos])) + ++pos; + return pos + 1; +} + size_t TDelimitersSplitWithoutTags::SkipDelimiters(size_t pos) const { while (true) { while ((pos < Len) && Delimiters.IsDelimiter(Str[pos]) && ('<' != Str[pos])) - ++pos; + ++pos; if (pos < Len) { - if ('<' != Str[pos]) - break; - else - pos = SkipTag(pos); + if ('<' != Str[pos]) + break; + else + pos = SkipTag(pos); } else - break; - } - return pos; -} - + break; + } + return pos; +} + size_t TDelimitersSplitWithoutTags::Begin() const { - size_t pos = 0; - pos = SkipDelimiters(pos); - return pos; -} - + size_t pos = 0; + pos = SkipDelimiters(pos); + return pos; +} + TSizeTRegion TDelimitersSplitWithoutTags::Next(size_t& pos) const { - size_t begin = pos; + size_t begin = pos; while ((pos < Len) && !Delimiters.IsDelimiter(Str[pos]) && ('<' != Str[pos])) - ++pos; - TSizeTRegion result(begin, pos); - - pos = SkipDelimiters(pos); - - return result; -} - + ++pos; + TSizeTRegion result(begin, pos); + + pos = SkipDelimiters(pos); + + return result; +} + TDelimitersSplitWithoutTags::TIterator TDelimitersSplitWithoutTags::Iterator() const { - return TIterator(*this); -} - -/****************** TCharSplit ******************/ - + return TIterator(*this); +} + +/****************** TCharSplit ******************/ + TCharSplit::TCharSplit(const char* str, size_t length) : TSplitBase(str, length) -{ -} - +{ +} + TCharSplit::TCharSplit(const TString& s) : TSplitBase(s) -{ -} - +{ +} + TCharSplit::TIterator TCharSplit::Iterator() const { - return TIterator(*this); -} - + return TIterator(*this); +} + TSizeTRegion TCharSplit::Next(size_t& pos) const { - TSizeTRegion result(pos, pos + 1); - ++pos; - return result; -} - + TSizeTRegion result(pos, pos + 1); + ++pos; + return result; +} + size_t TCharSplit::Begin() const { - return 0; -} - -/****************** TCharSplitWithoutTags ******************/ - -TCharSplitWithoutTags::TCharSplitWithoutTags(const char* str, size_t length) - : TSplitBase(str, length) -{ -} - + return 0; +} + +/****************** TCharSplitWithoutTags ******************/ + +TCharSplitWithoutTags::TCharSplitWithoutTags(const char* str, size_t length) + : TSplitBase(str, length) +{ +} + TCharSplitWithoutTags::TCharSplitWithoutTags(const TString& s) - : TSplitBase(s) -{ -} - + : TSplitBase(s) +{ +} + size_t TCharSplitWithoutTags::SkipTag(size_t pos) const { Y_ASSERT('<' == Str[pos]); - while ((pos < Len) && ('>' != Str[pos])) - ++pos; - return pos + 1; -} - + while ((pos < Len) && ('>' != Str[pos])) + ++pos; + return pos + 1; +} + size_t TCharSplitWithoutTags::SkipDelimiters(size_t pos) const { while (true) { if (pos < Len) { - if ('<' != Str[pos]) - break; - else - pos = SkipTag(pos); + if ('<' != Str[pos]) + break; + else + pos = SkipTag(pos); } else - break; - } - return pos; -} - + break; + } + return pos; +} + size_t TCharSplitWithoutTags::Begin() const { - size_t pos = 0; - pos = SkipDelimiters(pos); - return pos; -} - + size_t pos = 0; + pos = SkipDelimiters(pos); + return pos; +} + TSizeTRegion TCharSplitWithoutTags::Next(size_t& pos) const { - size_t begin = pos++; - TSizeTRegion result(begin, pos); - - pos = SkipDelimiters(pos); - - return result; -} - + size_t begin = pos++; + TSizeTRegion result(begin, pos); + + pos = SkipDelimiters(pos); + + return result; +} + TCharSplitWithoutTags::TIterator TCharSplitWithoutTags::Iterator() const { - return TIterator(*this); -} - + return TIterator(*this); +} + TSubstringSplitDelimiter::TSubstringSplitDelimiter(const TString& s) - : Matcher(s) + : Matcher(s) , Len(s.size()) -{ -} - -/****************** TSubstringSplit ******************/ - +{ +} + +/****************** TSubstringSplit ******************/ + TSubstringSplit::TSubstringSplit(const char* str, size_t length, const TSubstringSplitDelimiter& delimiter) : TSplitBase(str, length) , Delimiter(delimiter) @@ -289,30 +289,30 @@ TSubstringSplit::TSubstringSplit(const char* str, size_t length, const TSubstrin } TSubstringSplit::TSubstringSplit(const TString& str, const TSubstringSplitDelimiter& delimiter) - : TSplitBase(str) - , Delimiter(delimiter) -{ -} - -TSubstringSplit::TIterator TSubstringSplit::Iterator() const { - return TIterator(*this); -} - -TSizeTRegion TSubstringSplit::Next(size_t& pos) const { - const char* begin = Str + pos; - const char* end = Str + Len; - const char* delim; - if (Delimiter.Matcher.SubStr(begin, end, delim)) { - TSizeTRegion result(pos, delim - begin + pos); - pos += delim - begin + Delimiter.Len; - return result; - } else { - TSizeTRegion result(pos, end - begin + pos); - pos += end - begin; - return result; - } -} - -size_t TSubstringSplit::Begin() const { - return 0; -} + : TSplitBase(str) + , Delimiter(delimiter) +{ +} + +TSubstringSplit::TIterator TSubstringSplit::Iterator() const { + return TIterator(*this); +} + +TSizeTRegion TSubstringSplit::Next(size_t& pos) const { + const char* begin = Str + pos; + const char* end = Str + Len; + const char* delim; + if (Delimiter.Matcher.SubStr(begin, end, delim)) { + TSizeTRegion result(pos, delim - begin + pos); + pos += delim - begin + Delimiter.Len; + return result; + } else { + TSizeTRegion result(pos, end - begin + pos); + pos += end - begin; + return result; + } +} + +size_t TSubstringSplit::Begin() const { + return 0; +} |