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:
authorLev Dragunov <l.dragunov@corp.mail.ru>2015-12-01 14:04:51 +0300
committerSergey Yershov <yershov@corp.mail.ru>2016-03-23 16:02:09 +0300
commit1c69f0b270619cbebefea38d9418c3560676d70d (patch)
treef8d556cd08e0d615def637135003ae18c016bf61 /indexer/scale_index_builder.hpp
parente3e4ad800158171d934adf2fed2b3caa46ccbf8e (diff)
Introduce DisplaceManager class.
Diffstat (limited to 'indexer/scale_index_builder.hpp')
-rw-r--r--indexer/scale_index_builder.hpp72
1 files changed, 9 insertions, 63 deletions
diff --git a/indexer/scale_index_builder.hpp b/indexer/scale_index_builder.hpp
index 18b04bcf7b..1dbfb758df 100644
--- a/indexer/scale_index_builder.hpp
+++ b/indexer/scale_index_builder.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "indexer/cell_id.hpp"
#include "indexer/data_header.hpp"
+#include "indexer/displacement_manager.hpp"
#include "indexer/feature.hpp"
#include "indexer/feature_covering.hpp"
#include "indexer/feature_visibility.hpp"
@@ -26,72 +27,16 @@
namespace covering
{
-class CellFeaturePair
-{
-public:
- CellFeaturePair() = default;
- CellFeaturePair(uint64_t cell, uint32_t feature)
- : m_CellLo(UINT64_LO(cell)), m_CellHi(UINT64_HI(cell)), m_Feature(feature) {}
-
- bool operator< (CellFeaturePair const & rhs) const
- {
- if (m_CellHi != rhs.m_CellHi)
- return m_CellHi < rhs.m_CellHi;
- if (m_CellLo != rhs.m_CellLo)
- return m_CellLo < rhs.m_CellLo;
- return m_Feature < rhs.m_Feature;
- }
-
- uint64_t GetCell() const { return UINT64_FROM_UINT32(m_CellHi, m_CellLo); }
- uint32_t GetFeature() const { return m_Feature; }
-
-private:
- uint32_t m_CellLo;
- uint32_t m_CellHi;
- uint32_t m_Feature;
-};
-static_assert(sizeof(CellFeaturePair) == 12, "");
-#ifndef OMIM_OS_LINUX
-static_assert(is_trivially_copyable<CellFeaturePair>::value, "");
-#endif
-
-class CellFeatureBucketTuple
-{
-public:
- CellFeatureBucketTuple() = default;
- CellFeatureBucketTuple(CellFeaturePair const & p, uint32_t bucket) : m_pair(p), m_bucket(bucket)
- {
- }
-
- bool operator<(CellFeatureBucketTuple const & rhs) const
- {
- if (m_bucket != rhs.m_bucket)
- return m_bucket < rhs.m_bucket;
- return m_pair < rhs.m_pair;
- }
-
- CellFeaturePair const & GetCellFeaturePair() const { return m_pair; }
- uint32_t GetBucket() const { return m_bucket; }
-
-private:
- CellFeaturePair m_pair;
- uint32_t m_bucket;
-};
-static_assert(sizeof(CellFeatureBucketTuple) == 16, "");
-#ifndef OMIM_OS_LINUX
-static_assert(is_trivially_copyable<CellFeatureBucketTuple>::value, "");
-#endif
-
-template <class TSorter>
+template <class TDisplacementManager>
class FeatureCoverer
{
public:
- FeatureCoverer(feature::DataHeader const & header, TSorter & sorter,
+ FeatureCoverer(feature::DataHeader const & header, TDisplacementManager & manager,
vector<uint32_t> & featuresInBucket, vector<uint32_t> & cellsInBucket)
: m_header(header),
m_scalesIdx(0),
m_bucketsCount(header.GetLastScale() + 1),
- m_sorter(sorter),
+ m_displacement(manager),
m_codingDepth(covering::GetCodingDepth(header.GetLastScale())),
m_featuresInBucket(featuresInBucket),
m_cellsInBucket(cellsInBucket)
@@ -120,8 +65,7 @@ public:
}
vector<int64_t> const cells = covering::CoverFeature(ft, m_codingDepth, 250);
- for (int64_t cell : cells)
- m_sorter.Add(CellFeatureBucketTuple(CellFeaturePair(cell, index), bucket));
+ m_displacement.Add(cells, bucket, ft, index);
m_featuresInBucket[bucket] += 1;
m_cellsInBucket[bucket] += cells.size();
@@ -169,7 +113,7 @@ private:
mutable size_t m_scalesIdx;
uint32_t m_bucketsCount;
- TSorter & m_sorter;
+ TDisplacementManager & m_displacement;
int m_codingDepth;
vector<uint32_t> & m_featuresInBucket;
vector<uint32_t> & m_cellsInBucket;
@@ -208,11 +152,13 @@ void IndexScales(feature::DataHeader const & header, TFeaturesVector const & fea
FileWriter cellsToFeaturesAllBucketsWriter(cellsToFeatureAllBucketsFile);
using TSorter = FileSorter<CellFeatureBucketTuple, WriterFunctor<FileWriter>>;
+ using TDisplacementManager = DisplacementManager<TSorter>;
WriterFunctor<FileWriter> out(cellsToFeaturesAllBucketsWriter);
TSorter sorter(1024 * 1024 /* bufferBytes */, tmpFilePrefix + CELL2FEATURE_TMP_EXT, out);
+ TDisplacementManager manager(sorter);
vector<uint32_t> featuresInBucket(bucketsCount);
vector<uint32_t> cellsInBucket(bucketsCount);
- features.ForEach(FeatureCoverer<TSorter>(header, sorter, featuresInBucket, cellsInBucket));
+ features.ForEach(FeatureCoverer<TDisplacementManager>(header, manager, featuresInBucket, cellsInBucket));
sorter.SortAndFinish();
for (uint32_t bucket = 0; bucket < bucketsCount; ++bucket)