diff options
author | vng <viktor.govako@gmail.com> | 2015-07-16 14:31:31 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:57:12 +0300 |
commit | 8fdd97d52366659ec16cf4d4edf3ab98f96b0874 (patch) | |
tree | 1381c0061d93b5ee60b658df1659f3fa265312d0 /indexer/features_vector.cpp | |
parent | 0dc6675aa5d9cc8e19f1ec02a927eae826d97944 (diff) |
Minor refactoring to store feature’s offsets table once for every cache value in mwm set.
Diffstat (limited to 'indexer/features_vector.cpp')
-rw-r--r-- | indexer/features_vector.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/indexer/features_vector.cpp b/indexer/features_vector.cpp new file mode 100644 index 0000000000..a070f6286b --- /dev/null +++ b/indexer/features_vector.cpp @@ -0,0 +1,41 @@ +#include "features_vector.hpp" +#include "features_offsets_table.hpp" +#include "mwm_version.hpp" +#include "data_factory.hpp" + + +void FeaturesVector::GetByIndex(uint32_t ind, FeatureType & ft) const +{ + uint32_t offset = 0, size = 0; + m_RecordReader.ReadRecord(m_table ? m_table->GetFeatureOffset(ind) : ind, m_buffer, offset, size); + ft.Deserialize(m_LoadInfo.GetLoader(), &m_buffer[offset]); +} + + +FeaturesVectorTest::FeaturesVectorTest(string const & filePath) + : m_cont(filePath), m_initializer(this), m_vector(m_cont, m_header, 0) +{ + Init(); +} + +FeaturesVectorTest::FeaturesVectorTest(FilesContainerR const & cont) + : m_cont(cont), m_initializer(this), m_vector(m_cont, m_header, 0) +{ + Init(); +} + +FeaturesVectorTest::Initializer::Initializer(FeaturesVectorTest * p) +{ + LoadMapHeader(p->m_cont, p->m_header); +} + +void FeaturesVectorTest::Init() +{ + if (m_header.GetFormat() >= version::v5) + m_vector.m_table = feature::FeaturesOffsetsTable::CreateIfNotExistsAndLoad(m_cont).release(); +} + +FeaturesVectorTest::~FeaturesVectorTest() +{ + delete m_vector.m_table; +} |