mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Use FlatSet to avoid trying to add variant parents multiple times.
parent
1ddc03b916
commit
bd2430dc94
|
@ -122,7 +122,7 @@ class ReplaceVehicleWindow : public Window {
|
||||||
*/
|
*/
|
||||||
void GenerateReplaceVehList(bool draw_left)
|
void GenerateReplaceVehList(bool draw_left)
|
||||||
{
|
{
|
||||||
std::vector<EngineID> variants;
|
FlatSet<EngineID> variants;
|
||||||
EngineID selected_engine = EngineID::Invalid();
|
EngineID selected_engine = EngineID::Invalid();
|
||||||
VehicleType type = this->window_number;
|
VehicleType type = this->window_number;
|
||||||
uint8_t side = draw_left ? 0 : 1;
|
uint8_t side = draw_left ? 0 : 1;
|
||||||
|
@ -161,8 +161,7 @@ class ReplaceVehicleWindow : public Window {
|
||||||
|
|
||||||
if (side == 1) {
|
if (side == 1) {
|
||||||
EngineID parent = e->info.variant_id;
|
EngineID parent = e->info.variant_id;
|
||||||
while (parent != EngineID::Invalid()) {
|
while (parent != EngineID::Invalid() && variants.insert(parent).second) {
|
||||||
variants.push_back(parent);
|
|
||||||
parent = Engine::Get(parent)->info.variant_id;
|
parent = Engine::Get(parent)->info.variant_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1360,7 +1360,7 @@ struct BuildVehicleWindow : Window {
|
||||||
/* Figure out what train EngineIDs to put in the list */
|
/* Figure out what train EngineIDs to put in the list */
|
||||||
void GenerateBuildTrainList(GUIEngineList &list)
|
void GenerateBuildTrainList(GUIEngineList &list)
|
||||||
{
|
{
|
||||||
std::vector<EngineID> variants;
|
FlatSet<EngineID> variants;
|
||||||
EngineID sel_id = EngineID::Invalid();
|
EngineID sel_id = EngineID::Invalid();
|
||||||
size_t num_engines = 0;
|
size_t num_engines = 0;
|
||||||
|
|
||||||
|
@ -1395,8 +1395,7 @@ struct BuildVehicleWindow : Window {
|
||||||
|
|
||||||
/* Add all parent variants of this engine to the variant list */
|
/* Add all parent variants of this engine to the variant list */
|
||||||
EngineID parent = e->info.variant_id;
|
EngineID parent = e->info.variant_id;
|
||||||
while (parent != EngineID::Invalid()) {
|
while (parent != EngineID::Invalid() && variants.insert(parent).second) {
|
||||||
variants.push_back(parent);
|
|
||||||
parent = Engine::Get(parent)->info.variant_id;
|
parent = Engine::Get(parent)->info.variant_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1543,11 +1542,10 @@ struct BuildVehicleWindow : Window {
|
||||||
this->FilterEngineList();
|
this->FilterEngineList();
|
||||||
|
|
||||||
/* ensure primary engine of variant group is in list after filtering */
|
/* 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) {
|
for (const auto &item : this->eng_list) {
|
||||||
EngineID parent = item.variant_id;
|
EngineID parent = item.variant_id;
|
||||||
while (parent != EngineID::Invalid()) {
|
while (parent != EngineID::Invalid() && variants.insert(parent).second) {
|
||||||
variants.push_back(parent);
|
|
||||||
parent = Engine::Get(parent)->info.variant_id;
|
parent = Engine::Get(parent)->info.variant_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue