From 4fe3f0ccdddd838a2ba9d93aa4b620905ffa575b Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 13 Jan 2025 23:31:09 +0100 Subject: [PATCH] Codechange: simplify management of temporary Engine in saveload --- src/saveload/engine_sl.cpp | 36 ++++-------------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index 5541975b91..048157129d 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -41,39 +41,14 @@ static const SaveLoad _engine_desc[] = { SLE_CONDSSTR(Engine, name, SLE_STR, SLV_84, SL_MAX_VERSION), }; -static std::vector _temp_engine; - -/** - * Allocate an Engine structure, but not using the pools. - * The allocated Engine must be freed using FreeEngine; - * @return Allocated engine. - */ -static Engine *CallocEngine() -{ - uint8_t *zero = CallocT(sizeof(Engine)); - Engine *engine = new (zero) Engine(); - return engine; -} - -/** - * Deallocate an Engine constructed by CallocEngine. - * @param e Engine to free. - */ -static void FreeEngine(Engine *e) -{ - if (e != nullptr) { - e->~Engine(); - free(e); - } -} +static std::vector _temp_engine; Engine *GetTempDataEngine(EngineID index) { if (index < _temp_engine.size()) { - return _temp_engine[index]; + return &_temp_engine[index]; } else if (index == _temp_engine.size()) { - _temp_engine.push_back(CallocEngine()); - return _temp_engine[index]; + return &_temp_engine.emplace_back(); } else { NOT_REACHED(); } @@ -148,11 +123,8 @@ void CopyTempEngineData() void ResetTempEngineData() { - /* Get rid of temporary data */ - for (std::vector::iterator it = _temp_engine.begin(); it != _temp_engine.end(); ++it) { - FreeEngine(*it); - } _temp_engine.clear(); + _temp_engine.shrink_to_fit(); } struct ENGSChunkHandler : ChunkHandler {