From 736ed61c1c7bf22daf361d3349fbe2dd4cc9b211 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 6 Apr 2026 14:08:59 +0100 Subject: [PATCH] Codechange: remove size_t indexer from TypedIndexContainer Makes container index even stronger. --- src/ai/ai_gui.cpp | 6 +++-- src/core/convertible_through_base.hpp | 4 ---- src/newgrf_town.cpp | 32 +++++++++++++-------------- src/saveload/afterload.cpp | 2 +- src/saveload/company_sl.cpp | 2 +- src/saveload/oldloader_sl.cpp | 18 +++++++-------- src/town_cmd.cpp | 6 ++--- 7 files changed, 34 insertions(+), 36 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 8e7a26a753..ce1069be76 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -258,7 +258,8 @@ struct AIConfigWindow : public Window { case WID_AIC_MOVE_UP: if (IsEditable(this->selected_slot) && IsEditable(static_cast(this->selected_slot - 1))) { - std::swap(GetGameSettings().script_config.ai[this->selected_slot], GetGameSettings().script_config.ai[this->selected_slot - 1]); + auto it = std::next(std::begin(GetGameSettings().script_config.ai), this->selected_slot.base()); + std::swap(*it, *std::prev(it)); this->selected_slot = static_cast(this->selected_slot - 1); this->vscroll->ScrollTowards(this->selected_slot.base()); this->InvalidateData(); @@ -267,7 +268,8 @@ struct AIConfigWindow : public Window { case WID_AIC_MOVE_DOWN: if (IsEditable(this->selected_slot) && IsEditable(static_cast(this->selected_slot + 1))) { - std::swap(GetGameSettings().script_config.ai[this->selected_slot], GetGameSettings().script_config.ai[this->selected_slot + 1]); + auto it = std::next(std::begin(GetGameSettings().script_config.ai), this->selected_slot.base()); + std::swap(*it, *std::next(it)); ++this->selected_slot; this->vscroll->ScrollTowards(this->selected_slot.base()); this->InvalidateData(); diff --git a/src/core/convertible_through_base.hpp b/src/core/convertible_through_base.hpp index 60f40732cb..62ee487beb 100644 --- a/src/core/convertible_through_base.hpp +++ b/src/core/convertible_through_base.hpp @@ -37,16 +37,12 @@ concept ConvertibleThroughBaseOrTo = std::is_convertible_v || Convertibl template class TypedIndexContainer : public Container { public: - Container::reference at(size_t pos) { return this->Container::at(pos); } Container::reference at(const Index &pos) { return this->Container::at(pos.base()); } - Container::const_reference at(size_t pos) const { return this->Container::at(pos); } Container::const_reference at(const Index &pos) const { return this->Container::at(pos.base()); } - Container::reference operator[](size_t pos) { return this->Container::operator[](pos); } Container::reference operator[](const Index &pos) { return this->Container::operator[](pos.base()); } - Container::const_reference operator[](size_t pos) const { return this->Container::operator[](pos); } Container::const_reference operator[](const Index &pos) const { return this->Container::operator[](pos.base()); } }; diff --git a/src/newgrf_town.cpp b/src/newgrf_town.cpp index 5c9ac98427..319a0cdc84 100644 --- a/src/newgrf_town.cpp +++ b/src/newgrf_town.cpp @@ -75,22 +75,22 @@ static uint16_t TownHistoryHelper(const Town *t, CargoLabel label, uint period, case 0x9B: return GB(ClampTo(this->t->cache.squared_town_zone_radius[to_underlying(HouseZone::TownInnerSuburb)]), 8, 8); case 0x9C: return ClampTo(this->t->cache.squared_town_zone_radius[to_underlying(HouseZone::TownCentre)]); case 0x9D: return GB(ClampTo(this->t->cache.squared_town_zone_radius[to_underlying(HouseZone::TownCentre)]), 8, 8); - case 0x9E: return this->t->ratings[0]; - case 0x9F: return GB(this->t->ratings[0], 8, 8); - case 0xA0: return this->t->ratings[1]; - case 0xA1: return GB(this->t->ratings[1], 8, 8); - case 0xA2: return this->t->ratings[2]; - case 0xA3: return GB(this->t->ratings[2], 8, 8); - case 0xA4: return this->t->ratings[3]; - case 0xA5: return GB(this->t->ratings[3], 8, 8); - case 0xA6: return this->t->ratings[4]; - case 0xA7: return GB(this->t->ratings[4], 8, 8); - case 0xA8: return this->t->ratings[5]; - case 0xA9: return GB(this->t->ratings[5], 8, 8); - case 0xAA: return this->t->ratings[6]; - case 0xAB: return GB(this->t->ratings[6], 8, 8); - case 0xAC: return this->t->ratings[7]; - case 0xAD: return GB(this->t->ratings[7], 8, 8); + case 0x9E: return this->t->ratings[CompanyID{0}]; + case 0x9F: return GB(this->t->ratings[CompanyID{0}], 8, 8); + case 0xA0: return this->t->ratings[CompanyID{1}]; + case 0xA1: return GB(this->t->ratings[CompanyID{1}], 8, 8); + case 0xA2: return this->t->ratings[CompanyID{2}]; + case 0xA3: return GB(this->t->ratings[CompanyID{2}], 8, 8); + case 0xA4: return this->t->ratings[CompanyID{3}]; + case 0xA5: return GB(this->t->ratings[CompanyID{3}], 8, 8); + case 0xA6: return this->t->ratings[CompanyID{4}]; + case 0xA7: return GB(this->t->ratings[CompanyID{4}], 8, 8); + case 0xA8: return this->t->ratings[CompanyID{5}]; + case 0xA9: return GB(this->t->ratings[CompanyID{5}], 8, 8); + case 0xAA: return this->t->ratings[CompanyID{6}]; + case 0xAB: return GB(this->t->ratings[CompanyID{6}], 8, 8); + case 0xAC: return this->t->ratings[CompanyID{7}]; + case 0xAD: return GB(this->t->ratings[CompanyID{7}], 8, 8); case 0xAE: return this->t->have_ratings.base(); case 0xB2: return this->t->statues.base(); case 0xB6: return ClampTo(this->t->cache.num_houses); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index cd36bc2a9f..c41498f740 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2100,7 +2100,7 @@ bool AfterLoadGame() for (Town *t : Town::Iterate()) { if (t->have_ratings.base() == 0xFF) t->have_ratings.Set(); - for (uint i = 8; i != MAX_COMPANIES; i++) t->ratings[i] = RATING_INITIAL; + t->ratings.fill(RATING_INITIAL); } } diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 6cb81c8488..751e1c9c0c 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -570,7 +570,7 @@ struct PLYRChunkHandler : ChunkHandler { while ((index = SlIterateArray()) != -1) { Company *c = Company::CreateAtIndex(CompanyID(index)); SlObject(c, slt); - _company_colours[index] = c->colour; + _company_colours[c->index] = c->colour; } } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 704f41957b..035b3f737a 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -580,14 +580,14 @@ static const OldChunks town_chunk[] = { OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, Town, flags ), OCL_NULL( 10 ), ///< radius, no longer in use - OCL_SVAR( OC_INT16, Town, ratings[0] ), - OCL_SVAR( OC_INT16, Town, ratings[1] ), - OCL_SVAR( OC_INT16, Town, ratings[2] ), - OCL_SVAR( OC_INT16, Town, ratings[3] ), - OCL_SVAR( OC_INT16, Town, ratings[4] ), - OCL_SVAR( OC_INT16, Town, ratings[5] ), - OCL_SVAR( OC_INT16, Town, ratings[6] ), - OCL_SVAR( OC_INT16, Town, ratings[7] ), + OCL_SVAR( OC_INT16, Town, ratings[CompanyID{0}] ), + OCL_SVAR( OC_INT16, Town, ratings[CompanyID{1}] ), + OCL_SVAR( OC_INT16, Town, ratings[CompanyID{2}] ), + OCL_SVAR( OC_INT16, Town, ratings[CompanyID{3}] ), + OCL_SVAR( OC_INT16, Town, ratings[CompanyID{4}] ), + OCL_SVAR( OC_INT16, Town, ratings[CompanyID{5}] ), + OCL_SVAR( OC_INT16, Town, ratings[CompanyID{6}] ), + OCL_SVAR( OC_INT16, Town, ratings[CompanyID{7}] ), OCL_SVAR( OC_FILE_U32 | OC_VAR_U16, Town, have_ratings ), OCL_SVAR( OC_FILE_U32 | OC_VAR_U16, Town, statues ), @@ -1052,7 +1052,7 @@ static bool LoadOldCompany(LoadgameState &ls, int num) if (c->money == 893288) c->money = c->current_loan = 100000; } - _company_colours[num] = c->colour; + _company_colours[c->index] = c->colour; c->inaugurated_year -= EconomyTime::ORIGINAL_BASE_YEAR; return true; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index b478739f10..148cbebf6e 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2047,7 +2047,7 @@ static void DoCreateTown(Town *t, TileIndex tile, uint32_t townnameparts, TownSi t->fund_buildings_months = 0; - for (uint i = 0; i != MAX_COMPANIES; i++) t->ratings[i] = RATING_INITIAL; + t->ratings.fill(RATING_INITIAL); t->have_ratings = {}; t->exclusivity = CompanyID::Invalid(); @@ -3826,8 +3826,8 @@ static void UpdateTownRating(Town *t) }); /* clamp all ratings to valid values */ - for (uint i = 0; i < MAX_COMPANIES; i++) { - t->ratings[i] = Clamp(t->ratings[i], RATING_MINIMUM, RATING_MAXIMUM); + for (auto it = t->ratings.begin(); it != t->ratings.end(); ++it) { + *it = Clamp(*it, RATING_MINIMUM, RATING_MAXIMUM); } SetWindowDirty(WC_TOWN_AUTHORITY, t->index);