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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue