Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'search/v2/token_slice.hpp')
-rw-r--r--search/v2/token_slice.hpp67
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