1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-06 06:32:56 +01:00

Part of #11159 (purge malloc() & free()) (#11893)

* Used smart pointers

* Changed functions to take vector as input
This commit is contained in:
rdbaris
2020-07-16 17:35:30 -04:00
committed by GitHub
parent f49149222e
commit a2493af9ce
5 changed files with 11 additions and 16 deletions

View File

@@ -145,6 +145,8 @@ The following people are not part of the development team, but have been contrib
* Mustapha Elghoul (mustaphaelghoul)
* Tyler Leamon (tylerleamon)
* Michael Coates (outerwear)
* Reid Baris (Rdbaris)
* Deanna Baris (dbaris)
## Toolchain
* (Balletie) - macOS

View File

@@ -91,16 +91,15 @@ static bool sprite_file_open(const utf8* path)
if (spriteFileHeader.num_entries > 0)
{
int32_t openEntryTableSize = spriteFileHeader.num_entries * sizeof(rct_g1_element_32bit);
rct_g1_element_32bit* openElements = static_cast<rct_g1_element_32bit*>(malloc(openEntryTableSize));
std::unique_ptr<rct_g1_element_32bit[]> openElements = std::make_unique<rct_g1_element_32bit[]>(openEntryTableSize);
if (openElements == nullptr)
{
fclose(file);
return false;
}
if (fread(openElements, openEntryTableSize, 1, file) != 1)
if (fread(openElements.get(), openEntryTableSize, 1, file) != 1)
{
free(openElements);
fclose(file);
return false;
}
@@ -109,7 +108,6 @@ static bool sprite_file_open(const utf8* path)
if (fread(spriteFileData, spriteFileHeader.total_size, 1, file) != 1)
{
free(spriteFileData);
free(openElements);
fclose(file);
return false;
}
@@ -130,8 +128,6 @@ static bool sprite_file_open(const utf8* path)
outElement->flags = inElement->flags;
outElement->zoomed_offset = inElement->zoomed_offset;
}
free(openElements);
}
fclose(file);
@@ -153,7 +149,7 @@ static bool sprite_file_save(const char* path)
if (spriteFileHeader.num_entries > 0)
{
int32_t saveEntryTableSize = spriteFileHeader.num_entries * sizeof(rct_g1_element_32bit);
rct_g1_element_32bit* saveElements = static_cast<rct_g1_element_32bit*>(malloc(saveEntryTableSize));
std::unique_ptr<rct_g1_element_32bit[]> saveElements = std::make_unique<rct_g1_element_32bit[]>(saveEntryTableSize);
if (saveElements == nullptr)
{
fclose(file);
@@ -175,13 +171,11 @@ static bool sprite_file_save(const char* path)
outElement->zoomed_offset = inElement->zoomed_offset;
}
if (fwrite(saveElements, saveEntryTableSize, 1, file) != 1)
if (fwrite(saveElements.get(), saveEntryTableSize, 1, file) != 1)
{
free(saveElements);
fclose(file);
return false;
}
free(saveElements);
if (fwrite(spriteFileData, spriteFileHeader.total_size, 1, file) != 1)
{

View File

@@ -321,7 +321,7 @@ void unload_unselected_objects()
const ObjectRepositoryItem* items = object_repository_get_items();
size_t numObjectsToUnload = 0;
rct_object_entry* objectsToUnload = static_cast<rct_object_entry*>(malloc(numItems * sizeof(rct_object_entry)));
std::vector<rct_object_entry> objectsToUnload;
for (int32_t i = 0; i < numItems; i++)
{
@@ -335,7 +335,6 @@ void unload_unselected_objects()
}
object_manager_unload_objects(objectsToUnload, numObjectsToUnload);
free(objectsToUnload);
}
/**

View File

@@ -147,7 +147,7 @@ public:
log_verbose("%u / %u new objects loaded", numNewLoadedObjects, requiredObjects.size());
}
void UnloadObjects(const rct_object_entry* entries, size_t count) override
void UnloadObjects(const std::vector<rct_object_entry>& entries, size_t count) override
{
// TODO there are two performance issues here:
// - FindObject for every entry which is a dictionary lookup
@@ -747,7 +747,7 @@ void* object_manager_load_object(const rct_object_entry* entry)
return static_cast<void*>(loadedObject);
}
void object_manager_unload_objects(const rct_object_entry* entries, size_t count)
void object_manager_unload_objects(const std::vector<rct_object_entry>& entries, size_t count)
{
auto& objectManager = OpenRCT2::GetContext()->GetObjectManager();
objectManager.UnloadObjects(entries, count);

View File

@@ -33,7 +33,7 @@ interface IObjectManager
virtual Object* LoadObject(const rct_object_entry* entry) abstract;
virtual void LoadObjects(const rct_object_entry* entries, size_t count) abstract;
virtual void LoadDefaultObjects() abstract;
virtual void UnloadObjects(const rct_object_entry* entries, size_t count) abstract;
virtual void UnloadObjects(const std::vector<rct_object_entry>& entries, size_t count) abstract;
virtual void UnloadAll() abstract;
virtual void ResetObjects() abstract;
@@ -48,6 +48,6 @@ void* object_manager_get_loaded_object_by_index(size_t index);
void* object_manager_get_loaded_object(const rct_object_entry* entry);
ObjectEntryIndex object_manager_get_loaded_object_entry_index(const void* loadedObject);
void* object_manager_load_object(const rct_object_entry* entry);
void object_manager_unload_objects(const rct_object_entry* entries, size_t count);
void object_manager_unload_objects(const std::vector<rct_object_entry>& entries, size_t count);
void object_manager_unload_all_objects();
rct_string_id object_manager_get_source_game_string(const uint8_t sourceGame);