#pragma once #include #include "openvic-simulation/country/Country.hpp" #include "openvic-simulation/economy/BuildingType.hpp" #include "openvic-simulation/economy/Good.hpp" #include "openvic-simulation/history/HistoryMap.hpp" #include "openvic-simulation/map/Province.hpp" #include "openvic-simulation/map/TerrainType.hpp" #include "openvic-simulation/types/OrderedContainers.hpp" namespace OpenVic { struct ProvinceHistoryMap; struct ProvinceHistoryEntry : HistoryEntry { friend struct ProvinceHistoryMap; private: Province const& PROPERTY(province); std::optional PROPERTY(owner); std::optional PROPERTY(controller); std::optional PROPERTY(colonial); std::optional PROPERTY(slave); std::vector PROPERTY(add_cores); std::vector PROPERTY(remove_cores); std::optional PROPERTY(rgo); std::optional PROPERTY(life_rating); std::optional PROPERTY(terrain_type); ordered_map PROPERTY(province_buildings); ordered_map PROPERTY(state_buildings); fixed_point_map_t PROPERTY(party_loyalties); std::vector PROPERTY(pops); ProvinceHistoryEntry(Province const& new_province, Date new_date); bool _load_province_pop_history(GameManager const& game_manager, ast::NodeCPtr root, bool *non_integer_size); }; struct ProvinceHistoryManager; struct ProvinceHistoryMap : HistoryMap { friend struct ProvinceHistoryManager; private: Province const& PROPERTY(province); protected: ProvinceHistoryMap(Province const& new_province); std::unique_ptr _make_entry(Date date) const override; bool _load_history_entry(GameManager const& game_manager, ProvinceHistoryEntry& entry, ast::NodeCPtr root) override; private: bool _load_province_pop_history( GameManager const& game_manager, Date date, ast::NodeCPtr root, bool *non_integer_size ); }; struct ProvinceHistoryManager { private: ordered_map province_histories; bool locked = false; ProvinceHistoryMap* _get_or_make_province_history(Province const& province); public: ProvinceHistoryManager() = default; void reserve_more_province_histories(size_t size); void lock_province_histories(Map const& map, bool detailed_errors); bool is_locked() const; ProvinceHistoryMap const* get_province_history(Province const* province) const; bool load_province_history_file(GameManager const& game_manager, Province const& province, ast::NodeCPtr root); bool load_pop_history_file(GameManager const& game_manager, Date date, ast::NodeCPtr root, bool *non_integer_size); }; } // namespace OpenVic