Codechange: Use vector/span when loading wagon overrides. (#12604)

Replaces manual memory allocation and passing pointer with size.
This commit is contained in:
Peter Nelson 2024-05-01 18:23:27 +01:00 committed by GitHub
parent 96d82b4363
commit 1424a184d8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 10 additions and 14 deletions

View File

@ -5611,8 +5611,7 @@ static bool IsValidGroupID(uint16_t groupid, const char *function)
static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idcount) static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idcount)
{ {
static EngineID *last_engines; static std::vector<EngineID> last_engines; // Engine IDs are remembered in case the next action is a wagon override.
static uint last_engines_count;
bool wagover = false; bool wagover = false;
/* Test for 'wagon override' flag */ /* Test for 'wagon override' flag */
@ -5621,21 +5620,18 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco
/* Strip off the flag */ /* Strip off the flag */
idcount = GB(idcount, 0, 7); idcount = GB(idcount, 0, 7);
if (last_engines_count == 0) { if (last_engines.empty()) {
GrfMsg(0, "VehicleMapSpriteGroup: WagonOverride: No engine to do override with"); GrfMsg(0, "VehicleMapSpriteGroup: WagonOverride: No engine to do override with");
return; return;
} }
GrfMsg(6, "VehicleMapSpriteGroup: WagonOverride: {} engines, {} wagons", GrfMsg(6, "VehicleMapSpriteGroup: WagonOverride: {} engines, {} wagons", last_engines.size(), idcount);
last_engines_count, idcount);
} else { } else {
if (last_engines_count != idcount) { last_engines.resize(idcount);
last_engines = ReallocT(last_engines, idcount);
last_engines_count = idcount;
}
} }
std::vector<EngineID> engines; std::vector<EngineID> engines;
engines.reserve(idcount);
for (uint i = 0; i < idcount; i++) { for (uint i = 0; i < idcount; i++) {
Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, buf->ReadExtendedByte()); Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, buf->ReadExtendedByte());
if (e == nullptr) { if (e == nullptr) {
@ -5667,7 +5663,7 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco
GrfMsg(7, "VehicleMapSpriteGroup: [{}] Engine {}...", i, engine); GrfMsg(7, "VehicleMapSpriteGroup: [{}] Engine {}...", i, engine);
if (wagover) { if (wagover) {
SetWagonOverrideSprites(engine, cid, _cur.spritegroups[groupid], last_engines, last_engines_count); SetWagonOverrideSprites(engine, cid, _cur.spritegroups[groupid], last_engines);
} else { } else {
SetCustomEngineSprites(engine, cid, _cur.spritegroups[groupid]); SetCustomEngineSprites(engine, cid, _cur.spritegroups[groupid]);
} }
@ -5683,7 +5679,7 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco
EngineID engine = engines[i]; EngineID engine = engines[i];
if (wagover) { if (wagover) {
SetWagonOverrideSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid], last_engines, last_engines_count); SetWagonOverrideSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid], last_engines);
} else { } else {
SetCustomEngineSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid]); SetCustomEngineSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid]);
SetEngineGRF(engine, _cur.grffile); SetEngineGRF(engine, _cur.grffile);

View File

@ -27,7 +27,7 @@
#include "safeguards.h" #include "safeguards.h"
void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *group, EngineID *train_id, uint trains) void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *group, std::span<EngineID> engine_ids)
{ {
Engine *e = Engine::Get(engine); Engine *e = Engine::Get(engine);
@ -36,7 +36,7 @@ void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *
WagonOverride *wo = &e->overrides.emplace_back(); WagonOverride *wo = &e->overrides.emplace_back();
wo->group = group; wo->group = group;
wo->cargo = cargo; wo->cargo = cargo;
wo->engines.assign(train_id, train_id + trains); wo->engines.assign(engine_ids.begin(), engine_ids.end());
} }
const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine) const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine)

View File

@ -76,7 +76,7 @@ static const uint VEHICLEINFO_FULL_VEHICLE_WIDTH = 32;
struct VehicleSpriteSeq; struct VehicleSpriteSeq;
void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const struct SpriteGroup *group, EngineID *train_id, uint trains); void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const struct SpriteGroup *group, std::span<EngineID> engine_ids);
const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine); const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine);
void SetCustomEngineSprites(EngineID engine, uint8_t cargo, const struct SpriteGroup *group); void SetCustomEngineSprites(EngineID engine, uint8_t cargo, const struct SpriteGroup *group);