29 #ifndef GRAPHGEN_RULE_SET_H_
30 #define GRAPHGEN_RULE_SET_H_
36 #include <unordered_map>
60 static std::string
binary(
size_t u,
size_t nbits,
const std::string& separator =
"") {
63 s += ((u >> nbits) & 1) + 48;
111 rules.resize(nrules);
112 for (
uint i = 0; i < nrules; ++i) {
118 copy(std::rbegin(
conditions), std::rend(
conditions), std::ostream_iterator<std::string>(os,
"\t"));
120 for (
size_t i = 0; i <
rules.size(); ++i) {
143 std::ofstream os(output_file);
148 for (
size_t i = 0; i <
rules.size(); ++i) {
149 os <<
rules[i].frequency <<
"\n";
154 std::ifstream is(file_path);
160 unsigned long long freq;
162 rules[i].frequency = freq;
174 rs_node[
"conditions"].push_back(c);
177 for (
const auto& a :
actions) {
178 rs_node[
"actions"].push_back(a);
181 bool with_freq =
false;
182 for (
unsigned i = 0; i <
rules.size(); ++i) {
188 rs_node[
"frequencies"].push_back(
rules[i].frequency);
189 if (
rules[i].frequency != 1) {
195 rs_node.remove(
"frequencies");
206 for (
unsigned i = 0; i < rs_node[
"conditions"].size(); ++i) {
207 AddCondition(rs_node[
"conditions"][i].as<std::string>());
210 for (
unsigned i = 0; i < rs_node[
"actions"].size(); ++i) {
211 AddAction(rs_node[
"actions"][i].as<std::string>());
214 rules.resize(rs_node[
"rules"].size());
215 for (
unsigned i = 0; i < rs_node[
"rules"].size(); ++i) {
216 for (
unsigned j = 0; j < rs_node[
"rules"][i].size(); ++j) {
217 rules[i].actions.set(rs_node[
"rules"][i][j].as<int>() - 1);
218 if (
auto& frequencies = rs_node[
"frequencies"]) {
219 rules[i].frequency = frequencies[i].as<
unsigned long long>();
std::vector< pixel > pixels_
YAML::Node Serialize() const
void generate_rules(T fn)
void Deserialize(const YAML::Node &rs_node)
uint get_condition(const std::string &s, uint rule) const
uint GetNumberOfRules() const
void AddAction(const std::string &action)
YAML::Node Serialize() const
void StoreFrequenciesOnFile(const std::string &output_file) const
void print_rules(std::ostream &os) const
static std::string binary(size_t u, size_t nbits, const std::string &separator="")
bool LoadFrequenciesFromFile(const std::string &file_path)
void set_action(const std::string &s, uint rule)
std::vector< rule > rules
std::unordered_map< std::string, size_t > conditions_pos
void SetFrequency(uint rule, uint frequency)
std::vector< std::string > actions
void InitConditions(const pixel_set &ps)
rule_set(YAML::Node &node)
std::unordered_map< std::string, size_t > actions_pos
void InitActions(std::vector< std::string > actions_)
std::vector< std::string > conditions
void AddCondition(const std::string &name)
rule_wrapper(rule_set &rs, uint i)
bool operator[](const std::string &s) const
void operator<<(const std::string &s)
std::bitset< 131 > actions
unsigned long long frequency