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:
authorvng <viktor.govako@gmail.com>2011-09-17 00:04:38 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:23:58 +0300
commit2872bfbffbc79ac4ad920362eaed5731171dcc08 (patch)
tree522fc3b255804abb4bd0112b8edb54ed12b7db6e /indexer/feature_loader.cpp
parent3e2ecdc1447f63f2f5f376370a60bd2bd7e21840 (diff)
[Reduce mwm size] Store first point once in header for outer linear features.
Diffstat (limited to 'indexer/feature_loader.cpp')
-rw-r--r--indexer/feature_loader.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/indexer/feature_loader.cpp b/indexer/feature_loader.cpp
index 64c093828b..fed7c4cee8 100644
--- a/indexer/feature_loader.cpp
+++ b/indexer/feature_loader.cpp
@@ -127,6 +127,8 @@ void LoaderCurrent::ParseHeader2()
ArrayByteSource src(bitSource.RoundPtr());
+ serial::CodingParams const & cp = GetDefCodingParams();
+
if (h & HEADER_GEOM_LINE)
{
if (ptsCount > 0)
@@ -142,13 +144,16 @@ void LoaderCurrent::ParseHeader2()
char const * start = static_cast<char const *>(src.Ptr());
- src = ArrayByteSource(serial::LoadInnerPath(
- src.Ptr(), ptsCount, GetDefCodingParams(), m_pF->m_Points));
+ src = ArrayByteSource(serial::LoadInnerPath(src.Ptr(), ptsCount, cp, m_pF->m_Points));
m_pF->m_InnerStats.m_Points = static_cast<char const *>(src.Ptr()) - start;
}
else
+ {
+ m_pF->m_Points.push_back(serial::LoadPoint(src, cp));
+
ReadOffsets(src, ptsMask, m_ptsOffsets);
+ }
}
if (h & HEADER_GEOM_AREA)
@@ -160,8 +165,7 @@ void LoaderCurrent::ParseHeader2()
char const * start = static_cast<char const *>(src.Ptr());
FeatureType::points_t points;
- src = ArrayByteSource(serial::LoadInnerTriangles(
- src.Ptr(), trgCount, GetDefCodingParams(), points));
+ src = ArrayByteSource(serial::LoadInnerTriangles(src.Ptr(), trgCount, cp, points));
m_pF->m_InnerStats.m_Strips = static_cast<char const *>(src.Ptr()) - start;
@@ -184,15 +188,21 @@ uint32_t LoaderCurrent::ParseGeometry(int scale)
uint32_t sz = 0;
if (Header() & HEADER_GEOM_LINE)
{
- if (m_pF->m_Points.empty())
+ size_t const count = m_pF->m_Points.size();
+ if (count < 2)
{
+ ASSERT_EQUAL ( count, 1, () );
+
// outer geometry
int const ind = GetScaleIndex(scale, m_ptsOffsets);
if (ind != -1)
{
ReaderSource<FilesContainerR::ReaderT> src(m_Info.GetGeometryReader(ind));
src.Skip(m_ptsOffsets[ind]);
- serial::LoadOuterPath(src, GetCodingParams(ind), m_pF->m_Points);
+
+ serial::CodingParams cp = GetCodingParams(ind);
+ cp.SetBasePoint(m_pF->m_Points[0]);
+ serial::LoadOuterPath(src, cp, m_pF->m_Points);
sz = static_cast<uint32_t>(src.Pos() - m_ptsOffsets[ind]);
}
@@ -201,7 +211,6 @@ uint32_t LoaderCurrent::ParseGeometry(int scale)
{
// filter inner geometry
- size_t const count = m_pF->m_Points.size();
FeatureType::points_t points;
points.reserve(count);