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:
authorVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-06-29 18:43:32 +0300
committerVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-07-23 10:25:11 +0300
commitec73bce900be6b5379b49200781d2b1f7c4e4411 (patch)
tree9751082508a03ac272125122f35b41d293a9922a /indexer
parent72938d3d53f34256465cfd62c35825c5c8197748 (diff)
Implementing AltitudeLoader instead of using FeatureType for parsing.
Diffstat (limited to 'indexer')
-rw-r--r--indexer/altitude_loader.cpp49
-rw-r--r--indexer/altitude_loader.hpp25
-rw-r--r--indexer/feature.cpp12
-rw-r--r--indexer/feature.hpp8
-rw-r--r--indexer/feature_altitude.hpp4
-rw-r--r--indexer/feature_loader.cpp41
-rw-r--r--indexer/feature_loader.hpp1
-rw-r--r--indexer/feature_loader_base.hpp1
-rw-r--r--indexer/indexer.pro2
-rw-r--r--indexer/old/feature_loader_101.hpp1
10 files changed, 79 insertions, 65 deletions
diff --git a/indexer/altitude_loader.cpp b/indexer/altitude_loader.cpp
new file mode 100644
index 0000000000..66fa124bf8
--- /dev/null
+++ b/indexer/altitude_loader.cpp
@@ -0,0 +1,49 @@
+#include "indexer/altitude_loader.hpp"
+
+#include "base/logging.hpp"
+#include "base/stl_helpers.hpp"
+
+#include "defines.hpp"
+
+namespace feature
+{
+AltitudeLoader::AltitudeLoader(MwmValue const * mwmValue)
+{
+ if (!mwmValue || mwmValue->GetHeader().GetFormat() < version::Format::v8 )
+ return;
+
+ try
+ {
+ m_idx = make_unique<DDVector<TAltitudeIndexEntry, FilesContainerR::TReader>>
+ (mwmValue->m_cont.GetReader(ALTITUDE_FILE_TAG));
+ }
+ catch (Reader::OpenException const &)
+ {
+ LOG(LINFO, ("MWM does not contain", ALTITUDE_FILE_TAG, "section."));
+ }
+}
+
+Altitudes AltitudeLoader::GetAltitudes(uint32_t featureId) const
+{
+ if (!m_idx || m_idx->size() == 0)
+ return Altitudes();
+
+ auto it = lower_bound(m_idx->begin(), m_idx->end(),
+ TAltitudeIndexEntry{static_cast<uint32_t>(featureId), 0, 0},
+ my::LessBy(&TAltitudeIndexEntry::featureId));
+
+ if (it == m_idx->end())
+ return Altitudes();
+
+ if (featureId != it->featureId)
+ {
+ ASSERT(false, ());
+ return Altitudes();
+ }
+
+ if (it->beginAlt == kInvalidAltitude || it->endAlt == kInvalidAltitude)
+ return Altitudes();
+
+ return Altitudes(it->beginAlt, it->endAlt);
+}
+} // namespace feature
diff --git a/indexer/altitude_loader.hpp b/indexer/altitude_loader.hpp
new file mode 100644
index 0000000000..d792b28467
--- /dev/null
+++ b/indexer/altitude_loader.hpp
@@ -0,0 +1,25 @@
+#pragma once
+#include "indexer/feature_altitude.hpp"
+#include "indexer/index.hpp"
+
+#include "coding/dd_vector.hpp"
+
+namespace feature
+{
+class AltitudeLoader
+{
+public:
+ AltitudeLoader(MwmValue const * mwmValue);
+ Altitudes GetAltitudes(uint32_t featureId) const;
+
+private:
+ struct TAltitudeIndexEntry
+ {
+ uint32_t featureId;
+ feature::TAltitude beginAlt;
+ feature::TAltitude endAlt;
+ };
+
+ unique_ptr<DDVector<TAltitudeIndexEntry, FilesContainerR::TReader>> m_idx;
+};
+} // namespace feature
diff --git a/indexer/feature.cpp b/indexer/feature.cpp
index b9cd39253f..b05151515a 100644
--- a/indexer/feature.cpp
+++ b/indexer/feature.cpp
@@ -302,8 +302,7 @@ void FeatureType::Deserialize(feature::LoaderBase * pLoader, TBuffer buffer)
m_pLoader->InitFeature(this);
- m_header2Parsed = m_pointsParsed = m_trianglesParsed = m_metadataParsed = m_altitudeParsed =
- false;
+ m_header2Parsed = m_pointsParsed = m_trianglesParsed = m_metadataParsed = false;
m_innerStats.MakeZero();
}
@@ -376,15 +375,6 @@ void FeatureType::ParseMetadata() const
m_metadataParsed = true;
}
-void FeatureType::ParseAltitude() const
-{
- if (m_altitudeParsed)
- return;
-
- m_pLoader->ParseAltitude();
- m_altitudeParsed = true;
-}
-
StringUtf8Multilang const & FeatureType::GetNames() const
{
return m_params.name;
diff --git a/indexer/feature.hpp b/indexer/feature.hpp
index 458528b3c1..fe5f30c206 100644
--- a/indexer/feature.hpp
+++ b/indexer/feature.hpp
@@ -202,7 +202,6 @@ public:
uint32_t ParseTriangles(int scale) const;
void ParseMetadata() const;
- void ParseAltitude() const;
//@}
/// @name Geometry.
@@ -245,12 +244,6 @@ public:
return m_points[i];
}
- inline feature::Altitudes const & GetAltitudes() const
- {
- ASSERT(m_altitudeParsed, ());
- return m_altitudes;
- }
-
template <typename TFunctor>
void ForEachTriangle(TFunctor && f, int scale) const
{
@@ -377,7 +370,6 @@ private:
mutable bool m_pointsParsed = false;
mutable bool m_trianglesParsed = false;
mutable bool m_metadataParsed = false;
- mutable bool m_altitudeParsed = false;
mutable inner_geom_stat_t m_innerStats;
diff --git a/indexer/feature_altitude.hpp b/indexer/feature_altitude.hpp
index d744499ab9..4d59135342 100644
--- a/indexer/feature_altitude.hpp
+++ b/indexer/feature_altitude.hpp
@@ -16,8 +16,8 @@ struct Altitudes
Altitudes() = default;
Altitudes(TAltitude b, TAltitude e) : begin(b), end(e) {}
- TAltitude begin = 0;
- TAltitude end = 0;
+ TAltitude begin = kInvalidAltitude;
+ TAltitude end = kInvalidAltitude;
};
class Altitude
diff --git a/indexer/feature_loader.cpp b/indexer/feature_loader.cpp
index 4c6609272e..37093182e8 100644
--- a/indexer/feature_loader.cpp
+++ b/indexer/feature_loader.cpp
@@ -292,47 +292,6 @@ void LoaderCurrent::ParseMetadata()
}
}
-void LoaderCurrent::ParseAltitude()
-{
- // @TODO Index and should be used here before merging to master.
-
- if (m_Info.GetMWMFormat() < version::Format::v8)
- return;
-
- struct TAltitudeIndexEntry
- {
- uint32_t featureId;
- feature::TAltitude beginAlt;
- feature::TAltitude endAlt;
- };
-
- try
- {
- DDVector<TAltitudeIndexEntry, FilesContainerR::TReader> idx(m_Info.GetAltitudeReader());
- auto it = lower_bound(idx.begin(), idx.end(),
- TAltitudeIndexEntry{static_cast<uint32_t>(m_pF->m_id.m_index), 0, 0},
- [](TAltitudeIndexEntry const & v1, TAltitudeIndexEntry const & v2)
- {
- return v1.featureId < v2.featureId;
- });
- if (it == idx.end())
- return;
-
- if (m_pF->m_id.m_index != it->featureId)
- return;
-
- if (it->beginAlt == kInvalidAltitude || it->endAlt == kInvalidAltitude)
- return;
-
- m_pF->m_altitudes.begin = it->beginAlt;
- m_pF->m_altitudes.end = it->endAlt;
- }
- catch (Reader::OpenException const &)
- {
- // Now ignore exception because not all mwm have needed sections.
- }
-}
-
int LoaderCurrent::GetScaleIndex(int scale) const
{
int const count = m_Info.GetScalesCount();
diff --git a/indexer/feature_loader.hpp b/indexer/feature_loader.hpp
index 513ca984c3..7788d05446 100644
--- a/indexer/feature_loader.hpp
+++ b/indexer/feature_loader.hpp
@@ -29,6 +29,5 @@ namespace feature
uint32_t ParseGeometry(int scale) override;
uint32_t ParseTriangles(int scale) override;
void ParseMetadata() override;
- void ParseAltitude() override;
};
}
diff --git a/indexer/feature_loader_base.hpp b/indexer/feature_loader_base.hpp
index 2a2b2ff617..78a5179281 100644
--- a/indexer/feature_loader_base.hpp
+++ b/indexer/feature_loader_base.hpp
@@ -79,7 +79,6 @@ namespace feature
virtual uint32_t ParseGeometry(int scale) = 0;
virtual uint32_t ParseTriangles(int scale) = 0;
virtual void ParseMetadata() = 0;
- virtual void ParseAltitude() = 0;
inline uint32_t GetTypesSize() const { return m_CommonOffset - m_TypesOffset; }
diff --git a/indexer/indexer.pro b/indexer/indexer.pro
index 6602f18ddf..f5b6d8e255 100644
--- a/indexer/indexer.pro
+++ b/indexer/indexer.pro
@@ -10,6 +10,7 @@ ROOT_DIR = ..
include($$ROOT_DIR/common.pri)
SOURCES += \
+ altitude_loader.cpp \
categories_holder.cpp \
categories_holder_loader.cpp \
categories_index.cpp \
@@ -61,6 +62,7 @@ SOURCES += \
types_mapping.cpp \
HEADERS += \
+ altitude_loader.hpp \
categories_holder.hpp \
categories_index.hpp \
cell_coverer.hpp \
diff --git a/indexer/old/feature_loader_101.hpp b/indexer/old/feature_loader_101.hpp
index 83f74b8853..00f857d2ce 100644
--- a/indexer/old/feature_loader_101.hpp
+++ b/indexer/old/feature_loader_101.hpp
@@ -37,7 +37,6 @@ namespace old_101 { namespace feature
uint32_t ParseGeometry(int scale) override;
uint32_t ParseTriangles(int scale) override;
void ParseMetadata() override {} /// not supported in this version
- void ParseAltitude() override {} /// not supported in this version
};
}
}