4 #include "../datastructures/maybe.hpp"
5 #include "../util/log.hpp"
9 using json = nlohmann::json;
10 using json_entry = json::basic_json::value_type;
16 #include <unordered_set>
22 SolverConfig(std::string name, std::string id_str,
23 std::map<std::string, json_entry> values,
24 Maybe<unsigned int> time_limit,
bool enable_memory_metrics,
25 unsigned int meminfo_sampling_time,
26 std::vector<std::string> papi_metrics, Maybe<int> seed);
28 const json_entry & operator[](
const std::string & key)
const;
29 bool has_config(
const std::string & key)
const;
30 const std::map<std::string, json_entry> & get_kvs()
const;
31 bool as_bool(
const std::string & key)
const;
33 const std::string & get_name()
const;
34 const std::string & get_id()
const;
35 bool match(std::string match_id)
const;
36 Maybe<unsigned int> get_time_limit()
const;
38 bool are_memory_metrics_enabled()
const;
39 unsigned int get_meminfo_sampling_time()
const;
40 const std::vector<std::string> & get_papi_metrics()
const;
42 bool was_seed_set()
const;
43 void override_seed(
int seed);
44 void override_config(
const std::string & key,
const std::string & value);
47 void check_all_keys_queried()
const;
49 static std::vector<SolverConfig> read_configs(
const std::string & filename);
50 static std::vector<SolverConfig> read_configs(json jsonConfig);
53 std::map<std::string, json_entry> values;
55 mutable std::unordered_set<std::string> requested_keys;
58 std::regex id_matcher;
60 Maybe<unsigned int> time_limit;
62 bool enable_memory_metrics;
63 unsigned int meminfo_sampling_time;
64 std::vector<std::string> papi_metrics;
68 std::string dbg_serialization;
79 struct hash<SolverConfig>
82 operator()(
const SolverConfig & sc)
const noexcept
84 size_t hashval = std::hash<std::string>{}(sc.get_name());
85 hashval ^= std::hash<std::string>{}(sc.get_id());
86 if (sc.get_time_limit().valid()) {
87 hashval ^= std::hash<unsigned int>{}(sc.get_time_limit().value());
92 for (
const auto & kv_entry : sc.get_kvs()) {
93 hashval ^= (std::hash<std::string>{}(kv_entry.first) *
94 std::hash<std::string>{}(kv_entry.second.dump()));