aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/openvic-simulation/map')
-rw-r--r--src/openvic-simulation/map/ProvinceInstance.cpp41
-rw-r--r--src/openvic-simulation/map/ProvinceInstance.hpp27
2 files changed, 22 insertions, 46 deletions
diff --git a/src/openvic-simulation/map/ProvinceInstance.cpp b/src/openvic-simulation/map/ProvinceInstance.cpp
index 1792fe0..6b20cd2 100644
--- a/src/openvic-simulation/map/ProvinceInstance.cpp
+++ b/src/openvic-simulation/map/ProvinceInstance.cpp
@@ -104,41 +104,36 @@ void ProvinceInstance::tick(Date today) {
}
}
-bool ProvinceInstance::add_army(ArmyInstance& army) {
- if (armies.emplace(&army).second) {
+template<UnitType::branch_t Branch>
+bool ProvinceInstance::add_unit_instance_group(UnitInstanceGroup<Branch>& group) {
+ if (get_unit_instance_groups<Branch>().emplace(static_cast<UnitInstanceGroupBranched<Branch>*>(&group)).second) {
return true;
} else {
- Logger::error("Trying to add already-existing army ", army.get_name(), " to province ", get_identifier());
+ Logger::error(
+ "Trying to add already-existing ", Branch == UnitType::branch_t::LAND ? "army" : "navy", " ",
+ group.get_name(), " to province ", get_identifier()
+ );
return false;
}
}
-bool ProvinceInstance::remove_army(ArmyInstance& army) {
- if (armies.erase(&army) > 0) {
+template<UnitType::branch_t Branch>
+bool ProvinceInstance::remove_unit_instance_group(UnitInstanceGroup<Branch>& group) {
+ if (get_unit_instance_groups<Branch>().erase(static_cast<UnitInstanceGroupBranched<Branch>*>(&group)) > 0) {
return true;
} else {
- Logger::error("Trying to remove non-existent army ", army.get_name(), " from province ", get_identifier());
+ Logger::error(
+ "Trying to remove non-existent ", Branch == UnitType::branch_t::LAND ? "army" : "navy", " ",
+ group.get_name(), " from province ", get_identifier()
+ );
return false;
}
}
-bool ProvinceInstance::add_navy(NavyInstance& navy) {
- if (navies.emplace(&navy).second) {
- return true;
- } else {
- Logger::error("Trying to add already-existing navy ", navy.get_name(), " to province ", get_identifier());
- return false;
- }
-}
-
-bool ProvinceInstance::remove_navy(NavyInstance& navy) {
- if (navies.erase(&navy) > 0) {
- return true;
- } else {
- Logger::error("Trying to remove non-existent navy ", navy.get_name(), " from province ", get_identifier());
- return false;
- }
-}
+template bool ProvinceInstance::add_unit_instance_group(UnitInstanceGroup<UnitType::branch_t::LAND>&);
+template bool ProvinceInstance::add_unit_instance_group(UnitInstanceGroup<UnitType::branch_t::NAVAL>&);
+template bool ProvinceInstance::remove_unit_instance_group(UnitInstanceGroup<UnitType::branch_t::LAND>&);
+template bool ProvinceInstance::remove_unit_instance_group(UnitInstanceGroup<UnitType::branch_t::NAVAL>&);
bool ProvinceInstance::setup(BuildingTypeManager const& building_type_manager) {
if (buildings_are_locked()) {
diff --git a/src/openvic-simulation/map/ProvinceInstance.hpp b/src/openvic-simulation/map/ProvinceInstance.hpp
index 4398cd4..ec06e0c 100644
--- a/src/openvic-simulation/map/ProvinceInstance.hpp
+++ b/src/openvic-simulation/map/ProvinceInstance.hpp
@@ -58,6 +58,8 @@ namespace OpenVic {
ordered_set<ArmyInstance*> PROPERTY(armies);
ordered_set<NavyInstance*> PROPERTY(navies);
+ UNIT_BRANCHED_GETTER(get_unit_instance_groups, armies, navies);
+
std::vector<Pop> PROPERTY(pops);
Pop::pop_size_t PROPERTY(total_population);
IndexedMap<PopType, fixed_point_t> PROPERTY(pop_type_distribution);
@@ -89,31 +91,10 @@ namespace OpenVic {
void update_gamestate(Date today);
void tick(Date today);
- bool add_army(ArmyInstance& army);
- bool remove_army(ArmyInstance& army);
- bool add_navy(NavyInstance& navy);
- bool remove_navy(NavyInstance& navy);
-
template<UnitType::branch_t Branch>
- bool add_unit_instance_group(UnitInstanceGroup<Branch>& group) {
- if constexpr (Branch == UnitType::branch_t::LAND) {
- return add_army(static_cast<ArmyInstance&>(group));
- } else if constexpr (Branch == UnitType::branch_t::NAVAL) {
- return add_navy(static_cast<NavyInstance&>(group));
- } else {
- OpenVic::utility::unreachable();
- }
- }
+ bool add_unit_instance_group(UnitInstanceGroup<Branch>& group);
template<UnitType::branch_t Branch>
- bool remove_unit_instance_group(UnitInstanceGroup<Branch>& group) {
- if constexpr (Branch == UnitType::branch_t::LAND) {
- return remove_army(static_cast<ArmyInstance&>(group));
- } else if constexpr (Branch == UnitType::branch_t::NAVAL) {
- return remove_navy(static_cast<NavyInstance&>(group));
- } else {
- OpenVic::utility::unreachable();
- }
- }
+ bool remove_unit_instance_group(UnitInstanceGroup<Branch>& group);
bool setup(BuildingTypeManager const& building_type_manager);
bool apply_history_to_province(ProvinceHistoryEntry const* entry);