diff options
Diffstat (limited to 'search/v2/token_slice.hpp')
-rw-r--r-- | search/v2/token_slice.hpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/search/v2/token_slice.hpp b/search/v2/token_slice.hpp new file mode 100644 index 0000000000..7b9553e2f4 --- /dev/null +++ b/search/v2/token_slice.hpp @@ -0,0 +1,67 @@ +#pragma once + +#include "search/search_query_params.hpp" + +#include "base/assert.hpp" + +#include "std/cstdint.hpp" +#include "std/vector.hpp" + +namespace search +{ +namespace v2 +{ +class TokenSlice +{ +public: + TokenSlice(SearchQueryParams const & params, size_t startToken, size_t endToken); + + inline SearchQueryParams::TSynonymsVector const & Get(size_t i) const + { + ASSERT_LESS(i, Size(), ()); + return m_params.GetTokens(m_offset + i); + } + + inline size_t Size() const { return m_size; } + + inline bool Empty() const { return Size() == 0; } + + inline bool IsPrefix(size_t i) const + { + ASSERT_LESS(i, Size(), ()); + return m_offset + i == m_params.m_tokens.size(); + } + +private: + SearchQueryParams const & m_params; + size_t const m_offset; + size_t const m_size; +}; + +class TokenSliceNoCategories +{ +public: + TokenSliceNoCategories(SearchQueryParams const & params, size_t startToken, size_t endToken); + + inline SearchQueryParams::TSynonymsVector const & Get(size_t i) const + { + ASSERT_LESS(i, Size(), ()); + return m_params.GetTokens(m_indexes[i]); + } + + inline size_t Size() const { return m_indexes.size(); } + + inline bool Empty() const { return Size() == 0; } + + inline bool IsPrefix(size_t i) const + { + ASSERT_LESS(i, Size(), ()); + return m_indexes[i] == m_params.m_tokens.size(); + } + +private: + SearchQueryParams const & m_params; + vector<size_t> m_indexes; +}; +} // namespace v2 +} // namespace search |