From aa502b1c2df68af6a1f72b93665538e2a0c1f9f3 Mon Sep 17 00:00:00 2001 From: Yuri Gorshenin Date: Fri, 24 Nov 2017 17:30:08 +0300 Subject: [PATCH] [search] Get rid of T-prefix. --- generator/search_index_builder.cpp | 10 +-- indexer/indexer_tests/trie_test.cpp | 88 ++++++++++---------- indexer/trie.hpp | 43 +++++----- indexer/trie_builder.hpp | 71 ++++++++-------- indexer/trie_reader.hpp | 101 ++++++++++++---------- search/feature_offset_match.hpp | 24 +++--- search/search_index_values.hpp | 125 ++++++++++++++-------------- 7 files changed, 230 insertions(+), 232 deletions(-) diff --git a/generator/search_index_builder.cpp b/generator/search_index_builder.cpp index feebcbed86..d5829e657f 100644 --- a/generator/search_index_builder.cpp +++ b/generator/search_index_builder.cpp @@ -466,8 +466,8 @@ bool BuildSearchIndexFromDataFile(string const & filename, bool forceRebuild) void BuildSearchIndex(FilesContainerR & container, Writer & indexWriter) { - using TKey = strings::UniString; - using TValue = FeatureIndexValue; + using Key = strings::UniString; + using Value = FeatureIndexValue; Platform & platform = GetPlatform(); @@ -478,15 +478,15 @@ void BuildSearchIndex(FilesContainerR & container, Writer & indexWriter) FeaturesVectorTest features(container); auto codingParams = trie::GetCodingParams(features.GetHeader().GetDefCodingParams()); - SingleValueSerializer serializer(codingParams); + SingleValueSerializer serializer(codingParams); - vector> searchIndexKeyValuePairs; + vector> searchIndexKeyValuePairs; AddFeatureNameIndexPairs(features, categoriesHolder, searchIndexKeyValuePairs); sort(searchIndexKeyValuePairs.begin(), searchIndexKeyValuePairs.end()); LOG(LINFO, ("End sorting strings:", timer.ElapsedSeconds())); - trie::Build, SingleValueSerializer>( + trie::Build, SingleValueSerializer>( indexWriter, serializer, searchIndexKeyValuePairs); LOG(LINFO, ("End building search index, elapsed seconds:", timer.ElapsedSeconds())); diff --git a/indexer/indexer_tests/trie_test.cpp b/indexer/indexer_tests/trie_test.cpp index 495e0d6762..2180dfc202 100644 --- a/indexer/indexer_tests/trie_test.cpp +++ b/indexer/indexer_tests/trie_test.cpp @@ -23,10 +23,6 @@ namespace { struct ChildNodeInfo { - bool m_isLeaf; - uint32_t m_size; - vector m_edge; - ChildNodeInfo(bool isLeaf, uint32_t size, char const * edge) : m_isLeaf(isLeaf), m_size(size) { while (*edge) @@ -37,76 +33,78 @@ struct ChildNodeInfo bool IsLeaf() const { return m_isLeaf; } uint32_t const * GetEdge() const { return &m_edge[0]; } size_t GetEdgeSize() const { return m_edge.size(); } + + bool m_isLeaf; + uint32_t m_size; + vector m_edge; }; // The SingleValueSerializer and ValueList classes are similar to // those in indexer/search_index_values.hpp. -template +template class SingleValueSerializer { public: #if !defined(OMIM_OS_LINUX) - static_assert(std::is_trivially_copyable::value, ""); + static_assert(std::is_trivially_copyable::value, ""); #endif - template - void Serialize(TWriter & writer, TPrimitive const & v) const + template + void Serialize(Sink & sink, Primitive const & v) const { - WriteToSink(writer, v); + WriteToSink(sink, v); } }; -template +template class ValueList { public: - using TValue = TPrimitive; - using TSerializer = SingleValueSerializer; + using Value = Primitive; + using Serializer = SingleValueSerializer; #if !defined(OMIM_OS_LINUX) - static_assert(std::is_trivially_copyable::value, ""); + static_assert(std::is_trivially_copyable::value, ""); #endif - ValueList() = default; - - void Init(vector const & values) { m_values = values; } + void Init(vector const & values) { m_values = values; } size_t Size() const { return m_values.size(); } bool IsEmpty() const { return m_values.empty(); } - template - void Serialize(TSink & sink, TSerializer const & /* serializer */) const + template + void Serialize(Sink & sink, Serializer const & /* serializer */) const { for (auto const & value : m_values) WriteToSink(sink, value); } - template - void Deserialize(TSource & src, uint32_t valueCount, TSerializer const & /* serializer */) + template + void Deserialize(Source & src, uint32_t valueCount, Serializer const & /* serializer */) { m_values.resize(valueCount); for (size_t i = 0; i < valueCount; ++i) - m_values[i] = ReadPrimitiveFromSource(src); + m_values[i] = ReadPrimitiveFromSource(src); } - template - void Deserialize(TSource & src, TSerializer const & /* serializer */) + template + void Deserialize(Source & source, Serializer const & /* serializer */) { m_values.clear(); - while (src.Size() > 0) - m_values.emplace_back(ReadPrimitiveFromSource(src)); + while (source.Size() > 0) + m_values.emplace_back(ReadPrimitiveFromSource(source)); } - template - void ForEach(TF && f) const + template + void ForEach(ToDo && toDo) const { for (auto const & value : m_values) - f(value); + toDo(value); } private: - vector m_values; + vector m_values; }; } // namespace @@ -158,18 +156,18 @@ UNIT_TEST(TrieBuilder_WriteNode_Smoke) UNIT_TEST(TrieBuilder_Build) { - int const base = 3; - int const maxLen = 3; + int const kBase = 3; + int const kMaxLen = 3; - vector possibleStrings(1, string()); - for (int len = 1; len <= maxLen; ++len) + vector possibleStrings(1, string{}); + for (int len = 1; len <= kMaxLen; ++len) { - for (int i = 0, p = static_cast(pow((double)base, len)); i < p; ++i) + for (int i = 0, p = static_cast(pow(double{kBase}, len)); i < p; ++i) { string s(len, 'A'); int t = i; - for (int l = len - 1; l >= 0; --l, t /= base) - s[l] += (t % base); + for (int l = len - 1; l >= 0; --l, t /= kBase) + s[l] += (t % kBase); possibleStrings.push_back(s); } } @@ -183,14 +181,14 @@ UNIT_TEST(TrieBuilder_Build) { for (int i2 = i1; i2 < count; ++i2) { - using TKey = buffer_vector; - using TValue = uint32_t; - using TKeyValuePair = pair; + using Key = buffer_vector; + using Value = uint32_t; + using KeyValuePair = pair; - vector v; + vector v; auto makeKey = [](string const & s) { - return TKey(s.begin(), s.end()); + return Key(s.begin(), s.end()); }; if (i0 >= 0) v.emplace_back(makeKey(possibleStrings[i0]), i0); @@ -205,18 +203,18 @@ UNIT_TEST(TrieBuilder_Build) vector buf; PushBackByteSink> sink(buf); SingleValueSerializer serializer; - trie::Build>, TKey, ValueList, + trie::Build>, Key, ValueList, SingleValueSerializer>(sink, serializer, v); reverse(buf.begin(), buf.end()); MemReader memReader = MemReader(&buf[0], buf.size()); auto const root = trie::ReadTrie>(memReader, serializer); - vector res; - auto addKeyValuePair = [&res](TKey const & k, TValue const & v) + vector res; + auto addKeyValuePair = [&res](Key const & k, Value const & v) { res.emplace_back(k, v); }; - trie::ForEachRef(*root, addKeyValuePair, TKey()); + trie::ForEachRef(*root, addKeyValuePair, Key{}); sort(res.begin(), res.end()); TEST_EQUAL(v, res, ()); } diff --git a/indexer/trie.hpp b/indexer/trie.hpp index 0f5405066c..eebdd0929a 100644 --- a/indexer/trie.hpp +++ b/indexer/trie.hpp @@ -4,7 +4,8 @@ #include "base/base.hpp" #include "base/buffer_vector.hpp" -#include "std/unique_ptr.hpp" +#include +#include namespace trie { @@ -15,41 +16,37 @@ using TrieChar = uint32_t; // However 0 is used because the first byte is actually language id. uint32_t constexpr kDefaultChar = 0; -template -class Iterator +template +struct Iterator { - -public: - using TValue = typename TValueList::TValue; + using Value = typename ValueList::Value; struct Edge { - using TEdgeLabel = buffer_vector; - TEdgeLabel m_label; + using EdgeLabel = buffer_vector; + EdgeLabel m_label; }; - buffer_vector m_edge; - TValueList m_valueList; - virtual ~Iterator() = default; - virtual unique_ptr> Clone() const = 0; - virtual unique_ptr> GoToEdge(size_t i) const = 0; + virtual std::unique_ptr> Clone() const = 0; + virtual std::unique_ptr> GoToEdge(size_t i) const = 0; + + buffer_vector m_edges; + ValueList m_values; }; -template -void ForEachRef(Iterator const & it, TF && f, TString const & s) +template +void ForEachRef(Iterator const & it, ToDo && toDo, String const & s) { - it.m_valueList.ForEach([&f, &s](typename TValueList::TValue const & value) - { - f(s, value); - }); - for (size_t i = 0; i < it.m_edge.size(); ++i) + it.m_values.ForEach([&toDo, &s](typename ValueList::Value const & value) { toDo(s, value); }); + + for (size_t i = 0; i < it.m_edges.size(); ++i) { - TString s1(s); - s1.insert(s1.end(), it.m_edge[i].m_label.begin(), it.m_edge[i].m_label.end()); + String s1(s); + s1.insert(s1.end(), it.m_edges[i].m_label.begin(), it.m_edges[i].m_label.end()); auto nextIt = it.GoToEdge(i); - ForEachRef(*nextIt, f, s1); + ForEachRef(*nextIt, toDo, s1); } } } // namespace trie diff --git a/indexer/trie_builder.hpp b/indexer/trie_builder.hpp index 02dfcf3737..649be90a70 100644 --- a/indexer/trie_builder.hpp +++ b/indexer/trie_builder.hpp @@ -44,9 +44,9 @@ namespace trie { -template -void WriteNode(TSink & sink, TSerializer const & serializer, TrieChar baseChar, - TValueList const & valueList, TChildIter const begChild, TChildIter const endChild, +template +void WriteNode(Sink & sink, Serializer const & serializer, TrieChar baseChar, + ValueList const & valueList, ChildIter const begChild, ChildIter const endChild, bool isRoot = false) { uint32_t const valueCount = base::asserted_cast(valueList.Size()); @@ -74,7 +74,7 @@ void WriteNode(TSink & sink, TSerializer const & serializer, TrieChar baseChar, if (childCount >= 63) WriteVarUint(sink, childCount); valueList.Serialize(sink, serializer); - for (TChildIter it = begChild; it != endChild; /*++it*/) + for (ChildIter it = begChild; it != endChild; /*++it*/) { uint8_t header = (it->IsLeaf() ? 128 : 0); TrieChar const * const edge = it->GetEdge(); @@ -131,11 +131,11 @@ struct ChildInfo size_t GetEdgeSize() const { return m_edge.size(); } }; -template +template struct NodeInfo { - uint64_t m_begPos; - TrieChar m_char; + uint64_t m_begPos = 0; + TrieChar m_char = 0; vector m_children; // This is ugly but will do until we rename ValueList. @@ -151,15 +151,12 @@ struct NodeInfo // need to update a node's ValueList until the node is finalized // this vector is needed here. It is better to leave it here // than to expose it in ValueList. - vector m_temporaryValueList; - TValueList m_valueList; - bool m_mayAppend; + vector m_temporaryValueList; + ValueList m_valueList = {}; + bool m_mayAppend = true; - NodeInfo() : m_begPos(0), m_char(0), m_valueList(TValueList()), m_mayAppend(true) {} - NodeInfo(uint64_t pos, TrieChar trieChar) - : m_begPos(pos), m_char(trieChar), m_valueList(TValueList()), m_mayAppend(true) - { - } + NodeInfo() = default; + NodeInfo(uint64_t pos, TrieChar trieChar) : m_begPos(pos), m_char(trieChar) {} // It is finalized in the sense that no more appends are possible // so it is a fine moment to initialize the underlying ValueList. @@ -170,13 +167,13 @@ struct NodeInfo } }; -template -void WriteNodeReverse(TSink & sink, TSerializer const & serializer, TrieChar baseChar, - NodeInfo & node, bool isRoot = false) +template +void WriteNodeReverse(Sink & sink, Serializer const & serializer, TrieChar baseChar, + NodeInfo & node, bool isRoot = false) { - using TOutStorage = buffer_vector; - TOutStorage out; - PushBackByteSink outSink(out); + using OutStorage = buffer_vector; + OutStorage out; + PushBackByteSink outSink(out); node.FinalizeValueList(); WriteNode(outSink, serializer, baseChar, node.m_valueList, node.m_children.rbegin(), node.m_children.rend(), isRoot); @@ -184,20 +181,19 @@ void WriteNodeReverse(TSink & sink, TSerializer const & serializer, TrieChar bas sink.Write(out.data(), out.size()); } -template -void PopNodes(TSink & sink, TSerializer const & serializer, TNodes & nodes, size_t nodesToPop) +template +void PopNodes(Sink & sink, Serializer const & serializer, Nodes & nodes, size_t nodesToPop) { - using TNodeInfo = typename TNodes::value_type; ASSERT_GREATER(nodes.size(), nodesToPop, ()); for (; nodesToPop > 0; --nodesToPop) { - TNodeInfo & node = nodes.back(); - TNodeInfo & prevNode = nodes[nodes.size() - 2]; + auto & node = nodes.back(); + auto & prevNode = nodes[nodes.size() - 2]; if (node.m_temporaryValueList.empty() && node.m_children.size() <= 1) { ASSERT_EQUAL(node.m_children.size(), 1, ()); - ChildInfo & child = node.m_children[0]; + auto & child = node.m_children[0]; prevNode.m_children.emplace_back(child.m_isLeaf, child.m_size, node.m_char); auto & prevChild = prevNode.m_children.back(); prevChild.m_edge.insert(prevChild.m_edge.end(), child.m_edge.begin(), child.m_edge.end()); @@ -213,8 +209,8 @@ void PopNodes(TSink & sink, TSerializer const & serializer, TNodes & nodes, size } } -template -void AppendValue(TNodeInfo & node, TValue const & value) +template +void AppendValue(NodeInfo & node, Value const & value) { // External-memory trie adds pairs in a sorted // order so the values are supposed to be accumulated in the @@ -231,18 +227,18 @@ void AppendValue(TNodeInfo & node, TValue const & value) LOG(LERROR, ("Cannot append to a finalized value list.")); } -template -void Build(TSink & sink, TSerializer const & serializer, - vector> const & data) +template +void Build(Sink & sink, Serializer const & serializer, + vector> const & data) { - using TValue = typename TValueList::TValue; - using TNodeInfo = NodeInfo; + using Value = typename ValueList::Value; + using NodeInfo = NodeInfo; - vector nodes; + vector nodes; nodes.emplace_back(sink.Pos(), kDefaultChar); - TKey prevKey; - pair prevE; // e for "element". + Key prevKey; + pair prevE; // e for "element". for (auto it = data.begin(); it != data.end(); ++it) { @@ -273,5 +269,4 @@ void Build(TSink & sink, TSerializer const & serializer, // Write the root. WriteNodeReverse(sink, serializer, kDefaultChar /* baseChar */, nodes.back(), true /* isRoot */); } - } // namespace trie 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 +#include +#include namespace trie { -template -class LeafIterator0 : public Iterator +template +class LeafIterator0 final : public Iterator { public: - using TValue = typename TValueList::TValue; - using Iterator::m_valueList; + using Value = typename ValueList::Value; + using Iterator::m_values; - template - LeafIterator0(TReader const & reader, TSerializer const & serializer) + template + LeafIterator0(Reader const & reader, Serializer const & serializer) { - ReaderSource src(reader); - m_valueList.Deserialize(src, serializer); - ASSERT_EQUAL(src.Size(), 0, ()); + ReaderSource source(reader); + m_values.Deserialize(source, serializer); + ASSERT_EQUAL(source.Size(), 0, ()); } + ~LeafIterator0() override = default; + // trie::Iterator overrides: - unique_ptr> Clone() const override + std::unique_ptr> Clone() const override { - return make_unique>(*this); + return my::make_unique>(*this); } - unique_ptr> GoToEdge(size_t /* i */) const override + std::unique_ptr> GoToEdge(size_t /* i */) const override { ASSERT(false, ()); return nullptr; } }; -template -class Iterator0 : public Iterator +template +class Iterator0 final : public Iterator { public: - using TValue = typename TValueList::TValue; - using Iterator::m_valueList; - using Iterator::m_edge; + using Value = typename ValueList::Value; + using Iterator::m_values; + using Iterator::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> Clone() const override + std::unique_ptr> Clone() const override { - return make_unique>(*this); + return my::make_unique>(*this); } - unique_ptr> GoToEdge(size_t i) const override + std::unique_ptr> 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>(m_reader.SubReader(offset, size), - m_serializer); + return my::make_unique>(m_reader.SubReader(offset, size), + m_serializer); } - return make_unique>( - m_reader.SubReader(offset, size), this->m_edge[i].m_label.back(), m_serializer); + return my::make_unique>( + m_reader.SubReader(offset, size), this->m_edges[i].m_label.back(), m_serializer); } private: void ParseNode(TrieChar baseChar) { - ReaderSource src(m_reader); + ReaderSource source(m_reader); // [1: header]: [2: min(valueCount, 3)] [6: min(childCount, 63)] - uint8_t const header = ReadPrimitiveFromSource(src); + uint8_t const header = ReadPrimitiveFromSource(source); uint32_t valueCount = (header >> 6); uint32_t childCount = (header & 63); // [vu valueCount]: if valueCount in header == 3 if (valueCount == 3) - valueCount = ReadVarUint(src); + valueCount = ReadVarUint(source); // [vu childCount]: if childCount in header == 63 if (childCount == 63) - childCount = ReadVarUint(src); + childCount = ReadVarUint(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::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(src); + uint8_t const header = ReadPrimitiveFromSource(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(src); + edgeLen = ReadVarUint(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(src)); + e.m_label.push_back(baseChar += ReadVarInt(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(src); + m_edgeInfo[i + 1].m_offset += ReadVarUint(source); baseChar = e.m_label[0]; } - uint32_t const currentOffset = static_cast(src.Pos()); + uint32_t const currentOffset = static_cast(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(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 m_edgeInfo; - TReader m_reader; - TSerializer m_serializer; + Reader m_reader; + Serializer m_serializer; }; // Returns iterator to the root of the trie. -template -unique_ptr> ReadTrie(TReader const & reader, TSerializer const & serializer) +template +std::unique_ptr> ReadTrie(Reader const & reader, Serializer const & serializer) { - return make_unique>(reader, kDefaultChar, serializer); + return my::make_unique>(reader, kDefaultChar, + serializer); } - } // namespace trie diff --git a/search/feature_offset_match.hpp b/search/feature_offset_match.hpp index 53dacff6ca..4c709d1cb5 100644 --- a/search/feature_offset_match.hpp +++ b/search/feature_offset_match.hpp @@ -32,12 +32,12 @@ namespace template bool FindLangIndex(trie::Iterator> const & trieRoot, uint8_t lang, uint32_t & langIx) { - ASSERT_LESS(trieRoot.m_edge.size(), numeric_limits::max(), ()); + ASSERT_LESS(trieRoot.m_edges.size(), numeric_limits::max(), ()); - uint32_t const numLangs = static_cast(trieRoot.m_edge.size()); + uint32_t const numLangs = static_cast(trieRoot.m_edges.size()); for (uint32_t i = 0; i < numLangs; ++i) { - auto const & edge = trieRoot.m_edge[i].m_label; + auto const & edge = trieRoot.m_edges[i].m_label; ASSERT_GREATER_OR_EQUAL(edge.size(), 1, ()); if (edge[0] == lang) { @@ -80,14 +80,14 @@ bool MatchInTrie(trie::Iterator> const & trieRoot, if (dfaIt.Accepts()) { - trieIt->m_valueList.ForEach(toDo); + trieIt->m_values.ForEach(toDo); found = true; } - size_t const numEdges = trieIt->m_edge.size(); + size_t const numEdges = trieIt->m_edges.size(); for (size_t i = 0; i < numEdges; ++i) { - auto const & edge = trieIt->m_edge[i]; + auto const & edge = trieIt->m_edges[i]; auto curIt = dfaIt; strings::DFAMove(curIt, edge.m_label.begin(), edge.m_label.end()); @@ -164,7 +164,7 @@ struct TrieRootPrefix strings::UniChar const * m_prefix; size_t m_prefixSize; - TrieRootPrefix(Iterator const & root, typename Iterator::Edge::TEdgeLabel const & edge) + TrieRootPrefix(Iterator const & root, typename Iterator::Edge::EdgeLabel const & edge) : m_root(root) { if (edge.size() == 1) @@ -242,7 +242,7 @@ bool MatchCategoriesInTrie(SearchTrieRequest const & request, if (!impl::FindLangIndex(trieRoot, search::kCategoriesLang, langIx)) return false; - auto const & edge = trieRoot.m_edge[langIx].m_label; + auto const & edge = trieRoot.m_edges[langIx].m_label; ASSERT_GREATER_OR_EQUAL(edge.size(), 1, ()); auto const catRoot = trieRoot.GoToEdge(langIx); @@ -257,12 +257,12 @@ template void ForEachLangPrefix(SearchTrieRequest const & request, trie::Iterator> const & trieRoot, ToDo && toDo) { - ASSERT_LESS(trieRoot.m_edge.size(), numeric_limits::max(), ()); + ASSERT_LESS(trieRoot.m_edges.size(), numeric_limits::max(), ()); - uint32_t const numLangs = static_cast(trieRoot.m_edge.size()); + uint32_t const numLangs = static_cast(trieRoot.m_edges.size()); for (uint32_t langIx = 0; langIx < numLangs; ++langIx) { - auto const & edge = trieRoot.m_edge[langIx].m_label; + auto const & edge = trieRoot.m_edges[langIx].m_label; ASSERT_GREATER_OR_EQUAL(edge.size(), 1, ()); int8_t const lang = static_cast(edge[0]); if (edge[0] < search::kCategoriesLang && request.IsLangExist(lang)) @@ -309,7 +309,7 @@ void MatchPostcodesInTrie(TokenSlice const & slice, if (!impl::FindLangIndex(trieRoot, search::kPostcodesLang, langIx)) return; - auto const & edge = trieRoot.m_edge[langIx].m_label; + auto const & edge = trieRoot.m_edges[langIx].m_label; auto const postcodesRoot = trieRoot.GoToEdge(langIx); impl::OffsetIntersector intersector(filter); diff --git a/search/search_index_values.hpp b/search/search_index_values.hpp index 68e02dec32..4605774abb 100644 --- a/search/search_index_values.hpp +++ b/search/search_index_values.hpp @@ -10,9 +10,10 @@ #include "base/assert.hpp" #include "base/logging.hpp" -#include "std/algorithm.hpp" -#include "std/unique_ptr.hpp" -#include "std/utility.hpp" +#include +#include +#include +#include /// Following classes are supposed to be used with StringsFile. They /// allow to write/read them, compare or serialize to an in-memory @@ -62,38 +63,38 @@ struct FeatureWithRankAndCenter uint8_t m_rank; // Rank of the feature. }; -template +template class SingleValueSerializer; template <> class SingleValueSerializer { public: - using TValue = FeatureWithRankAndCenter; + using Value = FeatureWithRankAndCenter; SingleValueSerializer(serial::CodingParams const & codingParams) : m_codingParams(codingParams) {} - template - void Serialize(TWriter & writer, TValue const & v) const + template + void Serialize(Sink & sink, Value const & v) const { - serial::SavePoint(writer, v.m_pt, m_codingParams); - WriteToSink(writer, v.m_featureId); - WriteToSink(writer, v.m_rank); + serial::SavePoint(sink, v.m_pt, m_codingParams); + WriteToSink(sink, v.m_featureId); + WriteToSink(sink, v.m_rank); } - template - void Deserialize(TReader & reader, TValue & v) const + template + void Deserialize(Reader & reader, Value & v) const { - ReaderSource src(reader); - DeserializeFromSource(src, v); + ReaderSource source(reader); + DeserializeFromSource(source, v); } - template - void DeserializeFromSource(TSource & src, TValue & v) const + template + void DeserializeFromSource(Source & source, Value & v) const { - v.m_pt = serial::LoadPoint(src, m_codingParams); - v.m_featureId = ReadPrimitiveFromSource(src); - v.m_rank = ReadPrimitiveFromSource(src); + v.m_pt = serial::LoadPoint(source, m_codingParams); + v.m_featureId = ReadPrimitiveFromSource(source); + v.m_rank = ReadPrimitiveFromSource(source); } private: @@ -104,7 +105,7 @@ template <> class SingleValueSerializer { public: - using TValue = FeatureIndexValue; + using Value = FeatureIndexValue; SingleValueSerializer() = default; @@ -113,23 +114,23 @@ public: // The serialization and deserialization is needed for StringsFile. // Use ValueList for group serialization in CBVs. - template - void Serialize(TWriter & writer, TValue const & v) const + template + void Serialize(Sink & sink, Value const & v) const { - WriteToSink(writer, v.m_featureId); + WriteToSink(sink, v.m_featureId); } - template - void Deserialize(TReader & reader, TValue & v) const + template + void Deserialize(Reader & reader, Value & v) const { - ReaderSource src(reader); - DeserializeFromSource(src, v); + ReaderSource source(reader); + DeserializeFromSource(source, v); } - template - void DeserializeFromSource(TSource & src, TValue & v) const + template + void DeserializeFromSource(Source & source, Value & v) const { - v.m_featureId = ReadPrimitiveFromSource(src); + v.m_featureId = ReadPrimitiveFromSource(source); } }; @@ -144,7 +145,7 @@ template <> class ValueList { public: - using TValue = FeatureIndexValue; + using Value = FeatureIndexValue; ValueList() = default; @@ -154,9 +155,9 @@ public: m_cbv = o.m_cbv->Clone(); } - void Init(vector const & values) + void Init(std::vector const & values) { - vector ids(values.size()); + std::vector ids(values.size()); for (size_t i = 0; i < ids.size(); ++i) ids[i] = values[i].m_featureId; m_cbv = coding::CompressedBitVectorBuilder::FromBitPositions(move(ids)); @@ -172,12 +173,12 @@ public: bool IsEmpty() const { return Size() == 0; } - template - void Serialize(TSink & sink, SingleValueSerializer const & /* serializer */) const + template + void Serialize(Sink & sink, SingleValueSerializer const & /* serializer */) const { if (IsEmpty()) return; - vector buf; + std::vector buf; MemWriter writer(buf); m_cbv->Serialize(writer); sink.Write(buf.data(), buf.size()); @@ -191,9 +192,9 @@ public: // read each FeatureWithRankAndCenter one by one. // A better approach is to make Serialize/Deserialize responsible for // every part of serialization and as such it should not need valueCount. - template - void Deserialize(TSource & src, uint32_t valueCount, - SingleValueSerializer const & /* serializer */) + template + void Deserialize(Source & src, uint32_t valueCount, + SingleValueSerializer const & /* serializer */) { if (valueCount > 0) m_cbv = coding::CompressedBitVectorBuilder::DeserializeFromSource(src); @@ -201,8 +202,8 @@ public: m_cbv.reset(); } - template - void Deserialize(TSource & src, SingleValueSerializer const & /* serializer */) + template + void Deserialize(Source & src, SingleValueSerializer const & /* serializer */) { if (src.Size() > 0) m_cbv = coding::CompressedBitVectorBuilder::DeserializeFromSource(src); @@ -210,19 +211,17 @@ public: m_cbv.reset(); } - template - void ForEach(TF && f) const + template + void ForEach(ToDo && toDo) const { if (IsEmpty()) return; - coding::CompressedBitVectorEnumerator::ForEach(*m_cbv, [&f](uint64_t const bitPosition) - { - f(TValue(bitPosition)); - }); + coding::CompressedBitVectorEnumerator::ForEach( + *m_cbv, [&toDo](uint64_t const bitPosition) { toDo(Value(bitPosition)); }); } private: - unique_ptr m_cbv; + std::unique_ptr m_cbv; }; /// ValueList sequentially serializes @@ -231,25 +230,25 @@ template <> class ValueList { public: - using TValue = FeatureWithRankAndCenter; - using TSerializer = SingleValueSerializer; + using Value = FeatureWithRankAndCenter; + using Serializer = SingleValueSerializer; - void Init(vector const & values) { m_values = values; } + void Init(std::vector const & values) { m_values = values; } size_t Size() const { return m_values.size(); } bool IsEmpty() const { return m_values.empty(); } - template - void Serialize(TSink & sink, SingleValueSerializer const & serializer) const + template + void Serialize(Sink & sink, SingleValueSerializer const & serializer) const { for (auto const & value : m_values) serializer.Serialize(sink, value); } - template - void Deserialize(TSource & src, uint32_t valueCount, - SingleValueSerializer const & serializer) + template + void Deserialize(Source & src, uint32_t valueCount, + SingleValueSerializer const & serializer) { m_values.resize(valueCount); for (size_t i = 0; i < valueCount; ++i) @@ -258,24 +257,24 @@ public: // When valueCount is not known, Deserialize reads // until the source is exhausted. - template - void Deserialize(TSource & src, SingleValueSerializer const & serializer) + template + void Deserialize(Source & src, SingleValueSerializer const & serializer) { m_values.clear(); while (src.Size() > 0) { - m_values.push_back(TValue()); + m_values.emplace_back(); serializer.DeserializeFromSource(src, m_values.back()); } } - template - void ForEach(TF && f) const + template + void ForEach(ToDo && toDo) const { for (auto const & value : m_values) - f(value); + toDo(value); } private: - vector m_values; + std::vector m_values; };