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>2010-12-12 17:34:31 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:08:34 +0300
commit7bcd8b95585b56a2182a8d1099bf0d9394b7bbc9 (patch)
tree97bf5ee5758fed00edea2216e48cef1f5533396c /indexer/feature_processor.hpp
parent2dde0d3ee80f91c7e0a5fac53468f7e37fd9a0e3 (diff)
Remove FeatureBuilder->Feature->FeatureBuilder transformation during .dat file generation.
Generation should be faster now.
Diffstat (limited to 'indexer/feature_processor.hpp')
-rw-r--r--indexer/feature_processor.hpp27
1 files changed, 12 insertions, 15 deletions
diff --git a/indexer/feature_processor.hpp b/indexer/feature_processor.hpp
index 559bfdc931..4ef1b23494 100644
--- a/indexer/feature_processor.hpp
+++ b/indexer/feature_processor.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "feature.hpp"
+#include "data_header_reader.hpp"
#include "../coding/varint.hpp"
#include "../coding/file_reader.hpp"
@@ -9,23 +10,18 @@
namespace feature
{
+ /// Read feature from feature source.
template <class TSource, class TFeature>
- void ReadFromSource(TSource & src, TFeature & ft)
+ void ReadFromSource(TSource & src, TFeature & f)
{
uint32_t const sz = ReadVarUint<uint32_t>(src);
vector<char> buffer(sz);
src.Read(&buffer[0], sz);
- ft.Deserialize(buffer);
+ f.Deserialize(buffer);
}
- /// @return total header size, which should be skipped for data read, or 0 if error
- inline uint64_t ReadDatHeaderSize(Reader const & reader)
- {
- uint64_t const headerSize = ReadPrimitiveFromPos<uint64_t>(reader, 0);
- return headerSize + sizeof(uint64_t);
- }
-
- template <class ToDo>
+ /// Process features in .dat file.
+ template <class TFeature, class ToDo>
void ForEachFromDat(string const & fName, ToDo & toDo)
{
typedef ReaderSource<FileReader> source_t;
@@ -33,16 +29,17 @@ namespace feature
FileReader reader(fName);
source_t src(reader);
- // skip xml header
- uint64_t currPos = ReadDatHeaderSize(reader);
+ // skip header
+ uint64_t currPos = feature::GetSkipHeaderSize(reader);
src.Skip(currPos);
+
uint64_t const fSize = reader.Size();
// read features one by one
while (currPos < fSize)
{
- FeatureGeom ft;
- ReadFromSource(src, ft);
- toDo(ft, currPos);
+ TFeature f;
+ ReadFromSource(src, f);
+ toDo(f, currPos);
currPos = src.Pos();
}
}