diff options
author | vng <viktor.govako@gmail.com> | 2010-12-12 17:34:31 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:08:34 +0300 |
commit | 7bcd8b95585b56a2182a8d1099bf0d9394b7bbc9 (patch) | |
tree | 97bf5ee5758fed00edea2216e48cef1f5533396c /indexer/feature_processor.hpp | |
parent | 2dde0d3ee80f91c7e0a5fac53468f7e37fd9a0e3 (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.hpp | 27 |
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(); } } |