2 #include "clipper/clipper.hpp"
3 #include "common/common.hpp"
4 #include "nlohmann/json_fwd.hpp"
6 #include "util/uuid.hpp"
7 #include "util/uuid_vec.hpp"
15 enum class RulesCheckErrorLevel { NOT_RUN, PASS, WARN, FAIL, DISABLED };
17 Color rules_check_error_level_to_color(RulesCheckErrorLevel lev);
18 std::string rules_check_error_level_to_string(RulesCheckErrorLevel lev);
25 RulesCheckErrorLevel level = RulesCheckErrorLevel::NOT_RUN;
27 UUIDVec instance_path;
30 bool has_location =
false;
31 ClipperLib::Paths error_polygons;
33 json serialize()
const;
40 json serialize()
const;
41 bool check_disabled(
const Rule &rule);
43 RulesCheckErrorLevel level = RulesCheckErrorLevel::NOT_RUN;
46 std::deque<RulesCheckError> errors;
49 typedef std::function<void(
const std::string &)> check_status_cb_t;
54 virtual void load_from_json(
const json &j) = 0;
57 throw std::logic_error(
"import_rules not implemented");
61 virtual json serialize()
const = 0;
62 virtual std::vector<RuleID> get_rule_ids()
const = 0;
64 virtual const Rule &get_rule(RuleID
id)
const = 0;
65 Rule &get_rule(RuleID
id);
66 Rule &get_rule_nc(RuleID
id)
71 template <
typename T>
const T &get_rule_t()
const
73 return dynamic_cast<const T &
>(get_rule(T::id));
76 template <
typename T> T &get_rule_t()
78 return dynamic_cast<T &
>(get_rule(T::id));
81 virtual const Rule &get_rule(RuleID
id,
const UUID &uu)
const = 0;
82 Rule &get_rule(RuleID
id,
const UUID &uu);
84 template <
typename T>
const T &get_rule_t(
const UUID &uu)
const
86 return dynamic_cast<const T &
>(get_rule(T::id, uu));
88 template <
typename T> T &get_rule_t(
const UUID &uu)
90 return dynamic_cast<T &
>(get_rule(T::id, uu));
93 virtual std::map<UUID, const Rule *> get_rules(RuleID
id)
const = 0;
94 std::map<UUID, Rule *> get_rules(RuleID
id);
95 std::map<UUID, Rule *> get_rules_nc(RuleID
id)
100 template <
typename T = Rule> std::vector<const T *> get_rules_sorted(RuleID
id)
const
102 auto rs = get_rules(
id);
103 std::vector<const T *> rv;
104 rv.reserve(rs.size());
105 for (
auto &it : rs) {
106 rv.push_back(
dynamic_cast<const T *
>(it.second));
108 std::sort(rv.begin(), rv.end(), [](
auto a,
auto b) { return a->order < b->order; });
112 template <
typename T> std::vector<const T *> get_rules_sorted()
const
114 return get_rules_sorted<T>(T::id);
117 template <
typename T = Rule> std::vector<T *> get_rules_sorted(RuleID
id)
120 auto rs =
static_cast<const Rules *
>(
this)->get_rules_sorted<T>(
id);
121 r.reserve(rs.size());
122 std::transform(rs.begin(), rs.end(), std::back_inserter(r), [](
auto x) { return const_cast<T *>(x); });
126 template <
typename T> std::vector<T *> get_rules_sorted()
128 return get_rules_sorted<T>(T::id);
131 virtual void remove_rule(RuleID
id,
const UUID &uu) = 0;
132 template <
typename T> T &add_rule_t()
134 return dynamic_cast<T &
>(add_rule(T::id));
136 virtual Rule &add_rule(RuleID
id) = 0;
137 void move_rule(RuleID
id,
const UUID &uu,
int dir);
141 virtual bool can_export()
const
147 void fix_order(RuleID
id);
Definition: common.hpp:267
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
a class to store JSON values
Definition: json.hpp:177
basic_json<> json
default JSON class
Definition: json_fwd.hpp:62