@@ -371,22 +371,26 @@ bool MapDefinition::set_water_province(std::string_view identifier) {
371371 return false ;
372372 }
373373
374- ProvinceDefinition* province = get_province_definition_by_identifier (identifier);
374+ ProvinceDefinition* const province_ptr = get_province_definition_by_identifier (identifier);
375375
376- if (province == nullptr ) {
376+ if (province_ptr == nullptr ) {
377377 spdlog::error_s (" Unrecognised water province identifier: {}" , identifier);
378378 return false ;
379379 }
380- if (province->is_water ()) {
380+ ProvinceDefinition& province = *province_ptr;
381+ if (province.is_water ()) {
381382 spdlog::warn_s (" Province {} is already a water province!" , identifier);
382383 return true ;
383384 }
384385 if (!water_provinces.add_province (province)) {
385386 spdlog::error_s (" Failed to add province {} to water province set!" , identifier);
386387 return false ;
387388 }
388- province->water = true ;
389- path_map_sea.try_add_point (province->get_province_number (), path_map_land.get_point_position (province->get_province_number ()));
389+ province.water = true ;
390+ path_map_sea.try_add_point (
391+ province.get_province_number (),
392+ path_map_land.get_point_position (province.get_province_number ())
393+ );
390394 return true ;
391395}
392396
@@ -417,7 +421,11 @@ size_t MapDefinition::get_water_province_count() const {
417421 return water_provinces.size ();
418422}
419423
420- bool MapDefinition::add_region (std::string_view identifier, memory::vector<ProvinceDefinition const *>&& provinces, colour_t colour) {
424+ bool MapDefinition::add_region (
425+ std::string_view identifier,
426+ memory::vector<std::reference_wrapper<const ProvinceDefinition>>&& provinces,
427+ colour_t colour
428+ ) {
421429 if (identifier.empty ()) {
422430 spdlog::error_s (" Invalid region identifier - empty!" );
423431 return false ;
@@ -428,8 +436,7 @@ bool MapDefinition::add_region(std::string_view identifier, memory::vector<Provi
428436 // mods like DoD + TGC use meta regions of water provinces
429437 bool is_meta = provinces.empty ();
430438 size_t valid_provinces_count { provinces.size () };
431- for (ProvinceDefinition const * const province_definition_ptr : provinces) {
432- ProvinceDefinition const & province_definition = *province_definition_ptr;
439+ for (ProvinceDefinition const & province_definition : provinces) {
433440 if (OV_unlikely (province_definition.has_region ())) {
434441 spdlog::warn_s (
435442 " Province {} is assigned to multiple regions, including {} and {}. First defined region wins." ,
@@ -456,9 +463,9 @@ bool MapDefinition::add_region(std::string_view identifier, memory::vector<Provi
456463 ret &= region.add_provinces (provinces);
457464 } else {
458465 region.reserve (valid_provinces_count);
459- for (ProvinceDefinition const * const province_definition_ptr : provinces) {
460- if (!province_definition_ptr-> has_region ()) {
461- region.add_province (province_definition_ptr );
466+ for (ProvinceDefinition const & province_definition : provinces) {
467+ if (!province_definition. has_region ()) {
468+ region.add_province (province_definition );
462469 }
463470 }
464471 }
@@ -467,8 +474,8 @@ bool MapDefinition::add_region(std::string_view identifier, memory::vector<Provi
467474 if (OV_unlikely (is_meta)) {
468475 SPDLOG_INFO (" Region {} is meta." , identifier);
469476 } else {
470- for (ProvinceDefinition const * province_definition : region.get_provinces ()) {
471- remove_province_definition_const (province_definition)-> region = ®ion;
477+ for (ProvinceDefinition const & province_definition : region.get_provinces ()) {
478+ get_mutable_province_definition (province_definition). region = ®ion;
472479 }
473480 }
474481 return ret;
@@ -640,10 +647,10 @@ bool MapDefinition::load_region_file(ast::NodeCPtr root, std::span<const colour_
640647 const bool ret = expect_dictionary_reserve_length (
641648 regions,
642649 [this , &colours](std::string_view region_identifier, ast::NodeCPtr region_node) -> bool {
643- memory::vector<ProvinceDefinition const * > provinces;
650+ memory::vector<std::reference_wrapper< const ProvinceDefinition> > provinces;
644651
645652 bool ret = expect_list_reserve_length (
646- provinces, expect_province_definition_identifier (vector_callback_pointer (provinces))
653+ provinces, expect_province_definition_identifier (vector_emplace_callback (provinces))
647654 )(region_node);
648655
649656 ret &= add_region (region_identifier, std::move (provinces), colours[regions.size () % colours.size ()]);
@@ -1124,10 +1131,10 @@ bool MapDefinition::load_climate_file(ModifierManager const& modifier_manager, a
11241131 ret &= expect_list_reserve_length (*cur_climate, expect_province_definition_identifier (
11251132 [cur_climate, &identifier](ProvinceDefinition& province) {
11261133 if (province.climate != cur_climate) {
1127- cur_climate->add_province (& province);
1134+ cur_climate->add_province (province);
11281135 if (province.climate != nullptr ) {
11291136 Climate* old_climate = const_cast <Climate*>(province.climate );
1130- old_climate->remove_province (& province);
1137+ old_climate->remove_province (province);
11311138 spdlog::warn_s (
11321139 " Province with id {} found in multiple climates: {} and {}" ,
11331140 province, identifier, *old_climate
@@ -1168,13 +1175,13 @@ bool MapDefinition::load_continent_file(ModifierManager const& modifier_manager,
11681175 }
11691176
11701177 ModifierValue values;
1171- memory::vector<ProvinceDefinition const * > prov_list;
1178+ memory::vector<std::reference_wrapper< const ProvinceDefinition> > prov_list;
11721179 bool ret = NodeTools::expect_dictionary_keys_and_default (
11731180 modifier_manager.expect_base_province_modifier (values),
11741181 " provinces" , ONE_EXACTLY, expect_list_reserve_length (prov_list, expect_province_definition_identifier (
11751182 [&prov_list](ProvinceDefinition const & province) -> bool {
11761183 if (province.continent == nullptr ) {
1177- prov_list.emplace_back (& province);
1184+ prov_list.emplace_back (province);
11781185 } else {
11791186 spdlog::warn_s (" Province {} found in multiple continents" , province);
11801187 }
@@ -1194,8 +1201,8 @@ bool MapDefinition::load_continent_file(ModifierManager const& modifier_manager,
11941201 continent.add_provinces (prov_list);
11951202 continent.lock ();
11961203
1197- for (ProvinceDefinition const * prov : continent.get_provinces ()) {
1198- remove_province_definition_const (prov)-> continent = &continent;
1204+ for (ProvinceDefinition const & prov : continent.get_provinces ()) {
1205+ get_mutable_province_definition (prov). continent = &continent;
11991206 }
12001207
12011208 return ret;
0 commit comments