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/token_slice.cpp')
-rw-r--r--search/token_slice.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/search/token_slice.cpp b/search/token_slice.cpp
new file mode 100644
index 0000000000..6705b884fe
--- /dev/null
+++ b/search/token_slice.cpp
@@ -0,0 +1,66 @@
+#include "search/token_slice.hpp"
+
+#include "std/sstream.hpp"
+
+namespace search
+{
+namespace
+{
+template <typename TSlice>
+string SliceToString(string const & name, TSlice const & slice)
+{
+ ostringstream os;
+ os << name << " [";
+ for (size_t i = 0; i < slice.Size(); ++i)
+ {
+ os << DebugPrint(slice.Get(i));
+ if (i + 1 != slice.Size())
+ os << ", ";
+ }
+ os << "]";
+ return os.str();
+}
+} // namespace
+
+TokenSlice::TokenSlice(QueryParams const & params, size_t startToken, size_t endToken)
+ : m_params(params), m_offset(startToken), m_size(endToken - startToken)
+{
+ ASSERT_LESS_OR_EQUAL(startToken, endToken, ());
+}
+
+bool TokenSlice::IsPrefix(size_t i) const
+{
+ ASSERT_LESS(i, Size(), ());
+ return m_offset + i == m_params.m_tokens.size();
+}
+
+bool TokenSlice::IsLast(size_t i) const
+{
+ ASSERT_LESS(i, Size(), ());
+ if (m_params.m_prefixTokens.empty())
+ return m_offset + i + 1 == m_params.m_tokens.size();
+ return m_offset + i == m_params.m_tokens.size();
+}
+
+TokenSliceNoCategories::TokenSliceNoCategories(QueryParams const & params, size_t startToken,
+ size_t endToken)
+ : m_params(params)
+{
+ ASSERT_LESS_OR_EQUAL(startToken, endToken, ());
+
+ m_indexes.reserve(endToken - startToken);
+ for (size_t i = startToken; i < endToken; ++i)
+ {
+ if (!m_params.m_isCategorySynonym[i])
+ m_indexes.push_back(i);
+ }
+}
+
+string DebugPrint(TokenSlice const & slice) { return SliceToString("TokenSlice", slice); }
+
+string DebugPrint(TokenSliceNoCategories const & slice)
+{
+ return SliceToString("TokenSliceNoCategories", slice);
+}
+
+} // namespace search