diff options
author | Sergey Yershov <yershov@corp.mail.ru> | 2015-07-16 13:44:54 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:56:22 +0300 |
commit | c82b3e927f383a5a77863bd58b74ac1bbdc3675d (patch) | |
tree | 4f82982b333328f9648b9fb0b666ddbd8b234807 /generator/feature_generator.cpp | |
parent | 04d6c457c8091cffe2cc737b874f47c095bdc274 (diff) |
Refactor based on review comments
Diffstat (limited to 'generator/feature_generator.cpp')
-rw-r--r-- | generator/feature_generator.cpp | 72 |
1 files changed, 35 insertions, 37 deletions
diff --git a/generator/feature_generator.cpp b/generator/feature_generator.cpp index 5eb1e9c17a..94f69bb213 100644 --- a/generator/feature_generator.cpp +++ b/generator/feature_generator.cpp @@ -19,21 +19,15 @@ #include "std/unordered_map.hpp" #include "std/target_os.hpp" - /////////////////////////////////////////////////////////////////////////////////////////////////// // FeaturesCollector implementation /////////////////////////////////////////////////////////////////////////////////////////////////// -namespace feature { - -FeaturesCollector::FeaturesCollector(string const & fName, string const &dumpFileName) -: m_datFile(fName) -, m_dumpFileName(dumpFileName) +namespace feature +{ +FeaturesCollector::FeaturesCollector(string const & fName) + : m_datFile(fName) { CHECK_EQUAL(GetFileSize(m_datFile), 0, ()); - if (!m_dumpFileName.empty()) - { - m_dumpFileStream.open(m_dumpFileName.c_str(), ios::binary | ios::trunc | ios::out); - } } FeaturesCollector::~FeaturesCollector() @@ -41,13 +35,6 @@ FeaturesCollector::~FeaturesCollector() FlushBuffer(); /// Check file size (void)GetFileSize(m_datFile); - if (!m_dumpFileName.empty()) - { - uint64_t terminator = 0; - m_dumpFileStream.write(reinterpret_cast<char *>(&terminator), sizeof(terminator)); - m_dumpFileStream.close(); - LOG(LINFO, ("Dumped", m_featureCounter, "features into", m_dumpFileName)); - } } uint32_t FeaturesCollector::GetFileSize(FileWriter const & f) @@ -60,7 +47,7 @@ uint32_t FeaturesCollector::GetFileSize(FileWriter const & f) return ret; } -template <typename ValueT, size_t ValueSizeT = sizeof(ValueT)+1> +template <typename ValueT, size_t ValueSizeT = sizeof(ValueT) + 1> pair<char[ValueSizeT], uint8_t> PackValue(ValueT v) { static_assert(is_integral<ValueT>::value, "Non integral value"); @@ -90,7 +77,7 @@ void FeaturesCollector::Flush() m_datFile.Flush(); } -void FeaturesCollector::Write(char const *src, size_t size) +void FeaturesCollector::Write(char const * src, size_t size) { do { @@ -101,10 +88,9 @@ void FeaturesCollector::Write(char const *src, size_t size) m_writePosition += part_size; size -= part_size; src += part_size; - } while(size > 0); + } while (size > 0); } - uint32_t FeaturesCollector::WriteFeatureBase(vector<char> const & bytes, FeatureBuilder1 const & fb) { size_t const sz = bytes.size(); @@ -121,32 +107,44 @@ uint32_t FeaturesCollector::WriteFeatureBase(vector<char> const & bytes, Feature return static_cast<uint32_t>(offset); } -void FeaturesCollector::DumpFeatureGeometry(FeatureBuilder1 const & fb) +void FeaturesCollector::operator()(FeatureBuilder1 const & fb) +{ + FeatureBuilder1::buffer_t bytes; + fb.Serialize(bytes); + (void)WriteFeatureBase(bytes, fb); +} + +FeaturesAndRawGeometryCollector::FeaturesAndRawGeometryCollector(string const & featuresFileName, + string const & rawGeometryFileName) + : FeaturesCollector(featuresFileName), m_rawGeometryFileStream(rawGeometryFileName) { + CHECK_EQUAL(GetFileSize(m_rawGeometryFileStream), 0, ()); +} + +FeaturesAndRawGeometryCollector::~FeaturesAndRawGeometryCollector() +{ + uint64_t terminator = 0; + m_rawGeometryFileStream.Write(&terminator, sizeof(terminator)); + LOG(LINFO, ("Write", m_rawGeometryCounter, "geometries into", m_rawGeometryFileStream.GetName())); +} + +void FeaturesAndRawGeometryCollector::operator()(FeatureBuilder1 const & fb) +{ + FeaturesCollector::operator()(fb); FeatureBuilder1::TGeometry const & geom = fb.GetGeometry(); if (geom.empty()) return; - ++m_featureCounter; + ++m_rawGeometryCounter; uint64_t numGeometries = geom.size(); - m_dumpFileStream.write(reinterpret_cast<char *>(&numGeometries), sizeof(numGeometries)); + m_rawGeometryFileStream.Write(&numGeometries, sizeof(numGeometries)); for (FeatureBuilder1::TPointSeq const & points : geom) { uint64_t numPoints = points.size(); - m_dumpFileStream.write(reinterpret_cast<char *>(&numPoints), sizeof(numPoints)); - m_dumpFileStream.write(reinterpret_cast<char const *>(points.data()), sizeof(FeatureBuilder1::TPointSeq::value_type) * points.size()); + m_rawGeometryFileStream.Write(&numPoints, sizeof(numPoints)); + m_rawGeometryFileStream.Write(points.data(), + sizeof(FeatureBuilder1::TPointSeq::value_type) * points.size()); } } - -void FeaturesCollector::operator() (FeatureBuilder1 const & fb) -{ - FeatureBuilder1::buffer_t bytes; - fb.Serialize(bytes); - (void)WriteFeatureBase(bytes, fb); - - if (!m_dumpFileName.empty()) - DumpFeatureGeometry(fb); -} - } |