From 36ecd0526d87db9e9c19d20f8333c45eb91b80f9 Mon Sep 17 00:00:00 2001 From: vng Date: Thu, 22 Sep 2011 11:57:05 +0300 Subject: [PATCH] Pass scale range of mwm to index building routine. --- indexer/index_builder.cpp | 2 +- indexer/index_builder.hpp | 3 ++- indexer/indexer_tests/index_builder_test.cpp | 5 ++++- indexer/scale_index_builder.hpp | 12 +++++++++--- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/indexer/index_builder.cpp b/indexer/index_builder.cpp index 53c2a597ab..0d26bbd9b9 100644 --- a/indexer/index_builder.cpp +++ b/indexer/index_builder.cpp @@ -24,7 +24,7 @@ namespace indexer FeaturesVector featuresVector(readCont, header); - BuildIndex(header.GetLastScale() + 1, featuresVector, writer, tmpFile); + BuildIndex(header.GetLastScale() + 1, header.GetScaleRange(), featuresVector, writer, tmpFile); } catch (Reader::Exception const & e) { diff --git a/indexer/index_builder.hpp b/indexer/index_builder.hpp index a268a6b6c3..b570dc8a27 100644 --- a/indexer/index_builder.hpp +++ b/indexer/index_builder.hpp @@ -6,6 +6,7 @@ namespace indexer { template void BuildIndex(uint32_t bucketsCount, + pair const & scaleRange, FeaturesVectorT const & featuresVector, WriterT & writer, string const & tmpFilePrefix) @@ -14,7 +15,7 @@ namespace indexer uint64_t indexSize; { SubWriter subWriter(writer); - IndexScales(bucketsCount, featuresVector, subWriter, tmpFilePrefix); + IndexScales(bucketsCount, scaleRange, featuresVector, subWriter, tmpFilePrefix); indexSize = subWriter.Size(); } LOG(LINFO, ("Built scale index. Size =", indexSize)); diff --git a/indexer/indexer_tests/index_builder_test.cpp b/indexer/indexer_tests/index_builder_test.cpp index 07f8c037e3..619bc82301 100644 --- a/indexer/indexer_tests/index_builder_test.cpp +++ b/indexer/indexer_tests/index_builder_test.cpp @@ -4,6 +4,7 @@ #include "../index_builder.hpp" #include "../classificator_loader.hpp" #include "../features_vector.hpp" +#include "../scales.hpp" #include "../../defines.hpp" @@ -33,7 +34,9 @@ UNIT_TEST(BuildIndexTest) FeaturesVector featuresVector(originalContainer, header); MemWriter > serialWriter(serialIndex); - indexer::BuildIndex(ScaleIndexBase::NUM_BUCKETS, featuresVector, serialWriter, + indexer::BuildIndex(ScaleIndexBase::NUM_BUCKETS, + make_pair(0, scales::GetUpperScale()), + featuresVector, serialWriter, "build_index_test"); } diff --git a/indexer/scale_index_builder.hpp b/indexer/scale_index_builder.hpp index 87a3b219d7..bd8a0346ad 100644 --- a/indexer/scale_index_builder.hpp +++ b/indexer/scale_index_builder.hpp @@ -56,9 +56,11 @@ class FeatureCoverer public: FeatureCoverer(uint32_t bucket, + pair const & scaleRange, SorterT & sorter, - uint32_t & numFeatures) : - m_Sorter(sorter), + uint32_t & numFeatures) + : m_Sorter(sorter), + m_mwmScaleRange(scaleRange), m_ScaleRange(ScaleIndexBase::ScaleRangeForBucket(bucket)), m_NumFeatures(numFeatures) { @@ -69,7 +71,9 @@ public: { if (FeatureShouldBeIndexed(f)) { + /// @todo Use m_mwmScaleRange to make better covering. vector const cells = covering::CoverFeature(f, RectId::DEPTH_LEVELS, 250); + for (vector::const_iterator it = cells.begin(); it != cells.end(); ++it) m_Sorter.Add(CellFeaturePair(*it, offset)); ++m_NumFeatures; @@ -89,6 +93,7 @@ public: private: SorterT & m_Sorter; + pair m_mwmScaleRange; pair m_ScaleRange; uint32_t & m_NumFeatures; }; @@ -112,6 +117,7 @@ private: template inline void IndexScales(uint32_t bucketsCount, + pair const & scaleRange, FeaturesVectorT const & featuresVector, WriterT & writer, string const & tmpFilePrefix) @@ -133,7 +139,7 @@ inline void IndexScales(uint32_t bucketsCount, WriterFunctor out(cellsToFeaturesWriter); SorterType sorter(1024*1024, tmpFilePrefix + ".c2f.tmp", out); featuresVector.ForEachOffset( - FeatureCoverer(bucket, sorter, numFeatures)); + FeatureCoverer(bucket, scaleRange, sorter, numFeatures)); // LOG(LINFO, ("Sorting...")); sorter.SortAndFinish(); }