Skip to content

Commit 2262720

Browse files
committed
Track pop id in province
1 parent 0c08194 commit 2262720

5 files changed

Lines changed: 43 additions & 17 deletions

File tree

src/openvic-simulation/map/ProvinceInstance.cpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -180,16 +180,6 @@ void ProvinceInstance::_add_pop(Pop&& pop) {
180180
pops.insert(std::move(pop));
181181
}
182182

183-
bool ProvinceInstance::add_pop(Pop&& pop) {
184-
if (!province_definition.is_water()) {
185-
_add_pop(std::move(pop));
186-
return true;
187-
} else {
188-
spdlog::error_s("Trying to add pop to water province {}", *this);
189-
return false;
190-
}
191-
}
192-
193183
bool ProvinceInstance::add_pop_vec(
194184
std::span<const PopBase> pop_vec,
195185
PopDeps const& pop_deps
@@ -200,7 +190,8 @@ bool ProvinceInstance::add_pop_vec(
200190
_add_pop(Pop {
201191
pop,
202192
get_supporter_equivalents_by_ideology().get_keys(),
203-
pop_deps
193+
pop_deps,
194+
++last_pop_id
204195
});
205196
}
206197
return true;

src/openvic-simulation/map/ProvinceInstance.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@
55
#include "openvic-simulation/core/portable/ForwardableSpan.hpp"
66
#include "openvic-simulation/economy/BuildingInstance.hpp"
77
#include "openvic-simulation/economy/production/ResourceGatheringOperation.hpp"
8+
#include "openvic-simulation/map/LifeRating.hpp"
89
#include "openvic-simulation/military/UnitBranchedGetterMacro.hpp"
910
#include "openvic-simulation/modifier/ModifierSum.hpp"
1011
#include "openvic-simulation/population/Pop.hpp"
12+
#include "openvic-simulation/population/PopIdInProvince.hpp"
1113
#include "openvic-simulation/population/PopsAggregate.hpp"
1214
#include "openvic-simulation/types/ColonyStatus.hpp"
1315
#include "openvic-simulation/types/FlagStrings.hpp"
1416
#include "openvic-simulation/types/HasIdentifier.hpp"
1517
#include "openvic-simulation/types/HasIndex.hpp"
1618
#include "openvic-simulation/types/OrderedContainers.hpp"
17-
#include "openvic-simulation/map/LifeRating.hpp"
1819
#include "openvic-simulation/types/FixedVector.hpp"
1920
#include "openvic-simulation/types/TypedIndices.hpp"
2021
#include "openvic-simulation/types/TypedSpan.hpp"
@@ -115,6 +116,7 @@ namespace OpenVic {
115116
OV_UNIT_BRANCHED_GETTER_CONST(get_unit_instance_groups, armies, navies);
116117

117118
private:
119+
pop_id_in_province_t last_pop_id{0};
118120
memory::colony<Pop> PROPERTY(pops); // TODO - replace with a more easily vectorisable container?
119121
void _add_pop(Pop&& pop);
120122
void _update_pops(MilitaryDefines const& military_defines);
@@ -168,7 +170,6 @@ namespace OpenVic {
168170

169171
bool expand_building(const province_building_index_t index);
170172

171-
bool add_pop(Pop&& pop);
172173
bool add_pop_vec(
173174
std::span<const PopBase> pop_vec,
174175
PopDeps const& pop_deps

src/openvic-simulation/population/Pop.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
#include "openvic-simulation/country/CountryParty.hpp"
1616
#include "openvic-simulation/country/CountryDefinition.hpp"
1717
#include "openvic-simulation/country/CountryInstance.hpp"
18-
#include "openvic-simulation/defines/Define.hpp"
18+
#include "openvic-simulation/defines/MilitaryDefines.hpp"
19+
#include "openvic-simulation/defines/PopsDefines.hpp"
1920
#include "openvic-simulation/economy/GoodDefinition.hpp"
2021
#include "openvic-simulation/economy/GoodInstance.hpp"
2122
#include "openvic-simulation/economy/production/ArtisanalProducer.hpp"
@@ -54,9 +55,11 @@ PopBase::PopBase(
5455
Pop::Pop(
5556
PopBase const& pop_base,
5657
decltype(supporter_equivalents_by_ideology)::keys_span_type ideology_keys,
57-
PopDeps const& pop_deps
58+
PopDeps const& pop_deps,
59+
const pop_id_in_province_t new_id_in_province
5860
)
5961
: PopBase { pop_base },
62+
id_in_province { new_id_in_province },
6063
market_instance { pop_deps.market_instance },
6164
artisanal_producer_optional {
6265
type->is_artisan

src/openvic-simulation/population/Pop.hpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44

55
#include "openvic-simulation/core/portable/ForwardableSpan.hpp"
66
#include "openvic-simulation/economy/production/ArtisanalProducer.hpp"
7+
#include "openvic-simulation/population/PopIdInProvince.hpp"
78
#include "openvic-simulation/population/PopNeedsMacro.hpp"
9+
#include "openvic-simulation/population/PopSize.hpp"
810
#include "openvic-simulation/types/fixed_point/Atomic.hpp"
911
#include "openvic-simulation/types/fixed_point/FixedPoint.hpp"
1012
#include "openvic-simulation/types/fixed_point/FixedPointMap.hpp"
1113
#include "openvic-simulation/types/IndexedFlatMap.hpp"
12-
#include "openvic-simulation/population/PopSize.hpp"
1314
#include "openvic-simulation/types/UnitBranchType.hpp"
1415
#include "openvic-simulation/utility/Containers.hpp"
1516

@@ -89,6 +90,8 @@ namespace OpenVic {
8990

9091
static constexpr pop_size_t MAX_SIZE = std::numeric_limits<type_safe::underlying_type<pop_size_t>>::max();
9192

93+
public:
94+
const pop_id_in_province_t id_in_province;
9295
private:
9396
MarketInstance& market_instance;
9497
std::optional<ArtisanalProducer> artisanal_producer_optional;
@@ -163,7 +166,8 @@ namespace OpenVic {
163166
Pop(
164167
PopBase const& pop_base,
165168
decltype(supporter_equivalents_by_ideology)::keys_span_type ideology_keys,
166-
PopDeps const& pop_deps
169+
PopDeps const& pop_deps,
170+
const pop_id_in_province_t new_id_in_province
167171
);
168172

169173
memory::string get_pop_context_text() const;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#pragma once
2+
3+
#include <cstddef>
4+
5+
#include <fmt/base.h>
6+
#include <fmt/format.h>
7+
8+
#include <type_safe/strong_typedef.hpp>
9+
10+
namespace OpenVic {
11+
struct pop_id_in_province_t : type_safe::strong_typedef<pop_id_in_province_t, std::size_t>,
12+
type_safe::strong_typedef_op::equality_comparison<pop_id_in_province_t>,
13+
type_safe::strong_typedef_op::relational_comparison<pop_id_in_province_t>,
14+
type_safe::strong_typedef_op::integer_arithmetic<pop_id_in_province_t> {
15+
using strong_typedef::strong_typedef;
16+
};
17+
}
18+
namespace std {
19+
template <>
20+
struct hash<OpenVic::pop_id_in_province_t> : type_safe::hashable<OpenVic::pop_id_in_province_t> {};
21+
}
22+
template<>
23+
struct fmt::formatter<OpenVic::pop_id_in_province_t> : fmt::formatter<std::size_t> {
24+
fmt::format_context::iterator format(OpenVic::pop_id_in_province_t const& value, fmt::format_context& ctx) const {
25+
return fmt::formatter<std::size_t>::format(type_safe::get(value), ctx);
26+
}
27+
};

0 commit comments

Comments
 (0)