From dfa42bc38ebc34904b2325a88cdd16514044cfcb Mon Sep 17 00:00:00 2001 From: hop311 Date: Tue, 26 Dec 2023 22:40:50 +0000 Subject: Added political/policy rules --- src/openvic-simulation/politics/Rule.hpp | 57 ++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/openvic-simulation/politics/Rule.hpp (limited to 'src/openvic-simulation/politics/Rule.hpp') diff --git a/src/openvic-simulation/politics/Rule.hpp b/src/openvic-simulation/politics/Rule.hpp new file mode 100644 index 0000000..260fb9e --- /dev/null +++ b/src/openvic-simulation/politics/Rule.hpp @@ -0,0 +1,57 @@ +#pragma once + +#include "openvic-simulation/types/IdentifierRegistry.hpp" + +namespace OpenVic { + struct RuleManager; + + struct Rule : HasIdentifier { + friend struct RuleManager; + + private: + Rule(std::string_view new_identifier); + + public: + Rule(Rule&&) = default; + }; + + struct RuleSet { + friend struct RuleManager; + + using rule_map_t = std::map; + + private: + rule_map_t rules; + + public: + RuleSet() = default; + RuleSet(rule_map_t&& new_rules); + RuleSet(RuleSet const&) = default; + RuleSet(RuleSet&&) = default; + + RuleSet& operator=(RuleSet const&) = default; + RuleSet& operator=(RuleSet&&) = default; + + size_t get_rule_count() const; + + bool get_rule(Rule const* rule, bool* successful = nullptr); + bool has_rule(Rule const* rule) const; + + RuleSet& operator|=(RuleSet const& right); + RuleSet operator|(RuleSet const& right) const; + + friend std::ostream& operator<<(std::ostream& stream, RuleSet const& value); + }; + + struct RuleManager { + private: + IdentifierRegistry IDENTIFIER_REGISTRY(rule); + + public: + bool add_rule(std::string_view identifier); + + bool setup_rules(); + + NodeTools::node_callback_t expect_rule_set(NodeTools::callback_t ruleset_callback) const; + }; +} -- cgit v1.2.3-56-ga3b1