1
0
Fork 0

Codechange: Use std::visit for SetupCargoForClimate.

pull/13103/head
Peter Nelson 2024-11-19 19:19:09 +00:00
parent f9b5f78b8a
commit d8c253d1a1
No known key found for this signature in database
GPG Key ID: 8EF8F0A467DF75ED
1 changed files with 15 additions and 12 deletions

View File

@ -72,21 +72,24 @@ void SetupCargoForClimate(LandscapeID l)
auto insert = std::begin(CargoSpec::array); auto insert = std::begin(CargoSpec::array);
for (const auto &cl : _default_climate_cargo[l]) { for (const auto &cl : _default_climate_cargo[l]) {
/* Check if value is an index into the cargo table */ struct visitor {
if (std::holds_alternative<int>(cl)) { const CargoSpec &operator()(const int &index)
{
/* Copy the default cargo by index. */ /* Copy the default cargo by index. */
*insert = _default_cargo[std::get<int>(cl)]; return _default_cargo[index];
} else { }
const CargoSpec &operator()(const CargoLabel &label)
{
/* Search for label in default cargo types and copy if found. */ /* Search for label in default cargo types and copy if found. */
CargoLabel label = std::get<CargoLabel>(cl); auto found = std::ranges::find(_default_cargo, label, &CargoSpec::label);
auto found = std::find_if(std::begin(_default_cargo), std::end(_default_cargo), [&label](const CargoSpec &cs) { return cs.label == label; }); if (found != std::end(_default_cargo)) return *found;
if (found != std::end(_default_cargo)) {
*insert = *found;
} else {
/* Index or label is invalid, this should not happen. */ /* Index or label is invalid, this should not happen. */
NOT_REACHED(); NOT_REACHED();
} }
} };
*insert = std::visit(visitor{}, cl);
if (insert->IsValid()) { if (insert->IsValid()) {
SetBit(_cargo_mask, insert->Index()); SetBit(_cargo_mask, insert->Index());