From 3d728f054e3c214f840b7e63539aea0c4c5246b5 Mon Sep 17 00:00:00 2001 From: Spartan322 Date: Thu, 19 Oct 2023 19:56:06 -0400 Subject: Add Defines Loading Caches start_date and end_date in DefineManager Add static `get_property` and HASID_PROPERTY macro to HasIdentifier --- src/openvic-simulation/misc/Define.hpp | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/openvic-simulation/misc/Define.hpp (limited to 'src/openvic-simulation/misc/Define.hpp') diff --git a/src/openvic-simulation/misc/Define.hpp b/src/openvic-simulation/misc/Define.hpp new file mode 100644 index 0000000..9b768b7 --- /dev/null +++ b/src/openvic-simulation/misc/Define.hpp @@ -0,0 +1,63 @@ +#pragma once + +#include +#include + +#include "openvic-simulation/types/IdentifierRegistry.hpp" +#include "openvic-simulation/types/fixed_point/FixedPoint.hpp" + +namespace OpenVic { + struct DefineManager; + + struct Define : HasIdentifier { + friend struct DefineManager; + + enum class Type : unsigned char { + None, + Country, + Economy, + Military, + Diplomacy, + Pops, + Ai, + Graphics + }; + + private: + std::string HASID_PROPERTY(value); + Type HASID_PROPERTY(type); + + Define( + std::string_view new_identifier, + std::string&& new_value, + Type new_type + ); + + public: + Define(Define&&) = default; + + fixed_point_t get_value_as_fp() const; + int64_t get_value_as_int() const; + uint64_t get_value_as_uint() const; + }; + + struct DefineManager { + private: + IdentifierRegistry defines; + + std::unique_ptr start_date = nullptr; + std::unique_ptr end_date = nullptr; + + public: + DefineManager(); + + bool add_define(std::string_view name, std::string&& value, Define::Type type); + bool add_date_define(std::string_view name, Date date); + IDENTIFIER_REGISTRY_ACCESSORS(define); + + const Date& get_start_date() const; + const Date& get_end_date() const; + + bool load_defines_file(ast::NodeCPtr root); + }; +} \ No newline at end of file -- cgit v1.2.3-56-ga3b1