diff options
-rw-r--r-- | src/animated_tile.cpp | 2 | ||||
-rw-r--r-- | src/core/smallvec_type.hpp | 31 | ||||
-rw-r--r-- | src/economy.cpp | 2 | ||||
-rw-r--r-- | src/fios.cpp | 2 | ||||
-rw-r--r-- | src/gfx.cpp | 2 | ||||
-rw-r--r-- | src/hotkeys.cpp | 2 | ||||
-rw-r--r-- | src/network/network_content.cpp | 2 | ||||
-rw-r--r-- | src/network/network_content.h | 2 | ||||
-rw-r--r-- | src/network/network_content_gui.cpp | 2 | ||||
-rw-r--r-- | src/rail_cmd.cpp | 2 | ||||
-rw-r--r-- | src/station_cmd.cpp | 2 | ||||
-rw-r--r-- | src/subsidy.cpp | 2 | ||||
-rw-r--r-- | src/vehicle.cpp | 4 | ||||
-rw-r--r-- | src/vehicle_gui.cpp | 4 |
14 files changed, 33 insertions, 28 deletions
diff --git a/src/animated_tile.cpp b/src/animated_tile.cpp index eb10b9b8d..5204547dd 100644 --- a/src/animated_tile.cpp +++ b/src/animated_tile.cpp @@ -43,7 +43,7 @@ void DeleteAnimatedTile(TileIndex tile) void AddAnimatedTile(TileIndex tile) { MarkTileDirtyByTile(tile); - _animated_tiles.Include(tile); + include(_animated_tiles, tile); } /** diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 0ab82c4fc..9162c17b9 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -18,6 +18,24 @@ #include <algorithm> /** + * Helper function to append an item to a vector if it is not already contained + * Consider using std::set, std::unordered_set or std::flat_set in new code + * + * @param vec A reference to the vector to be extended + * @param item Reference to the item to be copy-constructed if not found + * + * @return Whether the item was already present + */ +template <typename T> +inline bool include(std::vector<T>& vec, const T &item) +{ + const bool is_member = std::find(vec.begin(), vec.end(), item) != vec.end(); + if (!is_member) vec.emplace_back(item); + return is_member; +} + + +/** * Simple vector template class. * * @note There are no asserts in the class so you have @@ -67,19 +85,6 @@ public: ~SmallVector() = default; /** - * Tests whether a item is present in the vector, and appends it to the end if not. - * The '!=' operator of T is used for comparison. - * @param item Item to test for - * @return true iff the item is was already present - */ - inline bool Include(const T &item) - { - bool is_member = std::find(std::vector<T>::begin(), std::vector<T>::end(), item) != std::vector<T>::end(); - if (!is_member) std::vector<T>::emplace_back(item); - return is_member; - } - - /** * Get the pointer to the first item (const) * * @return the pointer to the first item diff --git a/src/economy.cpp b/src/economy.cpp index d306fd0ba..1f17612f7 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1058,7 +1058,7 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n if (IndustryTemporarilyRefusesCargo(ind, cargo_type)) continue; /* Insert the industry into _cargo_delivery_destinations, if not yet contained */ - _cargo_delivery_destinations.Include(ind); + include(_cargo_delivery_destinations, ind); uint amount = min(num_pieces, 0xFFFFU - ind->incoming_cargo_waiting[cargo_index]); ind->incoming_cargo_waiting[cargo_index] += amount; diff --git a/src/fios.cpp b/src/fios.cpp index a1369e1cd..6acb2d891 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -706,7 +706,7 @@ public: FioFCloseFile(f); - this->Include(id); + include(*this, id); return true; } }; diff --git a/src/gfx.cpp b/src/gfx.cpp index 42bb56400..dad675772 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -968,7 +968,7 @@ static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mo if (topleft <= clicked && clicked <= bottomright) { uint offset = (((size_t)clicked - (size_t)topleft) / (blitter->GetScreenDepth() / 8)) % bp.pitch; if (offset < (uint)bp.width) { - _newgrf_debug_sprite_picker.sprites.Include(sprite_id); + include(_newgrf_debug_sprite_picker.sprites, sprite_id); } } } diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 8bec7e400..39cf4c0a1 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -248,7 +248,7 @@ Hotkey::Hotkey(const uint16 *default_keycodes, const char *name, int num) : */ void Hotkey::AddKeycode(uint16 keycode) { - this->keycodes.Include(keycode); + include(this->keycodes, keycode); } HotkeyList::HotkeyList(const char *ini_group, Hotkey *items, GlobalHotkeyHandlerFunc global_hotkey_handler) : diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index fe7905de8..617a2bc6b 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -930,7 +930,7 @@ void ClientNetworkContentSocketHandler::ReverseLookupTreeDependency(ConstContent this->ReverseLookupDependency(parents, tree[i]); for (ConstContentIterator piter = parents.Begin(); piter != parents.End(); piter++) { - tree.Include(*piter); + include(tree, *piter); } } } diff --git a/src/network/network_content.h b/src/network/network_content.h index 7cce7fc0a..08e7755aa 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -140,7 +140,7 @@ public: void Clear(); /** Add a callback to this class */ - void AddCallback(ContentCallback *cb) { this->callbacks.Include(cb); } + void AddCallback(ContentCallback *cb) { include(this->callbacks, cb); } /** Remove a callback */ void RemoveCallback(ContentCallback *cb) { this->callbacks.erase(std::find(this->callbacks.begin(), this->callbacks.end(), cb)); } }; diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index b7237cadd..8e3ec9686 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -274,7 +274,7 @@ public: void OnDownloadProgress(const ContentInfo *ci, int bytes) override { BaseNetworkContentDownloadStatusWindow::OnDownloadProgress(ci, bytes); - this->receivedTypes.Include(ci->type); + include(this->receivedTypes, ci->type); /* When downloading is finished change cancel in ok */ if (this->downloaded_bytes == this->total_bytes) { diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 3a24fb65f..c6548eefb 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1534,7 +1534,7 @@ static Vehicle *UpdateTrainPowerProc(Vehicle *v, void *data) if (v->type != VEH_TRAIN) return NULL; TrainList *affected_trains = static_cast<TrainList*>(data); - affected_trains->Include(Train::From(v)->First()); + include(*affected_trains, Train::From(v)->First()); return NULL; } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index fcbf514bc..6811290ad 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1614,7 +1614,7 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, SmallVector<T *, 4> &affected DeallocateSpecFromStation(st, specindex); - affected_stations.Include(st); + include(affected_stations, st); if (v != NULL) RestoreTrainReservation(v); } diff --git a/src/subsidy.cpp b/src/subsidy.cpp index eac81e362..8f823a1ab 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -577,7 +577,7 @@ bool CheckSubsidised(CargoID cargo_type, CompanyID company, SourceType src_type, for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) { if (!IsTileType(tile, MP_HOUSE)) continue; const Town *t = Town::GetByTile(tile); - if (t->cache.part_of_subsidy & POS_DST) towns_near.Include(t); + if (t->cache.part_of_subsidy & POS_DST) include(towns_near, t); } break; } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index f1b727971..267c20491 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2899,10 +2899,10 @@ void GetVehicleSet(VehicleSet &set, Vehicle *v, uint8 num_vehicles) for (; u != NULL && num_vehicles > 0; num_vehicles--) { do { /* Include current vehicle in the selection. */ - set.Include(u->index); + include(set, u->index); /* If the vehicle is multiheaded, add the other part too. */ - if (u->IsMultiheaded()) set.Include(u->other_multiheaded_part->index); + if (u->IsMultiheaded()) include(set, u->other_multiheaded_part->index); u = u->Next(); } while (u != NULL && u->IsArticulatedPart()); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 9fcebd4e6..82403a2d1 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -238,7 +238,7 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_t for (; v_from != NULL; v_from = v_from->HasArticulatedPart() ? v_from->GetNextArticulatedPart() : NULL) { const Engine *e_from = v_from->GetEngine(); if (!e_from->CanCarryCargo() || !HasBit(e_from->info.callback_mask, CBM_VEHICLE_CARGO_SUFFIX)) continue; - subtypes.Include(GetCargoSubtypeText(v_from)); + include(subtypes, GetCargoSubtypeText(v_from)); } byte ret_refit_cyc = 0; @@ -470,7 +470,7 @@ struct RefitWindow : public Window { option.cargo = cid; option.subtype = refit_cyc; option.string = subtype; - this->list[current_index].Include(option); + include(this->list[current_index], option); } else { /* Intersect the subtypes of earlier vehicles with the subtypes of this vehicle */ if (subtype == STR_EMPTY) { |