From 03f016e9eff8d666d09f72e84e9b6da9883a3f59 Mon Sep 17 00:00:00 2001 From: Sohil Adwani Date: Mon, 15 Jun 2020 14:47:07 -0400 Subject: [PATCH] Smart pointers (#11852) * Part of #11159 Added smart pointers to a few functions * Use camelCase for variables Co-authored-by: duncanspumpkin --- src/openrct2/ride/TrackDesign.cpp | 15 +++++++-------- src/openrct2/world/Map.cpp | 23 ++++++++++------------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 7263da3f29..c601ac3231 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -59,6 +59,7 @@ #include #include +#include using namespace OpenRCT2; using namespace OpenRCT2::Drawing; @@ -93,7 +94,7 @@ static bool _trackDesignPlaceStateHasScenery = false; static bool _trackDesignPlaceStatePlaceScenery = true; static bool _trackDesignPlaceIsReplay = false; -static map_backup* track_design_preview_backup_map(); +static std::unique_ptr track_design_preview_backup_map(); static void track_design_preview_restore_map(map_backup* backup); @@ -2000,7 +2001,7 @@ static bool track_design_place_preview(TrackDesign* td6, money32* cost, Ride** o void track_design_draw_preview(TrackDesign* td6, uint8_t* pixels) { // Make a copy of the map - map_backup* mapBackup = track_design_preview_backup_map(); + auto mapBackup = track_design_preview_backup_map(); if (mapBackup == nullptr) { return; @@ -2018,7 +2019,7 @@ void track_design_draw_preview(TrackDesign* td6, uint8_t* pixels) if (!track_design_place_preview(td6, &cost, &ride, &flags)) { std::fill_n(pixels, TRACK_PREVIEW_IMAGE_SIZE * 4, 0x00); - track_design_preview_restore_map(mapBackup); + track_design_preview_restore_map(mapBackup.get()); return; } td6->cost = cost; @@ -2101,7 +2102,7 @@ void track_design_draw_preview(TrackDesign* td6, uint8_t* pixels) } ride->Delete(); - track_design_preview_restore_map(mapBackup); + track_design_preview_restore_map(mapBackup.get()); } /** @@ -2109,9 +2110,9 @@ void track_design_draw_preview(TrackDesign* td6, uint8_t* pixels) * design preview. * rct2: 0x006D1C68 */ -static map_backup* track_design_preview_backup_map() +static std::unique_ptr track_design_preview_backup_map() { - map_backup* backup = static_cast(malloc(sizeof(map_backup))); + auto backup = std::make_unique(); if (backup != nullptr) { std::memcpy(backup->tile_elements, gTileElements, sizeof(backup->tile_elements)); @@ -2138,8 +2139,6 @@ static void track_design_preview_restore_map(map_backup* backup) gMapSizeMinus2 = backup->map_size_units_minus_2; gMapSize = backup->map_size; gCurrentRotation = backup->current_rotation; - - free(backup); } /** diff --git a/src/openrct2/world/Map.cpp b/src/openrct2/world/Map.cpp index 5217a81aab..587b87f6e1 100644 --- a/src/openrct2/world/Map.cpp +++ b/src/openrct2/world/Map.cpp @@ -57,6 +57,7 @@ #include #include +#include using namespace OpenRCT2; @@ -1076,17 +1077,15 @@ void map_reorganise_elements() { context_setcurrentcursor(CURSOR_ZZZ); - TileElement* new_tile_elements = static_cast(malloc(MAX_TILE_ELEMENTS_WITH_SPARE_ROOM * sizeof(TileElement))); - TileElement* new_elements_pointer = new_tile_elements; + auto newTileElements = std::make_unique(MAX_TILE_ELEMENTS_WITH_SPARE_ROOM); + TileElement* newElementsPtr = newTileElements.get(); - if (new_tile_elements == nullptr) + if (newTileElements == nullptr) { log_fatal("Unable to allocate memory for map elements."); return; } - uint32_t num_elements; - for (int32_t y = 0; y < MAXIMUM_MAP_SIZE_TECHNICAL; y++) { for (int32_t x = 0; x < MAXIMUM_MAP_SIZE_TECHNICAL; x++) @@ -1098,17 +1097,15 @@ void map_reorganise_elements() while (!(endElement++)->IsLastForTile()) ; - num_elements = static_cast(endElement - startElement); - std::memcpy(new_elements_pointer, startElement, num_elements * sizeof(TileElement)); - new_elements_pointer += num_elements; + const auto numElements = static_cast(endElement - startElement); + std::memcpy(newElementsPtr, startElement, numElements * sizeof(TileElement)); + newElementsPtr += numElements; } } - num_elements = static_cast(new_elements_pointer - new_tile_elements); - std::memcpy(gTileElements, new_tile_elements, num_elements * sizeof(TileElement)); - std::memset(gTileElements + num_elements, 0, (MAX_TILE_ELEMENTS_WITH_SPARE_ROOM - num_elements) * sizeof(TileElement)); - - free(new_tile_elements); + const auto numElements = static_cast(newElementsPtr - newTileElements.get()); + std::memcpy(gTileElements, newTileElements.get(), numElements * sizeof(TileElement)); + std::memset(gTileElements + numElements, 0, (MAX_TILE_ELEMENTS_WITH_SPARE_ROOM - numElements) * sizeof(TileElement)); map_update_tile_pointers(); }