mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-06 06:32:56 +01:00
* Used smart pointers * Changed functions to take vector as input
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user