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:
authorYuri Gorshenin <y@maps.me>2017-11-24 17:30:08 +0300
committermpimenov <mpimenov@users.noreply.github.com>2017-11-24 18:23:42 +0300
commitaa502b1c2df68af6a1f72b93665538e2a0c1f9f3 (patch)
tree2101ef54ab91fe93c3a0abba67040b81759e7c7f /indexer/trie_reader.hpp
parent7d115dac51abd085063ad12b2f009cb90dfe4003 (diff)
[search] Get rid of T-prefix.
Diffstat (limited to 'indexer/trie_reader.hpp')
-rw-r--r--indexer/trie_reader.hpp101
1 files changed, 55 insertions, 46 deletions
diff --git a/indexer/trie_reader.hpp b/indexer/trie_reader.hpp
index 230dd9b14c..d87aab5bd4 100644
--- a/indexer/trie_reader.hpp
+++ b/indexer/trie_reader.hpp
@@ -7,104 +7,113 @@
#include "base/assert.hpp"
#include "base/bits.hpp"
#include "base/macros.hpp"
+#include "base/stl_add.hpp"
+
+#include <cstddef>
+#include <cstdint>
+#include <memory>
namespace trie
{
-template <class TValueList, typename TSerializer>
-class LeafIterator0 : public Iterator<TValueList>
+template <class ValueList, typename Serializer>
+class LeafIterator0 final : public Iterator<ValueList>
{
public:
- using TValue = typename TValueList::TValue;
- using Iterator<TValueList>::m_valueList;
+ using Value = typename ValueList::Value;
+ using Iterator<ValueList>::m_values;
- template <class TReader>
- LeafIterator0(TReader const & reader, TSerializer const & serializer)
+ template <class Reader>
+ LeafIterator0(Reader const & reader, Serializer const & serializer)
{
- ReaderSource<TReader> src(reader);
- m_valueList.Deserialize(src, serializer);
- ASSERT_EQUAL(src.Size(), 0, ());
+ ReaderSource<Reader> source(reader);
+ m_values.Deserialize(source, serializer);
+ ASSERT_EQUAL(source.Size(), 0, ());
}
+ ~LeafIterator0() override = default;
+
// trie::Iterator overrides:
- unique_ptr<Iterator<TValueList>> Clone() const override
+ std::unique_ptr<Iterator<ValueList>> Clone() const override
{
- return make_unique<LeafIterator0<TValueList, TSerializer>>(*this);
+ return my::make_unique<LeafIterator0<ValueList, Serializer>>(*this);
}
- unique_ptr<Iterator<TValueList>> GoToEdge(size_t /* i */) const override
+ std::unique_ptr<Iterator<ValueList>> GoToEdge(size_t /* i */) const override
{
ASSERT(false, ());
return nullptr;
}
};
-template <typename TReader, typename TValueList, typename TSerializer>
-class Iterator0 : public Iterator<TValueList>
+template <typename Reader, typename ValueList, typename Serializer>
+class Iterator0 final : public Iterator<ValueList>
{
public:
- using TValue = typename TValueList::TValue;
- using Iterator<TValueList>::m_valueList;
- using Iterator<TValueList>::m_edge;
+ using Value = typename ValueList::Value;
+ using Iterator<ValueList>::m_values;
+ using Iterator<ValueList>::m_edges;
- Iterator0(TReader const & reader, TrieChar baseChar, TSerializer const & serializer)
+ Iterator0(Reader const & reader, TrieChar baseChar, Serializer const & serializer)
: m_reader(reader), m_serializer(serializer)
{
ParseNode(baseChar);
}
+ ~Iterator0() override = default;
+
// trie::Iterator overrides:
- unique_ptr<Iterator<TValueList>> Clone() const override
+ std::unique_ptr<Iterator<ValueList>> Clone() const override
{
- return make_unique<Iterator0<TReader, TValueList, TSerializer>>(*this);
+ return my::make_unique<Iterator0<Reader, ValueList, Serializer>>(*this);
}
- unique_ptr<Iterator<TValueList>> GoToEdge(size_t i) const override
+ std::unique_ptr<Iterator<ValueList>> GoToEdge(size_t i) const override
{
- ASSERT_LESS(i, this->m_edge.size(), ());
+ ASSERT_LESS(i, this->m_edges.size(), ());
uint32_t const offset = m_edgeInfo[i].m_offset;
uint32_t const size = m_edgeInfo[i + 1].m_offset - offset;
if (m_edgeInfo[i].m_isLeaf)
{
- return make_unique<LeafIterator0<TValueList, TSerializer>>(m_reader.SubReader(offset, size),
- m_serializer);
+ return my::make_unique<LeafIterator0<ValueList, Serializer>>(m_reader.SubReader(offset, size),
+ m_serializer);
}
- return make_unique<Iterator0<TReader, TValueList, TSerializer>>(
- m_reader.SubReader(offset, size), this->m_edge[i].m_label.back(), m_serializer);
+ return my::make_unique<Iterator0<Reader, ValueList, Serializer>>(
+ m_reader.SubReader(offset, size), this->m_edges[i].m_label.back(), m_serializer);
}
private:
void ParseNode(TrieChar baseChar)
{
- ReaderSource<TReader> src(m_reader);
+ ReaderSource<Reader> source(m_reader);
// [1: header]: [2: min(valueCount, 3)] [6: min(childCount, 63)]
- uint8_t const header = ReadPrimitiveFromSource<uint8_t>(src);
+ uint8_t const header = ReadPrimitiveFromSource<uint8_t>(source);
uint32_t valueCount = (header >> 6);
uint32_t childCount = (header & 63);
// [vu valueCount]: if valueCount in header == 3
if (valueCount == 3)
- valueCount = ReadVarUint<uint32_t>(src);
+ valueCount = ReadVarUint<uint32_t>(source);
// [vu childCount]: if childCount in header == 63
if (childCount == 63)
- childCount = ReadVarUint<uint32_t>(src);
+ childCount = ReadVarUint<uint32_t>(source);
// [valueList]
- m_valueList.Deserialize(src, valueCount, m_serializer);
+ m_values.Deserialize(source, valueCount, m_serializer);
// [childInfo] ... [childInfo]
- this->m_edge.resize(childCount);
+ this->m_edges.resize(childCount);
m_edgeInfo.resize(childCount + 1);
m_edgeInfo[0].m_offset = 0;
for (uint32_t i = 0; i < childCount; ++i)
{
- typename Iterator<TValueList>::Edge & e = this->m_edge[i];
+ auto & e = this->m_edges[i];
// [1: header]: [1: isLeaf] [1: isShortEdge] [6: (edgeChar0 - baseChar) or min(edgeLen-1, 63)]
- uint8_t const header = ReadPrimitiveFromSource<uint8_t>(src);
+ uint8_t const header = ReadPrimitiveFromSource<uint8_t>(source);
m_edgeInfo[i].m_isLeaf = ((header & 128) != 0);
if (header & 64)
e.m_label.push_back(baseChar + bits::ZigZagDecode(header & 63U));
@@ -113,24 +122,24 @@ private:
// [vu edgeLen-1]: if edgeLen-1 in header == 63
uint32_t edgeLen = (header & 63);
if (edgeLen == 63)
- edgeLen = ReadVarUint<uint32_t>(src);
+ edgeLen = ReadVarUint<uint32_t>(source);
edgeLen += 1;
// [vi edgeChar0 - baseChar] [vi edgeChar1 - edgeChar0] ... [vi edgeCharN - edgeCharN-1]
e.m_label.reserve(edgeLen);
for (uint32_t i = 0; i < edgeLen; ++i)
- e.m_label.push_back(baseChar += ReadVarInt<int32_t>(src));
+ e.m_label.push_back(baseChar += ReadVarInt<int32_t>(source));
}
// [child size]: if the child is not the last one
m_edgeInfo[i + 1].m_offset = m_edgeInfo[i].m_offset;
if (i != childCount - 1)
- m_edgeInfo[i + 1].m_offset += ReadVarUint<uint32_t>(src);
+ m_edgeInfo[i + 1].m_offset += ReadVarUint<uint32_t>(source);
baseChar = e.m_label[0];
}
- uint32_t const currentOffset = static_cast<uint32_t>(src.Pos());
+ uint32_t const currentOffset = static_cast<uint32_t>(source.Pos());
for (size_t i = 0; i < m_edgeInfo.size(); ++i)
m_edgeInfo[i].m_offset += currentOffset;
m_edgeInfo.back().m_offset = static_cast<uint32_t>(m_reader.Size());
@@ -138,21 +147,21 @@ private:
struct EdgeInfo
{
- uint32_t m_offset;
- bool m_isLeaf;
+ uint32_t m_offset = 0;
+ bool m_isLeaf = false;
};
buffer_vector<EdgeInfo, 9> m_edgeInfo;
- TReader m_reader;
- TSerializer m_serializer;
+ Reader m_reader;
+ Serializer m_serializer;
};
// Returns iterator to the root of the trie.
-template <class TReader, class TValueList, class TSerializer>
-unique_ptr<Iterator<TValueList>> ReadTrie(TReader const & reader, TSerializer const & serializer)
+template <class Reader, class ValueList, class Serializer>
+std::unique_ptr<Iterator<ValueList>> ReadTrie(Reader const & reader, Serializer const & serializer)
{
- return make_unique<Iterator0<TReader, TValueList, TSerializer>>(reader, kDefaultChar, serializer);
+ return my::make_unique<Iterator0<Reader, ValueList, Serializer>>(reader, kDefaultChar,
+ serializer);
}
-
} // namespace trie