TCPSPSuite
configuration.hpp
1 #ifndef CONFIGURATION_H
2 #define CONFIGURATION_H
3 
4 #include "../datastructures/maybe.hpp" // for Maybe
5 #include "../util/filetools.hpp"
6 #include "../util/log.hpp" // for Log
7 #include "solverconfig.hpp" // for SolverConfig
8 
9 #include <string> // for string, allocator
10 #include <vector> // for vector
11 
12 using json = nlohmann::json;
13 
14 class Configuration {
15 public:
16  static Configuration *
17  get()
18  {
19  if (instance == nullptr) {
20  instance = new Configuration;
21  }
22  return instance;
23  }
24 
25  bool parse_cmdline(int argc, const char ** argv);
26 
27  void
28  set_solver_config(SolverConfig sc)
29  {
30  this->solver_cfgs.clear();
31  this->solver_cfgs.push_back(sc);
32  }
33 
34  void
35  set_solver_configs(std::vector<SolverConfig> scs)
36  {
37  this->solver_cfgs = scs;
38  }
39 
40  void
41  read_solver_config(std::string filename)
42  {
43  try {
44  this->solver_cfgs = SolverConfig::read_configs(filename);
45  } catch (json::parse_error e) {
46  BOOST_LOG(l.e()) << "JSON Parsing error in solver configuration.";
47  BOOST_LOG(l.e()) << e.what();
48  BOOST_LOG(l.e()) << "Error is near: ";
49 
50  util::FileContextGiver fcg(filename, e.byte);
51 
52  for (const auto & line : fcg.get_message()) {
53  BOOST_LOG(l.e()) << line;
54  }
55 
56  throw std::move(e);
57  }
58  }
59 
60  const std::vector<SolverConfig> &
61  solver_configs() const
62  {
63  return this->solver_cfgs;
64  }
65 
66  void set_storage_path(std::string path);
67 
68  const std::string & get_storage_path() const;
69 
70  void set_instance_dir(Maybe<std::string> path);
71 
72  const Maybe<std::string> & get_instance_dir() const;
73 
74  void set_instance_file(Maybe<std::string> path);
75 
76  const Maybe<std::string> & get_instance_file() const;
77 
78  void set_algo_config_file(Maybe<std::string> path);
79 
80  const Maybe<std::string> & get_algo_config_file() const;
81 
82  void set_algo_regexp(Maybe<std::string> regex);
83 
84  const Maybe<std::string> & get_algo_regexp() const;
85 
86  void set_time_limit(Maybe<unsigned int> seconds);
87 
88  const Maybe<unsigned int> & get_time_limit() const;
89 
90  void set_run(std::string id);
91 
92  const std::string & get_run() const;
93 
94  void set_instance_seed(Maybe<int> seed);
95 
96  const Maybe<int> & get_instance_seed() const;
97 
98  void set_global_seed(Maybe<int> seed);
99 
100  const Maybe<int> & get_global_seed() const;
101 
102  void set_log_dir(Maybe<std::string> path);
103 
104  const Maybe<std::string> & get_log_dir() const;
105 
106  void set_result_dir(Maybe<std::string> path);
107 
108  const Maybe<std::string> & get_result_dir() const;
109 
110  void set_skip_done(bool skip);
111 
112  bool get_skip_done() const;
113 
114  void set_threads(Maybe<unsigned int> t);
115 
116  Maybe<unsigned int> get_threads() const;
117 
118  bool are_memory_metrics_enabled() const;
119 
120  unsigned int get_meminfo_sampling_time() const;
121 
122  const std::vector<std::string> & get_papi_metrics() const;
123 
124  void set_parallelism(unsigned int p);
125 
126  unsigned int get_parallelism() const;
127 
128  void set_partition_count(unsigned int pc);
129 
130  Maybe<unsigned int> get_partition_count() const;
131 
132  void set_partition_number(unsigned int pn);
133  Maybe<unsigned int> get_partition_number() const;
134 
135  void set_skip_oom(bool skip);
136  bool get_skip_oom() const;
137 
138  void set_thread_check_time(Maybe<double> seconds);
139  Maybe<double> get_thread_check_time() const;
140 
141  Configuration(const Configuration &) = delete;
142 
143 private:
144  Configuration();
145  void set_defaults();
146 
147  static Configuration * instance;
148 
149  // actual options
150  std::string storage_path;
151  Maybe<std::string> instance_dir;
152  Maybe<std::string> instance_file;
153  Maybe<std::string> algo_config_file;
154  Maybe<std::string> algo_regexp;
155  Maybe<unsigned int> time_limit;
156  Maybe<unsigned int> threads;
157  bool enable_memory_metrics;
158  unsigned int meminfo_sampling_time;
159  std::vector<std::string> papi_metrics;
160  unsigned int parallelism;
161  std::string run;
162  bool skip_done;
163  Maybe<int> instance_seed;
164  Maybe<int> global_seed;
165  Maybe<std::string> log_dir;
166  Maybe<std::string> result_dir;
167  Maybe<unsigned int> partition_count;
168  Maybe<unsigned int> partition_number;
169  bool skip_oom;
170  Maybe<double> thread_check_time;
171 
172  std::vector<SolverConfig> solver_cfgs;
173 
174  Log l;
175 };
176 
177 #endif