1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-04 13:42:55 +01:00

Smart pointers (#11852)

* Part of #11159 Added smart pointers to a few functions

* Use camelCase for variables

Co-authored-by: duncanspumpkin <duncans_pumpkin@hotmail.co.uk>
This commit is contained in:
Sohil Adwani
2020-06-15 14:47:07 -04:00
committed by GitHub
parent feb3fcfd6e
commit 03f016e9ef
2 changed files with 17 additions and 21 deletions

View File

@@ -59,6 +59,7 @@
#include <algorithm>
#include <iterator>
#include <memory>
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<map_backup> 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<map_backup> track_design_preview_backup_map()
{
map_backup* backup = static_cast<map_backup*>(malloc(sizeof(map_backup)));
auto backup = std::make_unique<map_backup>();
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);
}
/**

View File

@@ -57,6 +57,7 @@
#include <algorithm>
#include <iterator>
#include <memory>
using namespace OpenRCT2;
@@ -1076,17 +1077,15 @@ void map_reorganise_elements()
{
context_setcurrentcursor(CURSOR_ZZZ);
TileElement* new_tile_elements = static_cast<TileElement*>(malloc(MAX_TILE_ELEMENTS_WITH_SPARE_ROOM * sizeof(TileElement)));
TileElement* new_elements_pointer = new_tile_elements;
auto newTileElements = std::make_unique<TileElement[]>(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<uint32_t>(endElement - startElement);
std::memcpy(new_elements_pointer, startElement, num_elements * sizeof(TileElement));
new_elements_pointer += num_elements;
const auto numElements = static_cast<uint32_t>(endElement - startElement);
std::memcpy(newElementsPtr, startElement, numElements * sizeof(TileElement));
newElementsPtr += numElements;
}
}
num_elements = static_cast<uint32_t>(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<uint32_t>(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();
}