Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 2 additions & 11 deletions src/openvic-simulation/map/ProvinceInstance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,16 +180,6 @@ void ProvinceInstance::_add_pop(Pop&& pop) {
pops.insert(std::move(pop));
}

bool ProvinceInstance::add_pop(Pop&& pop) {
if (!province_definition.is_water()) {
_add_pop(std::move(pop));
return true;
} else {
spdlog::error_s("Trying to add pop to water province {}", *this);
return false;
}
}

bool ProvinceInstance::add_pop_vec(
std::span<const PopBase> pop_vec,
PopDeps const& pop_deps
Expand All @@ -200,7 +190,8 @@ bool ProvinceInstance::add_pop_vec(
_add_pop(Pop {
pop,
get_supporter_equivalents_by_ideology().get_keys(),
pop_deps
pop_deps,
++last_pop_id
});
}
return true;
Expand Down
5 changes: 3 additions & 2 deletions src/openvic-simulation/map/ProvinceInstance.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@
#include "openvic-simulation/core/portable/ForwardableSpan.hpp"
#include "openvic-simulation/economy/BuildingInstance.hpp"
#include "openvic-simulation/economy/production/ResourceGatheringOperation.hpp"
#include "openvic-simulation/map/LifeRating.hpp"
#include "openvic-simulation/military/UnitBranchedGetterMacro.hpp"
#include "openvic-simulation/modifier/ModifierSum.hpp"
#include "openvic-simulation/population/Pop.hpp"
#include "openvic-simulation/population/PopIdInProvince.hpp"
#include "openvic-simulation/population/PopsAggregate.hpp"
#include "openvic-simulation/types/ColonyStatus.hpp"
#include "openvic-simulation/types/FlagStrings.hpp"
#include "openvic-simulation/types/HasIdentifier.hpp"
#include "openvic-simulation/types/HasIndex.hpp"
#include "openvic-simulation/types/OrderedContainers.hpp"
#include "openvic-simulation/map/LifeRating.hpp"
#include "openvic-simulation/types/FixedVector.hpp"
#include "openvic-simulation/types/TypedIndices.hpp"
#include "openvic-simulation/types/TypedSpan.hpp"
Expand Down Expand Up @@ -115,6 +116,7 @@ namespace OpenVic {
OV_UNIT_BRANCHED_GETTER_CONST(get_unit_instance_groups, armies, navies);

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

bool expand_building(const province_building_index_t index);

bool add_pop(Pop&& pop);
bool add_pop_vec(
std::span<const PopBase> pop_vec,
PopDeps const& pop_deps
Expand Down
7 changes: 5 additions & 2 deletions src/openvic-simulation/population/Pop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
#include "openvic-simulation/country/CountryParty.hpp"
#include "openvic-simulation/country/CountryDefinition.hpp"
#include "openvic-simulation/country/CountryInstance.hpp"
#include "openvic-simulation/defines/Define.hpp"
#include "openvic-simulation/defines/MilitaryDefines.hpp"
#include "openvic-simulation/defines/PopsDefines.hpp"
#include "openvic-simulation/economy/GoodDefinition.hpp"
#include "openvic-simulation/economy/GoodInstance.hpp"
#include "openvic-simulation/economy/production/ArtisanalProducer.hpp"
Expand Down Expand Up @@ -54,9 +55,11 @@ PopBase::PopBase(
Pop::Pop(
PopBase const& pop_base,
decltype(supporter_equivalents_by_ideology)::keys_span_type ideology_keys,
PopDeps const& pop_deps
PopDeps const& pop_deps,
const pop_id_in_province_t new_id_in_province
)
: PopBase { pop_base },
id_in_province { new_id_in_province },
market_instance { pop_deps.market_instance },
artisanal_producer_optional {
type->is_artisan
Expand Down
9 changes: 7 additions & 2 deletions src/openvic-simulation/population/Pop.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@

#include "openvic-simulation/core/portable/ForwardableSpan.hpp"
#include "openvic-simulation/economy/production/ArtisanalProducer.hpp"
#include "openvic-simulation/population/PopIdInProvince.hpp"
#include "openvic-simulation/population/PopNeedsMacro.hpp"
#include "openvic-simulation/population/PopSize.hpp"
#include "openvic-simulation/types/fixed_point/Atomic.hpp"
#include "openvic-simulation/types/fixed_point/FixedPoint.hpp"
#include "openvic-simulation/types/fixed_point/FixedPointMap.hpp"
#include "openvic-simulation/types/IndexedFlatMap.hpp"
#include "openvic-simulation/population/PopSize.hpp"
#include "openvic-simulation/types/UnitBranchType.hpp"
#include "openvic-simulation/utility/Containers.hpp"

Expand Down Expand Up @@ -89,6 +90,9 @@ namespace OpenVic {

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

public:
const pop_id_in_province_t id_in_province;

private:
MarketInstance& market_instance;
std::optional<ArtisanalProducer> artisanal_producer_optional;
Expand Down Expand Up @@ -163,7 +167,8 @@ namespace OpenVic {
Pop(
PopBase const& pop_base,
decltype(supporter_equivalents_by_ideology)::keys_span_type ideology_keys,
PopDeps const& pop_deps
PopDeps const& pop_deps,
const pop_id_in_province_t new_id_in_province
);

memory::string get_pop_context_text() const;
Expand Down
27 changes: 27 additions & 0 deletions src/openvic-simulation/population/PopIdInProvince.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#pragma once

#include <cstddef>

#include <fmt/base.h>
#include <fmt/format.h>

#include <type_safe/strong_typedef.hpp>

namespace OpenVic {
struct pop_id_in_province_t : type_safe::strong_typedef<pop_id_in_province_t, std::size_t>,
type_safe::strong_typedef_op::equality_comparison<pop_id_in_province_t>,
type_safe::strong_typedef_op::relational_comparison<pop_id_in_province_t>,
type_safe::strong_typedef_op::integer_arithmetic<pop_id_in_province_t> {
using strong_typedef::strong_typedef;
};
}
namespace std {
template <>
struct hash<OpenVic::pop_id_in_province_t> : type_safe::hashable<OpenVic::pop_id_in_province_t> {};
}
template<>
struct fmt::formatter<OpenVic::pop_id_in_province_t> : fmt::formatter<std::size_t> {
fmt::format_context::iterator format(OpenVic::pop_id_in_province_t const& value, fmt::format_context& ctx) const {
return fmt::formatter<std::size_t>::format(type_safe::get(value), ctx);
}
};