# HG changeset patch # User Peter Nelson # Date 2023-10-18 19:49:00 # Node ID c7edb1acb4266e5a2c391fe0583c36335727c901 # Parent 1b33a7ee27acc617093b6a987d30abfc044d06f5 Codechange: Use bitmask instead of array for cargo consistency check. We only need to know if a cargo type is accepted, not how much. diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp --- a/src/articulated_vehicles.cpp +++ b/src/articulated_vehicles.cpp @@ -284,7 +284,7 @@ void CheckConsistencyOfArticulatedVehicl CargoTypes real_refit_union = 0; CargoTypes real_refit_intersection = ALL_CARGOTYPES; - CargoArray real_default_capacity{}; + CargoTypes real_default_cargoes = 0; do { CargoTypes refit_mask = GetAvailableVehicleCargoTypes(v->engine_type, true); @@ -292,15 +292,15 @@ void CheckConsistencyOfArticulatedVehicl if (refit_mask != 0) real_refit_intersection &= refit_mask; assert(v->cargo_type < NUM_CARGO); - real_default_capacity[v->cargo_type] += v->cargo_cap; + if (v->cargo_cap > 0) SetBit(real_default_cargoes, v->cargo_type); v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : nullptr; } while (v != nullptr); /* Check whether the vehicle carries more cargoes than expected */ bool carries_more = false; - for (CargoID cid = 0; cid < NUM_CARGO; cid++) { - if (real_default_capacity[cid] != 0 && purchase_default_capacity[cid] == 0) { + for (CargoID cid : SetCargoBitIterator(real_default_cargoes)) { + if (purchase_default_capacity[cid] == 0) { carries_more = true; break; }