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:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user