1
0
Fork 0

Codechange: Use FlatSet to avoid trying to add variant parents multiple times.

pull/14392/head
Peter Nelson 2025-06-24 21:47:55 +01:00 committed by Peter Nelson
parent 1ddc03b916
commit bd2430dc94
2 changed files with 6 additions and 9 deletions

View File

@ -122,7 +122,7 @@ class ReplaceVehicleWindow : public Window {
*/
void GenerateReplaceVehList(bool draw_left)
{
std::vector<EngineID> variants;
FlatSet<EngineID> variants;
EngineID selected_engine = EngineID::Invalid();
VehicleType type = this->window_number;
uint8_t side = draw_left ? 0 : 1;
@ -161,8 +161,7 @@ class ReplaceVehicleWindow : public Window {
if (side == 1) {
EngineID parent = e->info.variant_id;
while (parent != EngineID::Invalid()) {
variants.push_back(parent);
while (parent != EngineID::Invalid() && variants.insert(parent).second) {
parent = Engine::Get(parent)->info.variant_id;
}
}

View File

@ -1360,7 +1360,7 @@ struct BuildVehicleWindow : Window {
/* Figure out what train EngineIDs to put in the list */
void GenerateBuildTrainList(GUIEngineList &list)
{
std::vector<EngineID> variants;
FlatSet<EngineID> variants;
EngineID sel_id = EngineID::Invalid();
size_t num_engines = 0;
@ -1395,8 +1395,7 @@ struct BuildVehicleWindow : Window {
/* Add all parent variants of this engine to the variant list */
EngineID parent = e->info.variant_id;
while (parent != EngineID::Invalid()) {
variants.push_back(parent);
while (parent != EngineID::Invalid() && variants.insert(parent).second) {
parent = Engine::Get(parent)->info.variant_id;
}
@ -1543,11 +1542,10 @@ struct BuildVehicleWindow : Window {
this->FilterEngineList();
/* ensure primary engine of variant group is in list after filtering */
std::vector<EngineID> variants;
FlatSet<EngineID> variants;
for (const auto &item : this->eng_list) {
EngineID parent = item.variant_id;
while (parent != EngineID::Invalid()) {
variants.push_back(parent);
while (parent != EngineID::Invalid() && variants.insert(parent).second) {
parent = Engine::Get(parent)->info.variant_id;
}
}