1 #ifndef CONFIGURATION_H
2 #define CONFIGURATION_H
4 #include "../datastructures/maybe.hpp"
5 #include "../util/filetools.hpp"
6 #include "../util/log.hpp"
7 #include "solverconfig.hpp"
12 using json = nlohmann::json;
16 static Configuration *
19 if (instance ==
nullptr) {
20 instance =
new Configuration;
25 bool parse_cmdline(
int argc,
const char ** argv);
28 set_solver_config(SolverConfig sc)
30 this->solver_cfgs.clear();
31 this->solver_cfgs.push_back(sc);
35 set_solver_configs(std::vector<SolverConfig> scs)
37 this->solver_cfgs = scs;
41 read_solver_config(std::string filename)
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: ";
50 util::FileContextGiver fcg(filename, e.byte);
52 for (
const auto & line : fcg.get_message()) {
53 BOOST_LOG(l.e()) << line;
60 const std::vector<SolverConfig> &
61 solver_configs()
const
63 return this->solver_cfgs;
66 void set_storage_path(std::string path);
68 const std::string & get_storage_path()
const;
70 void set_instance_dir(Maybe<std::string> path);
72 const Maybe<std::string> & get_instance_dir()
const;
74 void set_instance_file(Maybe<std::string> path);
76 const Maybe<std::string> & get_instance_file()
const;
78 void set_algo_config_file(Maybe<std::string> path);
80 const Maybe<std::string> & get_algo_config_file()
const;
82 void set_algo_regexp(Maybe<std::string> regex);
84 const Maybe<std::string> & get_algo_regexp()
const;
86 void set_time_limit(Maybe<unsigned int> seconds);
88 const Maybe<unsigned int> & get_time_limit()
const;
90 void set_run(std::string
id);
92 const std::string & get_run()
const;
94 void set_instance_seed(Maybe<int> seed);
96 const Maybe<int> & get_instance_seed()
const;
98 void set_global_seed(Maybe<int> seed);
100 const Maybe<int> & get_global_seed()
const;
102 void set_log_dir(Maybe<std::string> path);
104 const Maybe<std::string> & get_log_dir()
const;
106 void set_result_dir(Maybe<std::string> path);
108 const Maybe<std::string> & get_result_dir()
const;
110 void set_skip_done(
bool skip);
112 bool get_skip_done()
const;
114 void set_threads(Maybe<unsigned int> t);
116 Maybe<unsigned int> get_threads()
const;
118 bool are_memory_metrics_enabled()
const;
120 unsigned int get_meminfo_sampling_time()
const;
122 const std::vector<std::string> & get_papi_metrics()
const;
124 void set_parallelism(
unsigned int p);
126 unsigned int get_parallelism()
const;
128 void set_partition_count(
unsigned int pc);
130 Maybe<unsigned int> get_partition_count()
const;
132 void set_partition_number(
unsigned int pn);
133 Maybe<unsigned int> get_partition_number()
const;
135 void set_skip_oom(
bool skip);
136 bool get_skip_oom()
const;
138 void set_thread_check_time(Maybe<double> seconds);
139 Maybe<double> get_thread_check_time()
const;
141 Configuration(
const Configuration &) =
delete;
147 static Configuration * instance;
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;
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;
170 Maybe<double> thread_check_time;
172 std::vector<SolverConfig> solver_cfgs;