From 1937feb153730292fdab89b0f543448421941e08 Mon Sep 17 00:00:00 2001 From: Anatoly Serdtcev Date: Fri, 18 Oct 2019 10:58:17 +0300 Subject: [PATCH] [generator] Add the ability of a big data file sorting --- coding/file_sort.hpp | 16 ++++++++-------- generator/locality_sorter.cpp | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/coding/file_sort.hpp b/coding/file_sort.hpp index ca8377a..cafa28e 100644 --- a/coding/file_sort.hpp +++ b/coding/file_sort.hpp @@ -67,13 +67,13 @@ public: FileReader reader(m_TmpFileName); ItemIndexPairGreater fGreater(m_Less); PriorityQueue q(fGreater); - for (uint32_t i = 0; i < m_ItemCount; i += m_BufferCapacity) + for (uint64_t i = 0; i < m_ItemCount; i += m_BufferCapacity) Push(q, i, reader); while (!q.empty()) { m_OutputSink(q.top().first); - uint32_t const i = q.top().second + 1; + uint64_t const i = q.top().second + 1; q.pop(); if (i % m_BufferCapacity != 0 && i < m_ItemCount) Push(q, i, reader); @@ -105,7 +105,7 @@ private: struct ItemIndexPairGreater { explicit ItemIndexPairGreater(LessT fLess) : m_Less(fLess) {} - inline bool operator()(std::pair const & a, std::pair const & b) const + inline bool operator()(std::pair const & a, std::pair const & b) const { return m_Less(b.first, a.first); } @@ -113,7 +113,7 @@ private: }; using PriorityQueue = - std::priority_queue, std::vector>, + std::priority_queue, std::vector>, ItemIndexPairGreater>; void FlushToTmpFile() @@ -126,11 +126,11 @@ private: m_Buffer.clear(); } - void Push(PriorityQueue & q, uint32_t i, FileReader const & reader) + void Push(PriorityQueue & q, uint64_t i, FileReader const & reader) { T item; - reader.Read(static_cast(i) * sizeof(T), &item, sizeof(T)); - q.push(std::pair(item, i)); + reader.Read(i * sizeof(T), &item, sizeof(T)); + q.push(std::pair(item, i)); } std::string const m_TmpFileName; @@ -138,6 +138,6 @@ private: OutputSinkT & m_OutputSink; std::unique_ptr m_pTmpWriter; std::vector m_Buffer; - uint32_t m_ItemCount; + uint64_t m_ItemCount; LessT m_Less; }; diff --git a/generator/locality_sorter.cpp b/generator/locality_sorter.cpp index 570fcc4..7a1fea6 100644 --- a/generator/locality_sorter.cpp +++ b/generator/locality_sorter.cpp @@ -250,7 +250,7 @@ bool GenerateGeoObjectsData(string const & geoObjectsFeaturesFile, if (!streetFeaturesFile.empty()) { auto features = std::ofstream{geoObjectsAndStreetsFeaturesFile, std::ios_base::binary}; - for (auto const & file : {geoObjectsFeaturesFile , streetFeaturesFile}) + for (auto const & file : {geoObjectsFeaturesFile, streetFeaturesFile}) { auto fileStream = std::ifstream{file, std::ios_base::binary}; features << fileStream.rdbuf();