#pragma once #include "generator/composite_id.hpp" #include "generator/features_processing_helpers.hpp" #include "generator/final_processor_interface.hpp" #include "generator/generate_info.hpp" #include "generator/intermediate_data.hpp" #include "generator/translator_collection.hpp" #include "generator/translator_interface.hpp" #include #include #include #include namespace generator { class RawGenerator { public: explicit RawGenerator(feature::GenerateInfo & genInfo, size_t threadsCount = 1, size_t chunkSize = 1024); void GenerateCountries(bool addAds = false); void GenerateWorld(bool addAds = false); void GenerateCoasts(); void GenerateCustom(std::shared_ptr const & translator); void GenerateCustom( std::shared_ptr const & translator, std::shared_ptr const & finalProcessor); bool Execute(); std::vector const & GetNames() const; std::shared_ptr GetQueue(); void ForceReloadCache(); private: using FinalProcessorPtr = std::shared_ptr; struct FinalProcessorPtrCmp { bool operator()(FinalProcessorPtr const & l, FinalProcessorPtr const & r) { return *l < *r; } }; FinalProcessorPtr CreateCoslineFinalProcessor(); FinalProcessorPtr CreateCountryFinalProcessor(bool needMixNodes = false); FinalProcessorPtr CreateWorldFinalProcessor(); bool GenerateFilteredFeatures(); feature::GenerateInfo & m_genInfo; size_t m_threadsCount; size_t m_chunkSize; cache::IntermediateDataObjectsCache m_intermediateDataObjectsCache; std::shared_ptr m_cache; std::shared_ptr m_queue; std::shared_ptr m_translators; std::priority_queue, FinalProcessorPtrCmp> m_finalProcessors; std::vector m_names; std::unordered_set m_hierarchyNodesSet; }; } // namespace generator