Scorum
config_api.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory>
4 
5 #include <boost/program_options.hpp>
6 #include <map>
7 #include <type_traits>
8 
9 #include <fc/reflect/reflect.hpp>
10 
11 namespace scorum {
12 
14 {
15  const std::string _api_name;
16 
17  uint32_t _max_blockchain_history_depth = 100;
18  uint32_t _max_blocks_history_depth = 100;
19  uint32_t _max_budgets_list_size = 100;
20  uint32_t _max_discussions_list_size = 100;
21  uint32_t _lookup_limit = 1000;
22  uint32_t _tags_to_analize_count = 8; // also includes category, domain, language
23  uint32_t _max_timestamp_range_in_s = 60 * 30; // 30 minutes
24 
25 public:
27  const uint32_t& max_blocks_history_depth;
28  const uint32_t& max_budgets_list_size;
29  const uint32_t& max_discussions_list_size;
30  const uint32_t& lookup_limit;
31  const uint32_t& tags_to_analize_count;
32  const uint32_t& max_timestamp_range_in_s;
33 
34  boost::program_options::options_description get_options_descriptions() const;
35  void set_options(const boost::program_options::variables_map& options);
36 
37  const std::string& api_name() const
38  {
39  return _api_name;
40  }
41 
42 protected:
43  config_api() = delete;
44  config_api(const std::string& api_name);
46 
47 private:
48  static const std::string default_api_name;
49 
50  friend config_api& get_api_config(std::string api_name);
51 
52  template <typename MemberType>
53  void get_option_description(boost::program_options::options_description_easy_init&, const char* member_name) const;
54  template <typename MemberType>
55  void set_option(const boost::program_options::variables_map&, MemberType&, const char* member_name);
56 
57  std::string get_option_name(const char* field, const std::string& api_name) const;
58  std::string get_option_description(const char* field) const;
59 
60  using configs_by_api_type = std::map<std::string, std::unique_ptr<config_api>>;
61  static configs_by_api_type _instances_by_api;
62 };
63 
64 config_api& get_api_config(std::string api_name = std::string());
65 }
66 
67 #define MAX_BLOCKCHAIN_HISTORY_DEPTH (get_api_config().max_blockchain_history_depth)
68 #define MAX_BLOCKS_HISTORY_DEPTH (get_api_config().max_blocks_history_depth)
69 #define MAX_BUDGETS_LIST_SIZE (get_api_config().max_budgets_list_size)
70 #define MAX_DISCUSSIONS_LIST_SIZE (get_api_config().max_discussions_list_size)
71 #define LOOKUP_LIMIT (get_api_config().lookup_limit)
72 #define TAGS_TO_ANALIZE_COUNT (get_api_config().tags_to_analize_count)
73 #define MAX_TIMESTAMP_RANGE_IN_S (get_api_config().max_timestamp_range_in_s)
void set_options(const boost::program_options::variables_map &options)
Definition: config_api.cpp:62
const uint32_t & max_timestamp_range_in_s
Definition: config_api.hpp:32
boost::program_options::options_description get_options_descriptions() const
Definition: config_api.cpp:48
const uint32_t & max_blocks_history_depth
Definition: config_api.hpp:27
const std::string & api_name() const
Definition: config_api.hpp:37
const uint32_t & tags_to_analize_count
Definition: config_api.hpp:31
const uint32_t & max_budgets_list_size
Definition: config_api.hpp:28
const uint32_t & lookup_limit
Definition: config_api.hpp:30
friend config_api & get_api_config(std::string api_name)
Definition: config_api.cpp:114
const uint32_t & max_discussions_list_size
Definition: config_api.hpp:29
const uint32_t & max_blockchain_history_depth
Definition: config_api.hpp:26
Definition: asset.cpp:15
config_api & get_api_config(std::string api_name)
Definition: config_api.cpp:114