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:
authorYuri Gorshenin <y@maps.me>2016-07-25 18:35:32 +0300
committerYuri Gorshenin <y@maps.me>2016-07-28 14:58:18 +0300
commita96ae703e5baac9177bed1e2f1d15cb0046a4a88 (patch)
tree299da32161bfedf17babfc8b13ddf0db66f8a80b /indexer/centers_table.cpp
parentab5367c9e5be1df6ef294a8976347ce1b70654ac (diff)
[search] Added centers table usage.
Diffstat (limited to 'indexer/centers_table.cpp')
-rw-r--r--indexer/centers_table.cpp46
1 files changed, 21 insertions, 25 deletions
diff --git a/indexer/centers_table.cpp b/indexer/centers_table.cpp
index c3f42e8b94..72101e618c 100644
--- a/indexer/centers_table.cpp
+++ b/indexer/centers_table.cpp
@@ -1,10 +1,11 @@
#include "indexer/centers_table.hpp"
-#include "indexer/coding_params.hpp"
+#include "indexer/feature_processor.hpp"
#include "indexer/geometry_coding.hpp"
#include "indexer/point_to_int64.hpp"
#include "coding/endianness.hpp"
+#include "coding/file_container.hpp"
#include "coding/memory_region.hpp"
#include "coding/reader.hpp"
#include "coding/succinct_mapper.hpp"
@@ -262,17 +263,21 @@ unique_ptr<CentersTable> CentersTable::Load(Reader & reader,
}
// CentersTableBuilder -----------------------------------------------------------------------------
-CentersTableBuilder::CentersTableBuilder(Writer & writer, serial::CodingParams const & codingParams)
- : m_writer(writer), m_codingParams(codingParams)
+void CentersTableBuilder::Put(uint32_t featureId, m2::PointD const & center)
{
+ if (!m_ids.empty())
+ CHECK_LESS(m_ids.back(), featureId, ());
+
+ m_centers.push_back(PointD2PointU(center, m_codingParams.GetCoordBits()));
+ m_ids.push_back(featureId);
}
-CentersTableBuilder::~CentersTableBuilder()
+void CentersTableBuilder::Freeze(Writer & writer)
{
CentersTableV0::Header header;
- int64_t const startOffset = m_writer.Pos();
- header.Write(m_writer);
+ int64_t const startOffset = writer.Pos();
+ header.Write(writer);
{
uint64_t const numBits = m_ids.empty() ? 0 : m_ids.back() + 1;
@@ -281,7 +286,7 @@ CentersTableBuilder::~CentersTableBuilder()
for (auto const & id : m_ids)
builder.set(id, true);
- coding::FreezeVisitor<Writer> visitor(m_writer);
+ coding::FreezeVisitor<Writer> visitor(writer);
succinct::rs_bit_vector(&builder).map(visitor);
}
@@ -310,30 +315,21 @@ CentersTableBuilder::~CentersTableBuilder()
for (auto const & offset : offsets)
builder.push_back(offset);
- header.m_positionsOffset = m_writer.Pos();
- coding::FreezeVisitor<Writer> visitor(m_writer);
+ header.m_positionsOffset = writer.Pos() - startOffset;
+ coding::FreezeVisitor<Writer> visitor(writer);
succinct::elias_fano(&builder).map(visitor);
}
{
- header.m_deltasOffset = m_writer.Pos();
- m_writer.Write(deltas.data(), deltas.size());
- header.m_endOffset = m_writer.Pos();
+ header.m_deltasOffset = writer.Pos() - startOffset;
+ writer.Write(deltas.data(), deltas.size());
+ header.m_endOffset = writer.Pos() - startOffset;
}
- int64_t const endOffset = m_writer.Pos();
-
- m_writer.Seek(startOffset);
- header.Write(m_writer);
- m_writer.Seek(endOffset);
-}
+ int64_t const endOffset = writer.Pos();
-void CentersTableBuilder::Put(uint32_t featureId, m2::PointD const & center)
-{
- if (!m_ids.empty())
- CHECK_LESS(m_ids.back(), featureId, ());
-
- m_centers.push_back(PointD2PointU(center, m_codingParams.GetCoordBits()));
- m_ids.push_back(featureId);
+ writer.Seek(startOffset);
+ header.Write(writer);
+ writer.Seek(endOffset);
}
} // namespace search