MCPcopy Create free account
hub / github.com/catboost/catboost / TCharFilter

Class TCharFilter

library/cpp/token/charfilter.h:43–219  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41//! @note the checker class must have the default constructor and @c Check member function
42template <typename TChecker>
43class TCharFilter {
44 TWideToken Token;
45 TCharTemp Buffer;
46 TChecker Checker;
47
48private:
49 //! copies already verified data - characters and subtokens
50 wchar16* CopyData(const TWideToken& token, size_t n, size_t t, wchar16* const data) {
51 std::char_traits<wchar16>::copy(data, token.Token, n); // without current character
52
53 Token.SubTokens.clear();
54 for (size_t i = 0; i < t; ++i) {
55 Token.SubTokens.push_back(token.SubTokens[i]);
56 }
57
58 return data + n;
59 }
60
61public:
62 explicit TCharFilter(size_t bufSize)
63 : Buffer(bufSize)
64 {
65 }
66
67 //! removes accent characters from token
68 //! @return if there is no any accent character the function returns the source token
69 //! otherwise the function returns the internal token
70 const TWideToken& Filter(const TWideToken& token) {
71 if (token.SubTokens.empty())
72 return FilterTokenNoSubtokens(token);
73 else
74 return FilterTokenWithSubtokens(token);
75 }
76
77 static bool HasChars(const TWideToken& token) {
78 TChecker checker;
79 const TTokenStructure& subtokens = token.SubTokens;
80 const wchar16* const s = token.Token; // source character sequence
81 size_t i = 0; // the index of the current source character
82 size_t t = 0; // the index of the next source subtoken
83
84 while (i < token.Leng) {
85 if (t < subtokens.size()) {
86 if (i >= subtokens[t].Pos && i < subtokens[t].EndPos()) {
87 // inside a token
88 if (checker.Check(s[i])) {
89 return true;
90 }
91 }
92
93 ++i;
94
95 if (i >= subtokens[t].EndPos()) {
96 ++t;
97 }
98 } else {
99 break;
100 }

Callers

nothing calls this directly

Calls 9

CopyDataFunction · 0.85
EndPosMethod · 0.80
copyFunction · 0.50
emptyMethod · 0.45
backMethod · 0.45
sizeMethod · 0.45
CheckMethod · 0.45
DataMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected