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

token_slice.cpp « search - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 33ab649498520768dd454f8e1c8955abfb7fd36b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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.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