Welcome to mirror list, hosted at ThFree Co, Russian Federation.

raw_generator.hpp « generator - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: fd4911119b4f8ec9b2a34cf15512daab05227ab4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#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 <memory>
#include <queue>
#include <string>
#include <vector>

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<TranslatorInterface> const & translator);
  void GenerateCustom(
      std::shared_ptr<TranslatorInterface> const & translator,
      std::shared_ptr<FinalProcessorIntermediateMwmInterface> const & finalProcessor);
  bool Execute();
  std::vector<std::string> const & GetNames() const;
  std::shared_ptr<FeatureProcessorQueue> GetQueue();
  void ForceReloadCache();

private:
  using FinalProcessorPtr = std::shared_ptr<FinalProcessorIntermediateMwmInterface>;

  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<cache::IntermediateData> m_cache;
  std::shared_ptr<FeatureProcessorQueue> m_queue;
  std::shared_ptr<TranslatorCollection> m_translators;
  std::priority_queue<FinalProcessorPtr, std::vector<FinalProcessorPtr>, FinalProcessorPtrCmp>
      m_finalProcessors;
  std::vector<std::string> m_names;
  std::unordered_set<CompositeId> m_hierarchyNodesSet;
};
}  // namespace generator