diff options
author | Maxim Pimenov <m@maps.me> | 2015-10-21 14:47:25 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:02:28 +0300 |
commit | 4e33a1f23cbfa9b5822feb7aded52d73fa808dcc (patch) | |
tree | 68e8421a26005cd3c13224adfc1c650afdb9d515 /coding | |
parent | 2ef3f59f92b5fbace5c600cd968b8d0e795529e0 (diff) |
Some review fixes.
Diffstat (limited to 'coding')
-rw-r--r-- | coding/coding_tests/trie_test.cpp | 6 | ||||
-rw-r--r-- | coding/compressed_bit_vector.cpp | 1 | ||||
-rw-r--r-- | coding/trie.hpp | 2 | ||||
-rw-r--r-- | coding/trie_builder.hpp | 10 | ||||
-rw-r--r-- | coding/trie_reader.hpp | 5 |
5 files changed, 14 insertions, 10 deletions
diff --git a/coding/coding_tests/trie_test.cpp b/coding/coding_tests/trie_test.cpp index 9460f33d30..ec86f3c637 100644 --- a/coding/coding_tests/trie_test.cpp +++ b/coding/coding_tests/trie_test.cpp @@ -167,11 +167,9 @@ public: template <typename TSource> void Deserialize(TSource & src) { + m_values.clear(); while (src.Size() > 0) - { - m_values.push_back(TValue()); - m_values.back() = ReadPrimitiveFromSource<TValue>(src); - } + m_values.emplace_back(ReadPrimitiveFromSource<TValue>(src)); } template <typename TF> diff --git a/coding/compressed_bit_vector.cpp b/coding/compressed_bit_vector.cpp index d6ef51dd03..da80b04d42 100644 --- a/coding/compressed_bit_vector.cpp +++ b/coding/compressed_bit_vector.cpp @@ -185,6 +185,7 @@ DenseCBV::DenseCBV(vector<uint64_t> const & setBits) { if (setBits.empty()) { + m_popCount = 0; return; } uint64_t const maxBit = *max_element(setBits.begin(), setBits.end()); diff --git a/coding/trie.hpp b/coding/trie.hpp index d9433e7f3d..d8de8d1e68 100644 --- a/coding/trie.hpp +++ b/coding/trie.hpp @@ -4,8 +4,6 @@ #include "base/base.hpp" #include "base/buffer_vector.hpp" -#include "indexer/string_file_values.hpp" - #include "std/unique_ptr.hpp" namespace trie diff --git a/coding/trie_builder.hpp b/coding/trie_builder.hpp index b9f22d3a14..7231548bbe 100644 --- a/coding/trie_builder.hpp +++ b/coding/trie_builder.hpp @@ -44,14 +44,15 @@ template <typename TSink, typename TChildIter, typename TValueList> void WriteNode(TSink & sink, TrieChar baseChar, TValueList const & valueList, TChildIter const begChild, TChildIter const endChild, bool isRoot = false) { + uint32_t const valueCount = valueList.Size(); if (begChild == endChild && !isRoot) { // Leaf node. + WriteVarUint(sink, valueCount); valueList.Serialize(sink); return; } uint32_t const childCount = endChild - begChild; - uint32_t const valueCount = valueList.Size(); uint8_t const header = static_cast<uint32_t>((min(valueCount, 3U) << 6) + min(childCount, 63U)); sink.Write(&header, 1); if (valueCount >= 3) @@ -140,8 +141,11 @@ struct NodeInfo TValueList m_valueList; bool m_mayAppend; - NodeInfo() : m_begPos(0), m_char(0) {} - NodeInfo(uint64_t pos, TrieChar trieChar) : m_begPos(pos), m_char(trieChar), 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) + { + } // It is finalized in the sense that no more appends are possible // so it is a fine moment to initialize the underlying ValueList. diff --git a/coding/trie_reader.hpp b/coding/trie_reader.hpp index 6d20ffd265..878323f841 100644 --- a/coding/trie_reader.hpp +++ b/coding/trie_reader.hpp @@ -22,8 +22,9 @@ public: LeafIterator0(TReader const & reader, serial::CodingParams const & codingParams) { ReaderSource<TReader> src(reader); + uint32_t valueCount = ReadVarUint<uint32_t>(src); m_valueList.SetCodingParams(codingParams); - m_valueList.Deserialize(src); + m_valueList.Deserialize(src, valueCount); // todo(@mpimenov) There used to be an assert here // that src is completely exhausted by this time. } @@ -69,8 +70,10 @@ public: uint32_t const size = m_edgeInfo[i+1].m_offset - offset; if (m_edgeInfo[i].m_isLeaf) + { return make_unique<LeafIterator0<TValueList>>(m_reader.SubReader(offset, size), m_codingParams); + } return make_unique<Iterator0<TReader, TValueList>>( m_reader.SubReader(offset, size), this->m_edge[i].m_str.back(), m_codingParams); |