mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
[feature] Removed IndexFactory class.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com> ^ Conflicts: ^ libs/indexer/data_source.cpp ^ libs/indexer/feature.cpp ^ libs/indexer/features_vector.cpp ^ libs/indexer/mwm_set.hpp
This commit is contained in:
committed by
Konstantin Pastbin
parent
25a4a3b76f
commit
6beabb2fe1
@@ -1,7 +1,6 @@
|
|||||||
#include "statistics.hpp"
|
#include "statistics.hpp"
|
||||||
|
|
||||||
#include "indexer/classificator.hpp"
|
#include "indexer/classificator.hpp"
|
||||||
#include "indexer/data_factory.hpp"
|
|
||||||
#include "indexer/feature_processor.hpp"
|
#include "indexer/feature_processor.hpp"
|
||||||
|
|
||||||
#include "geometry/mercator.hpp"
|
#include "geometry/mercator.hpp"
|
||||||
|
|||||||
@@ -31,8 +31,6 @@ set(SRC
|
|||||||
cuisines.hpp
|
cuisines.hpp
|
||||||
custom_keyvalue.cpp
|
custom_keyvalue.cpp
|
||||||
custom_keyvalue.hpp
|
custom_keyvalue.hpp
|
||||||
data_factory.cpp
|
|
||||||
data_factory.hpp
|
|
||||||
data_header.cpp
|
data_header.cpp
|
||||||
data_header.hpp
|
data_header.hpp
|
||||||
data_source.cpp
|
data_source.cpp
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
#include "indexer/data_factory.hpp"
|
|
||||||
|
|
||||||
#include "coding/files_container.hpp"
|
|
||||||
|
|
||||||
#include "defines.hpp"
|
|
||||||
|
|
||||||
void IndexFactory::Load(FilesContainerR const & cont)
|
|
||||||
{
|
|
||||||
m_version = version::MwmVersion::Read(cont);
|
|
||||||
if (m_version.GetFormat() < version::Format::v11)
|
|
||||||
MYTHROW(CorruptedMwmFile, (cont.GetFileName()));
|
|
||||||
|
|
||||||
m_header.Load(cont);
|
|
||||||
|
|
||||||
if (cont.IsExist(REGION_INFO_FILE_TAG))
|
|
||||||
{
|
|
||||||
ReaderSource<FilesContainerR::TReader> src(cont.GetReader(REGION_INFO_FILE_TAG));
|
|
||||||
m_regionData.Deserialize(src);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include "indexer/data_header.hpp"
|
|
||||||
#include "indexer/feature_meta.hpp"
|
|
||||||
#include "indexer/interval_index.hpp"
|
|
||||||
|
|
||||||
#include "platform/mwm_version.hpp"
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
class FilesContainerR;
|
|
||||||
|
|
||||||
class IndexFactory
|
|
||||||
{
|
|
||||||
version::MwmVersion m_version;
|
|
||||||
feature::DataHeader m_header;
|
|
||||||
feature::RegionData m_regionData;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void Load(FilesContainerR const & cont);
|
|
||||||
|
|
||||||
inline version::MwmVersion const & GetMwmVersion() const { return m_version; }
|
|
||||||
inline feature::DataHeader const & GetHeader() const { return m_header; }
|
|
||||||
inline feature::RegionData const & GetRegionData() const { return m_regionData; }
|
|
||||||
inline void MoveRegionData(feature::RegionData & data) { data = std::move(m_regionData); }
|
|
||||||
|
|
||||||
template <typename Reader>
|
|
||||||
std::unique_ptr<IntervalIndex<Reader, uint32_t>> CreateIndex(Reader const & reader) const
|
|
||||||
{
|
|
||||||
return std::make_unique<IntervalIndex<Reader, uint32_t>>(reader);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -5,7 +5,6 @@
|
|||||||
#include "platform/mwm_version.hpp"
|
#include "platform/mwm_version.hpp"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <limits>
|
|
||||||
|
|
||||||
using platform::CountryFile;
|
using platform::CountryFile;
|
||||||
using platform::LocalCountryFile;
|
using platform::LocalCountryFile;
|
||||||
@@ -15,19 +14,19 @@ namespace
|
|||||||
class ReadMWMFunctor
|
class ReadMWMFunctor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Fn = std::function<void(uint32_t, FeatureSource & src)>;
|
template <class FnT>
|
||||||
|
ReadMWMFunctor(FeatureSourceFactory const & factory, FnT && fn) : m_factory(factory)
|
||||||
ReadMWMFunctor(FeatureSourceFactory const & factory, Fn const & fn) : m_factory(factory), m_fn(fn)
|
, m_fn(std::forward<FnT>(fn))
|
||||||
{
|
|
||||||
m_stop = []() { return false; };
|
|
||||||
}
|
|
||||||
|
|
||||||
ReadMWMFunctor(FeatureSourceFactory const & factory, Fn const & fn, DataSource::StopSearchCallback const & stop)
|
|
||||||
: m_factory(factory)
|
|
||||||
, m_fn(fn)
|
|
||||||
, m_stop(stop)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
ReadMWMFunctor(FeatureSourceFactory const & factory, DataSource::FeatureCallback const & fn,
|
||||||
|
DataSource::StopSearchCallback stop = {})
|
||||||
|
: m_factory(factory)
|
||||||
|
, m_stop(std::move(stop))
|
||||||
|
{
|
||||||
|
m_fn = [&fn](uint32_t index, FeatureSource & src) { ReadFeatureType(fn, src, index); };
|
||||||
|
}
|
||||||
|
|
||||||
// Reads features visible at |scale| covered by |cov| from mwm and applies |m_fn| to them.
|
// Reads features visible at |scale| covered by |cov| from mwm and applies |m_fn| to them.
|
||||||
// Feature reading process consists of two steps: untouched (original) features reading and
|
// Feature reading process consists of two steps: untouched (original) features reading and
|
||||||
// touched (created, edited etc.) features reading.
|
// touched (created, edited etc.) features reading.
|
||||||
@@ -51,7 +50,7 @@ public:
|
|||||||
|
|
||||||
// Use last coding scale for covering (see index_builder.cpp).
|
// Use last coding scale for covering (see index_builder.cpp).
|
||||||
covering::Intervals const & intervals = cov.Get<RectId::DEPTH_LEVELS>(lastScale);
|
covering::Intervals const & intervals = cov.Get<RectId::DEPTH_LEVELS>(lastScale);
|
||||||
ScaleIndex<ModelReaderPtr> index(mwmValue->m_cont.GetReader(INDEX_FILE_TAG), mwmValue->m_factory);
|
ScaleIndex<ModelReaderPtr> index(mwmValue->m_cont.GetReader(INDEX_FILE_TAG));
|
||||||
|
|
||||||
// iterate through intervals
|
// iterate through intervals
|
||||||
for (auto const & i : intervals)
|
for (auto const & i : intervals)
|
||||||
@@ -61,7 +60,8 @@ public:
|
|||||||
if (checkUnique(value))
|
if (checkUnique(value))
|
||||||
m_fn(value, *src);
|
m_fn(value, *src);
|
||||||
});
|
});
|
||||||
if (m_stop())
|
|
||||||
|
if (m_stop && m_stop())
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -75,12 +75,12 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
FeatureSourceFactory const & m_factory;
|
FeatureSourceFactory const & m_factory;
|
||||||
Fn m_fn;
|
std::function<void(uint32_t, FeatureSource & src)> m_fn;
|
||||||
DataSource::StopSearchCallback m_stop;
|
DataSource::StopSearchCallback m_stop;
|
||||||
};
|
|
||||||
|
|
||||||
void ReadFeatureType(std::function<void(FeatureType &)> const & fn, FeatureSource & src, uint32_t index)
|
private:
|
||||||
{
|
static void ReadFeatureType(DataSource::FeatureCallback const & fn, FeatureSource & src, uint32_t index)
|
||||||
|
{
|
||||||
std::unique_ptr<FeatureType> ft;
|
std::unique_ptr<FeatureType> ft;
|
||||||
switch (src.GetFeatureStatus(index))
|
switch (src.GetFeatureStatus(index))
|
||||||
{
|
{
|
||||||
@@ -98,9 +98,12 @@ void ReadFeatureType(std::function<void(FeatureType &)> const & fn, FeatureSourc
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK(ft, ());
|
CHECK(ft, ());
|
||||||
fn(*ft);
|
fn(*ft);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
// FeaturesLoaderGuard ---------------------------------------------------------------------
|
// FeaturesLoaderGuard ---------------------------------------------------------------------
|
||||||
@@ -161,7 +164,12 @@ std::unique_ptr<MwmInfo> DataSource::CreateInfo(platform::LocalCountryFile const
|
|||||||
info->m_minScale = static_cast<uint8_t>(scaleR.first);
|
info->m_minScale = static_cast<uint8_t>(scaleR.first);
|
||||||
info->m_maxScale = static_cast<uint8_t>(scaleR.second);
|
info->m_maxScale = static_cast<uint8_t>(scaleR.second);
|
||||||
info->m_version = value.GetMwmVersion();
|
info->m_version = value.GetMwmVersion();
|
||||||
value.m_factory.MoveRegionData(info->m_data);
|
|
||||||
|
if (value.m_cont.IsExist(REGION_INFO_FILE_TAG))
|
||||||
|
{
|
||||||
|
ReaderSource<FilesContainerR::TReader> src(value.m_cont.GetReader(REGION_INFO_FILE_TAG));
|
||||||
|
info->m_data.Deserialize(src);
|
||||||
|
}
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
@@ -234,9 +242,7 @@ void DataSource::ForEachFeatureIDInRect(FeatureIdCallback const & f, m2::RectD c
|
|||||||
|
|
||||||
void DataSource::ForEachInRect(FeatureCallback const & f, m2::RectD const & rect, int scale) const
|
void DataSource::ForEachInRect(FeatureCallback const & f, m2::RectD const & rect, int scale) const
|
||||||
{
|
{
|
||||||
auto readFeatureType = [&f](uint32_t index, FeatureSource & src) { ReadFeatureType(f, src, index); };
|
ReadMWMFunctor readFunctor(*m_factory, f);
|
||||||
|
|
||||||
ReadMWMFunctor readFunctor(*m_factory, readFeatureType);
|
|
||||||
ForEachInIntervals(readFunctor, covering::ViewportWithLowLevels, rect, scale);
|
ForEachInIntervals(readFunctor, covering::ViewportWithLowLevels, rect, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,17 +250,13 @@ void DataSource::ForClosestToPoint(FeatureCallback const & f, StopSearchCallback
|
|||||||
m2::PointD const & center, double sizeM, int scale) const
|
m2::PointD const & center, double sizeM, int scale) const
|
||||||
{
|
{
|
||||||
auto const rect = mercator::RectByCenterXYAndSizeInMeters(center, sizeM);
|
auto const rect = mercator::RectByCenterXYAndSizeInMeters(center, sizeM);
|
||||||
|
ReadMWMFunctor readFunctor(*m_factory, f, stop);
|
||||||
auto readFeatureType = [&f](uint32_t index, FeatureSource & src) { ReadFeatureType(f, src, index); };
|
|
||||||
ReadMWMFunctor readFunctor(*m_factory, readFeatureType, stop);
|
|
||||||
ForEachInIntervals(readFunctor, covering::CoveringMode::Spiral, rect, scale);
|
ForEachInIntervals(readFunctor, covering::CoveringMode::Spiral, rect, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataSource::ForEachInScale(FeatureCallback const & f, int scale) const
|
void DataSource::ForEachInScale(FeatureCallback const & f, int scale) const
|
||||||
{
|
{
|
||||||
auto readFeatureType = [&f](uint32_t index, FeatureSource & src) { ReadFeatureType(f, src, index); };
|
ReadMWMFunctor readFunctor(*m_factory, f);
|
||||||
|
|
||||||
ReadMWMFunctor readFunctor(*m_factory, readFeatureType);
|
|
||||||
ForEachInIntervals(readFunctor, covering::FullCover, m2::RectD::GetInfiniteRect(), scale);
|
ForEachInIntervals(readFunctor, covering::FullCover, m2::RectD::GetInfiniteRect(), scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,10 +267,7 @@ void DataSource::ForEachInRectForMWM(FeatureCallback const & f, m2::RectD const
|
|||||||
if (handle.IsAlive())
|
if (handle.IsAlive())
|
||||||
{
|
{
|
||||||
covering::CoveringGetter cov(rect, covering::ViewportWithLowLevels);
|
covering::CoveringGetter cov(rect, covering::ViewportWithLowLevels);
|
||||||
auto readFeatureType = [&f](uint32_t index, FeatureSource & src) { ReadFeatureType(f, src, index); };
|
ReadMWMFunctor(*m_factory, f)(handle, cov, scale);
|
||||||
|
|
||||||
ReadMWMFunctor readFunctor(*m_factory, readFeatureType);
|
|
||||||
readFunctor(handle, cov, scale);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -358,8 +358,6 @@ void FeatureType::ParseHeader2()
|
|||||||
// For inner geometry remaining 4 bits are not used.
|
// For inner geometry remaining 4 bits are not used.
|
||||||
if (elemsCount == 0)
|
if (elemsCount == 0)
|
||||||
geomScalesMask = bitSource.Read(4);
|
geomScalesMask = bitSource.Read(4);
|
||||||
else
|
|
||||||
ASSERT(headerGeomType == HeaderGeomType::Area || elemsCount > 1, ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayByteSource src(bitSource.RoundPtr());
|
ArrayByteSource src(bitSource.RoundPtr());
|
||||||
@@ -414,6 +412,7 @@ void FeatureType::ParseHeader2()
|
|||||||
ReadOffsets(*m_loadInfo, src, geomScalesMask, m_offsets.m_trg);
|
ReadOffsets(*m_loadInfo, src, geomScalesMask, m_offsets.m_trg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Size of the whole header incl. inner geometry / triangles.
|
// Size of the whole header incl. inner geometry / triangles.
|
||||||
m_innerStats.m_size = CalcOffset(src, m_data.data());
|
m_innerStats.m_size = CalcOffset(src, m_data.data());
|
||||||
m_parsed.m_header2 = true;
|
m_parsed.m_header2 = true;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
#include "features_vector.hpp"
|
#include "features_vector.hpp"
|
||||||
#include "dat_section_header.hpp"
|
#include "dat_section_header.hpp"
|
||||||
#include "data_factory.hpp"
|
|
||||||
#include "features_offsets_table.hpp"
|
#include "features_offsets_table.hpp"
|
||||||
|
|
||||||
#include "platform/constants.hpp"
|
#include "platform/constants.hpp"
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
#include "generator/generator_tests_support/test_with_custom_mwms.hpp"
|
#include "generator/generator_tests_support/test_with_custom_mwms.hpp"
|
||||||
|
|
||||||
#include "indexer/cell_id.hpp"
|
#include "indexer/cell_id.hpp"
|
||||||
#include "indexer/data_factory.hpp"
|
|
||||||
#include "indexer/data_header.hpp"
|
#include "indexer/data_header.hpp"
|
||||||
#include "indexer/data_source.hpp"
|
#include "indexer/data_source.hpp"
|
||||||
#include "indexer/feature.hpp"
|
#include "indexer/feature.hpp"
|
||||||
@@ -26,9 +25,7 @@
|
|||||||
#include "defines.hpp"
|
#include "defines.hpp"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdint>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace scale_index_reading_tests
|
namespace scale_index_reading_tests
|
||||||
@@ -95,15 +92,12 @@ UNIT_CLASS_TEST(ScaleIndexReadingTest, Mmap)
|
|||||||
FilesContainerR cont(path);
|
FilesContainerR cont(path);
|
||||||
feature::DataHeader header(cont);
|
feature::DataHeader header(cont);
|
||||||
|
|
||||||
IndexFactory factory;
|
|
||||||
factory.Load(cont);
|
|
||||||
|
|
||||||
auto const offsetSize = cont.GetAbsoluteOffsetAndSize(INDEX_FILE_TAG);
|
auto const offsetSize = cont.GetAbsoluteOffsetAndSize(INDEX_FILE_TAG);
|
||||||
|
|
||||||
MmapReader reader(path);
|
MmapReader reader(path);
|
||||||
ReaderPtr<Reader> subReader(reader.CreateSubReader(offsetSize.first, offsetSize.second));
|
ReaderPtr<Reader> subReader(reader.CreateSubReader(offsetSize.first, offsetSize.second));
|
||||||
|
|
||||||
ScaleIndex<ReaderPtr<Reader>> index(subReader, factory);
|
ScaleIndex<ReaderPtr<Reader>> index(subReader);
|
||||||
|
|
||||||
auto collectNames = [&](m2::RectD const & rect)
|
auto collectNames = [&](m2::RectD const & rect)
|
||||||
{ return CollectNames(id, index, header.GetLastScale(), header.GetLastScale(), rect); };
|
{ return CollectNames(id, index, header.GetLastScale(), header.GetLastScale(), rect); };
|
||||||
|
|||||||
@@ -384,7 +384,11 @@ MwmValue::MwmValue(LocalCountryFile const & localFile)
|
|||||||
: m_cont(platform::GetCountryReader(localFile, MapFileType::Map))
|
: m_cont(platform::GetCountryReader(localFile, MapFileType::Map))
|
||||||
, m_file(localFile)
|
, m_file(localFile)
|
||||||
{
|
{
|
||||||
m_factory.Load(m_cont);
|
m_version = version::MwmVersion::Read(m_cont);
|
||||||
|
if (m_version.GetFormat() < version::Format::v11)
|
||||||
|
MYTHROW(CorruptedMwmFile, (m_cont.GetFileName()));
|
||||||
|
|
||||||
|
m_header.Load(m_cont);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MwmValue::SetTable(MwmInfoEx & info)
|
void MwmValue::SetTable(MwmInfoEx & info)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "indexer/data_factory.hpp"
|
#include "indexer/data_header.hpp"
|
||||||
|
#include "indexer/feature_meta.hpp"
|
||||||
#include "indexer/house_to_street_iface.hpp"
|
#include "indexer/house_to_street_iface.hpp"
|
||||||
|
|
||||||
#include "platform/local_country_file.hpp"
|
#include "platform/local_country_file.hpp"
|
||||||
@@ -373,19 +374,23 @@ class MwmValue
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FilesContainerR const m_cont;
|
FilesContainerR const m_cont;
|
||||||
IndexFactory m_factory;
|
|
||||||
platform::LocalCountryFile const m_file;
|
platform::LocalCountryFile const m_file;
|
||||||
|
|
||||||
|
private:
|
||||||
|
version::MwmVersion m_version;
|
||||||
|
feature::DataHeader m_header;
|
||||||
|
|
||||||
|
public:
|
||||||
std::shared_ptr<feature::FeaturesOffsetsTable> m_table;
|
std::shared_ptr<feature::FeaturesOffsetsTable> m_table;
|
||||||
std::unique_ptr<indexer::MetadataDeserializer> m_metaDeserializer;
|
std::unique_ptr<indexer::MetadataDeserializer> m_metaDeserializer;
|
||||||
std::unique_ptr<HouseToStreetTable> m_house2street, m_house2place;
|
std::unique_ptr<HouseToStreetTable> m_house2street, m_house2place;
|
||||||
|
|
||||||
|
public:
|
||||||
explicit MwmValue(platform::LocalCountryFile const & localFile);
|
explicit MwmValue(platform::LocalCountryFile const & localFile);
|
||||||
void SetTable(MwmInfoEx & info);
|
void SetTable(MwmInfoEx & info);
|
||||||
|
|
||||||
feature::DataHeader const & GetHeader() const { return m_factory.GetHeader(); }
|
feature::DataHeader const & GetHeader() const { return m_header; }
|
||||||
feature::RegionData const & GetRegionData() const { return m_factory.GetRegionData(); }
|
version::MwmVersion const & GetMwmVersion() const { return m_version; }
|
||||||
version::MwmVersion const & GetMwmVersion() const { return m_factory.GetMwmVersion(); }
|
|
||||||
std::string const & GetCountryFileName() const { return m_file.GetCountryName(); }
|
std::string const & GetCountryFileName() const { return m_file.GetCountryName(); }
|
||||||
|
|
||||||
bool HasSearchIndex() const { return m_cont.IsExist(SEARCH_INDEX_FILE_TAG); }
|
bool HasSearchIndex() const { return m_cont.IsExist(SEARCH_INDEX_FILE_TAG); }
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "indexer/data_factory.hpp"
|
|
||||||
#include "indexer/interval_index.hpp"
|
#include "indexer/interval_index.hpp"
|
||||||
|
|
||||||
#include "coding/var_serial_vector.hpp"
|
#include "coding/var_serial_vector.hpp"
|
||||||
|
|
||||||
#include <cstdint>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@@ -24,26 +22,24 @@ template <class Reader>
|
|||||||
class ScaleIndex : public ScaleIndexBase
|
class ScaleIndex : public ScaleIndexBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ScaleIndex() = default;
|
explicit ScaleIndex(Reader const & reader) { Attach(reader); }
|
||||||
|
|
||||||
ScaleIndex(Reader const & reader, IndexFactory const & factory) { Attach(reader, factory); }
|
|
||||||
|
|
||||||
~ScaleIndex() { Clear(); }
|
~ScaleIndex() { Clear(); }
|
||||||
|
|
||||||
void Clear() { m_IndexForScale.clear(); }
|
void Clear() { m_IndexForScale.clear(); }
|
||||||
|
|
||||||
void Attach(Reader const & reader, IndexFactory const & factory)
|
void Attach(Reader const & reader)
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
|
|
||||||
ReaderSource<Reader> source(reader);
|
ReaderSource<Reader> source(reader);
|
||||||
VarSerialVectorReader<Reader> treesReader(source);
|
VarSerialVectorReader<Reader> treesReader(source);
|
||||||
for (uint32_t i = 0; i < treesReader.Size(); ++i)
|
for (uint32_t i = 0; i < treesReader.Size(); ++i)
|
||||||
m_IndexForScale.push_back(factory.CreateIndex(treesReader.SubReader(i)));
|
m_IndexForScale.push_back(std::make_unique<IndexT>(treesReader.SubReader(i)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ForEachInIntervalAndScale(uint64_t beg, uint64_t end, int scale,
|
template <class FnT>
|
||||||
std::function<void(uint64_t, uint32_t)> const & fn) const
|
void ForEachInIntervalAndScale(uint64_t beg, uint64_t end, int scale, FnT && fn) const
|
||||||
{
|
{
|
||||||
auto const scaleBucket = BucketByScale(scale);
|
auto const scaleBucket = BucketByScale(scale);
|
||||||
if (scaleBucket < m_IndexForScale.size())
|
if (scaleBucket < m_IndexForScale.size())
|
||||||
@@ -52,5 +48,6 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::unique_ptr<IntervalIndex<Reader, uint32_t>>> m_IndexForScale;
|
using IndexT = IntervalIndex<Reader, uint32_t>;
|
||||||
|
std::vector<std::unique_ptr<IndexT>> m_IndexForScale;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ MwmContext::MwmContext(MwmSet::MwmHandle handle)
|
|||||||
: m_handle(std::move(handle))
|
: m_handle(std::move(handle))
|
||||||
, m_value(*m_handle.GetValue())
|
, m_value(*m_handle.GetValue())
|
||||||
, m_vector(m_value.m_cont, m_value.GetHeader(), m_value.m_table.get(), m_value.m_metaDeserializer.get())
|
, m_vector(m_value.m_cont, m_value.GetHeader(), m_value.m_table.get(), m_value.m_metaDeserializer.get())
|
||||||
, m_index(m_value.m_cont.GetReader(INDEX_FILE_TAG), m_value.m_factory)
|
, m_index(m_value.m_cont.GetReader(INDEX_FILE_TAG))
|
||||||
, m_centers(m_value)
|
, m_centers(m_value)
|
||||||
, m_editableSource(m_handle)
|
, m_editableSource(m_handle)
|
||||||
{}
|
{}
|
||||||
|
|||||||
@@ -112,8 +112,6 @@
|
|||||||
675341021A3F540F00A0A8C3 /* classificator_loader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 675340AD1A3F540F00A0A8C3 /* classificator_loader.hpp */; };
|
675341021A3F540F00A0A8C3 /* classificator_loader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 675340AD1A3F540F00A0A8C3 /* classificator_loader.hpp */; };
|
||||||
675341031A3F540F00A0A8C3 /* classificator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 675340AE1A3F540F00A0A8C3 /* classificator.cpp */; };
|
675341031A3F540F00A0A8C3 /* classificator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 675340AE1A3F540F00A0A8C3 /* classificator.cpp */; };
|
||||||
675341041A3F540F00A0A8C3 /* classificator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 675340AF1A3F540F00A0A8C3 /* classificator.hpp */; };
|
675341041A3F540F00A0A8C3 /* classificator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 675340AF1A3F540F00A0A8C3 /* classificator.hpp */; };
|
||||||
675341071A3F540F00A0A8C3 /* data_factory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 675340B21A3F540F00A0A8C3 /* data_factory.cpp */; };
|
|
||||||
675341081A3F540F00A0A8C3 /* data_factory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 675340B31A3F540F00A0A8C3 /* data_factory.hpp */; };
|
|
||||||
675341091A3F540F00A0A8C3 /* data_header.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 675340B41A3F540F00A0A8C3 /* data_header.cpp */; };
|
675341091A3F540F00A0A8C3 /* data_header.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 675340B41A3F540F00A0A8C3 /* data_header.cpp */; };
|
||||||
6753410A1A3F540F00A0A8C3 /* data_header.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 675340B51A3F540F00A0A8C3 /* data_header.hpp */; };
|
6753410A1A3F540F00A0A8C3 /* data_header.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 675340B51A3F540F00A0A8C3 /* data_header.hpp */; };
|
||||||
6753410B1A3F540F00A0A8C3 /* drawing_rule_def.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 675340B61A3F540F00A0A8C3 /* drawing_rule_def.cpp */; };
|
6753410B1A3F540F00A0A8C3 /* drawing_rule_def.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 675340B61A3F540F00A0A8C3 /* drawing_rule_def.cpp */; };
|
||||||
@@ -345,8 +343,6 @@
|
|||||||
675340AD1A3F540F00A0A8C3 /* classificator_loader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = classificator_loader.hpp; sourceTree = "<group>"; };
|
675340AD1A3F540F00A0A8C3 /* classificator_loader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = classificator_loader.hpp; sourceTree = "<group>"; };
|
||||||
675340AE1A3F540F00A0A8C3 /* classificator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = classificator.cpp; sourceTree = "<group>"; };
|
675340AE1A3F540F00A0A8C3 /* classificator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = classificator.cpp; sourceTree = "<group>"; };
|
||||||
675340AF1A3F540F00A0A8C3 /* classificator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = classificator.hpp; sourceTree = "<group>"; };
|
675340AF1A3F540F00A0A8C3 /* classificator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = classificator.hpp; sourceTree = "<group>"; };
|
||||||
675340B21A3F540F00A0A8C3 /* data_factory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data_factory.cpp; sourceTree = "<group>"; };
|
|
||||||
675340B31A3F540F00A0A8C3 /* data_factory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = data_factory.hpp; sourceTree = "<group>"; };
|
|
||||||
675340B41A3F540F00A0A8C3 /* data_header.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data_header.cpp; sourceTree = "<group>"; };
|
675340B41A3F540F00A0A8C3 /* data_header.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data_header.cpp; sourceTree = "<group>"; };
|
||||||
675340B51A3F540F00A0A8C3 /* data_header.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = data_header.hpp; sourceTree = "<group>"; };
|
675340B51A3F540F00A0A8C3 /* data_header.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = data_header.hpp; sourceTree = "<group>"; };
|
||||||
675340B61A3F540F00A0A8C3 /* drawing_rule_def.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drawing_rule_def.cpp; sourceTree = "<group>"; };
|
675340B61A3F540F00A0A8C3 /* drawing_rule_def.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drawing_rule_def.cpp; sourceTree = "<group>"; };
|
||||||
@@ -629,8 +625,6 @@
|
|||||||
AC7C68A82A5040AC004BB71C /* custom_keyvalue.cpp */,
|
AC7C68A82A5040AC004BB71C /* custom_keyvalue.cpp */,
|
||||||
AC7C68A72A5040AC004BB71C /* custom_keyvalue.hpp */,
|
AC7C68A72A5040AC004BB71C /* custom_keyvalue.hpp */,
|
||||||
40D62CEE23F2E8BE009A20F5 /* dat_section_header.hpp */,
|
40D62CEE23F2E8BE009A20F5 /* dat_section_header.hpp */,
|
||||||
675340B21A3F540F00A0A8C3 /* data_factory.cpp */,
|
|
||||||
675340B31A3F540F00A0A8C3 /* data_factory.hpp */,
|
|
||||||
675340B41A3F540F00A0A8C3 /* data_header.cpp */,
|
675340B41A3F540F00A0A8C3 /* data_header.cpp */,
|
||||||
675340B51A3F540F00A0A8C3 /* data_header.hpp */,
|
675340B51A3F540F00A0A8C3 /* data_header.hpp */,
|
||||||
3D928F651D50F9FE001670E0 /* data_source_helpers.cpp */,
|
3D928F651D50F9FE001670E0 /* data_source_helpers.cpp */,
|
||||||
@@ -834,7 +828,6 @@
|
|||||||
34583BCC1C88552100F94664 /* map_object.hpp in Headers */,
|
34583BCC1C88552100F94664 /* map_object.hpp in Headers */,
|
||||||
456E1B1B1F90E5B7009C32E1 /* city_boundary.hpp in Headers */,
|
456E1B1B1F90E5B7009C32E1 /* city_boundary.hpp in Headers */,
|
||||||
34664CF41D49FEC1003D7096 /* altitude_loader.hpp in Headers */,
|
34664CF41D49FEC1003D7096 /* altitude_loader.hpp in Headers */,
|
||||||
675341081A3F540F00A0A8C3 /* data_factory.hpp in Headers */,
|
|
||||||
6753410A1A3F540F00A0A8C3 /* data_header.hpp in Headers */,
|
6753410A1A3F540F00A0A8C3 /* data_header.hpp in Headers */,
|
||||||
BBB7061023E46E0100A7F29A /* isolines_info.hpp in Headers */,
|
BBB7061023E46E0100A7F29A /* isolines_info.hpp in Headers */,
|
||||||
6753411B1A3F540F00A0A8C3 /* feature_impl.hpp in Headers */,
|
6753411B1A3F540F00A0A8C3 /* feature_impl.hpp in Headers */,
|
||||||
@@ -1023,7 +1016,6 @@
|
|||||||
6753411C1A3F540F00A0A8C3 /* shared_load_info.cpp in Sources */,
|
6753411C1A3F540F00A0A8C3 /* shared_load_info.cpp in Sources */,
|
||||||
67BC92F41D21476500A4A378 /* string_slice.cpp in Sources */,
|
67BC92F41D21476500A4A378 /* string_slice.cpp in Sources */,
|
||||||
BBB7060F23E46E0100A7F29A /* isolines_info.cpp in Sources */,
|
BBB7060F23E46E0100A7F29A /* isolines_info.cpp in Sources */,
|
||||||
675341071A3F540F00A0A8C3 /* data_factory.cpp in Sources */,
|
|
||||||
408FE47724FEB95600F5D06D /* metadata_serdes.cpp in Sources */,
|
408FE47724FEB95600F5D06D /* metadata_serdes.cpp in Sources */,
|
||||||
34583BCB1C88552100F94664 /* map_object.cpp in Sources */,
|
34583BCB1C88552100F94664 /* map_object.cpp in Sources */,
|
||||||
675B562320D25C9800A521D2 /* feature_source.cpp in Sources */,
|
675B562320D25C9800A521D2 /* feature_source.cpp in Sources */,
|
||||||
|
|||||||
Reference in New Issue
Block a user