[Memory] Use global memory allocator when possible
This commit is contained in:
parent
a177e20bf6
commit
d11f5dee1f
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace Components
|
namespace Components
|
||||||
{
|
{
|
||||||
Utils::Memory::Allocator Command::MemAllocator;
|
|
||||||
std::unordered_map<std::string, Utils::Slot<Command::Callback>> Command::FunctionMap;
|
std::unordered_map<std::string, Utils::Slot<Command::Callback>> Command::FunctionMap;
|
||||||
std::unordered_map<std::string, Utils::Slot<Command::Callback>> Command::FunctionMapSV;
|
std::unordered_map<std::string, Utils::Slot<Command::Callback>> Command::FunctionMapSV;
|
||||||
|
|
||||||
@ -130,7 +129,7 @@ namespace Components
|
|||||||
|
|
||||||
Game::cmd_function_t* Command::Allocate()
|
Game::cmd_function_t* Command::Allocate()
|
||||||
{
|
{
|
||||||
return Command::MemAllocator.allocate<Game::cmd_function_t>();
|
return Loader::GetAlloctor()->allocate<Game::cmd_function_t>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Command::MainCallback()
|
void Command::MainCallback()
|
||||||
@ -265,7 +264,6 @@ namespace Components
|
|||||||
|
|
||||||
Command::~Command()
|
Command::~Command()
|
||||||
{
|
{
|
||||||
Command::MemAllocator.clear();
|
|
||||||
Command::FunctionMap.clear();
|
Command::FunctionMap.clear();
|
||||||
Command::FunctionMapSV.clear();
|
Command::FunctionMapSV.clear();
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,6 @@ namespace Components
|
|||||||
static Game::cmd_function_t* Find(std::string command);
|
static Game::cmd_function_t* Find(std::string command);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Utils::Memory::Allocator MemAllocator;
|
|
||||||
static std::unordered_map<std::string, Utils::Slot<Callback>> FunctionMap;
|
static std::unordered_map<std::string, Utils::Slot<Callback>> FunctionMap;
|
||||||
static std::unordered_map<std::string, Utils::Slot<Callback>> FunctionMapSV;
|
static std::unordered_map<std::string, Utils::Slot<Callback>> FunctionMapSV;
|
||||||
|
|
||||||
|
@ -4,40 +4,40 @@ namespace Components
|
|||||||
{
|
{
|
||||||
std::recursive_mutex Localization::LocalizeMutex;
|
std::recursive_mutex Localization::LocalizeMutex;
|
||||||
Dvar::Var Localization::UseLocalization;
|
Dvar::Var Localization::UseLocalization;
|
||||||
Utils::Memory::Allocator Localization::MemAllocator;
|
|
||||||
std::unordered_map<std::string, Game::LocalizeEntry*> Localization::LocalizeMap;
|
std::unordered_map<std::string, Game::LocalizeEntry*> Localization::LocalizeMap;
|
||||||
std::unordered_map<std::string, Game::LocalizeEntry*> Localization::TempLocalizeMap;
|
std::unordered_map<std::string, Game::LocalizeEntry*> Localization::TempLocalizeMap;
|
||||||
|
|
||||||
void Localization::Set(std::string key, std::string value)
|
void Localization::Set(std::string key, std::string value)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> _(Localization::LocalizeMutex);
|
std::lock_guard<std::recursive_mutex> _(Localization::LocalizeMutex);
|
||||||
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
if (Localization::LocalizeMap.find(key) != Localization::LocalizeMap.end())
|
if (Localization::LocalizeMap.find(key) != Localization::LocalizeMap.end())
|
||||||
{
|
{
|
||||||
Game::LocalizeEntry* entry = Localization::LocalizeMap[key];
|
Game::LocalizeEntry* entry = Localization::LocalizeMap[key];
|
||||||
|
|
||||||
char* newStaticValue = Localization::MemAllocator.duplicateString(value);
|
char* newStaticValue = allocator->duplicateString(value);
|
||||||
if (!newStaticValue) return;
|
if (!newStaticValue) return;
|
||||||
if (entry->value) Localization::MemAllocator.free(entry->value);
|
if (entry->value) allocator->free(entry->value);
|
||||||
entry->value = newStaticValue;
|
entry->value = newStaticValue;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Game::LocalizeEntry* entry = Localization::MemAllocator.allocate<Game::LocalizeEntry>();
|
Game::LocalizeEntry* entry = allocator->allocate<Game::LocalizeEntry>();
|
||||||
if (!entry) return;
|
if (!entry) return;
|
||||||
|
|
||||||
entry->name = Localization::MemAllocator.duplicateString(key);
|
entry->name = allocator->duplicateString(key);
|
||||||
if (!entry->name)
|
if (!entry->name)
|
||||||
{
|
{
|
||||||
Localization::MemAllocator.free(entry);
|
allocator->free(entry);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
entry->value = Localization::MemAllocator.duplicateString(value);
|
entry->value = allocator->duplicateString(value);
|
||||||
if (!entry->value)
|
if (!entry->value)
|
||||||
{
|
{
|
||||||
Localization::MemAllocator.free(entry->name);
|
allocator->free(entry->name);
|
||||||
Localization::MemAllocator.free(entry);
|
allocator->free(entry);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,30 +76,31 @@ namespace Components
|
|||||||
void Localization::SetTemp(std::string key, std::string value)
|
void Localization::SetTemp(std::string key, std::string value)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> _(Localization::LocalizeMutex);
|
std::lock_guard<std::recursive_mutex> _(Localization::LocalizeMutex);
|
||||||
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
if (Localization::TempLocalizeMap.find(key) != Localization::TempLocalizeMap.end())
|
if (Localization::TempLocalizeMap.find(key) != Localization::TempLocalizeMap.end())
|
||||||
{
|
{
|
||||||
Game::LocalizeEntry* entry = Localization::TempLocalizeMap[key];
|
Game::LocalizeEntry* entry = Localization::TempLocalizeMap[key];
|
||||||
if(entry->value) Localization::MemAllocator.free(entry->value);
|
if(entry->value) allocator->free(entry->value);
|
||||||
entry->value = Localization::MemAllocator.duplicateString(value);
|
entry->value = allocator->duplicateString(value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Game::LocalizeEntry* entry = Localization::MemAllocator.allocate<Game::LocalizeEntry>();
|
Game::LocalizeEntry* entry = allocator->allocate<Game::LocalizeEntry>();
|
||||||
if (!entry) return;
|
if (!entry) return;
|
||||||
|
|
||||||
entry->name = Localization::MemAllocator.duplicateString(key);
|
entry->name = allocator->duplicateString(key);
|
||||||
if (!entry->name)
|
if (!entry->name)
|
||||||
{
|
{
|
||||||
Localization::MemAllocator.free(entry);
|
allocator->free(entry);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
entry->value = Localization::MemAllocator.duplicateString(value);
|
entry->value = allocator->duplicateString(value);
|
||||||
if (!entry->value)
|
if (!entry->value)
|
||||||
{
|
{
|
||||||
Localization::MemAllocator.free(entry->name);
|
allocator->free(entry->name);
|
||||||
Localization::MemAllocator.free(entry);
|
allocator->free(entry);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,14 +111,15 @@ namespace Components
|
|||||||
void Localization::ClearTemp()
|
void Localization::ClearTemp()
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> _(Localization::LocalizeMutex);
|
std::lock_guard<std::recursive_mutex> _(Localization::LocalizeMutex);
|
||||||
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
for (auto i = Localization::TempLocalizeMap.begin(); i != Localization::TempLocalizeMap.end(); ++i)
|
for (auto i = Localization::TempLocalizeMap.begin(); i != Localization::TempLocalizeMap.end(); ++i)
|
||||||
{
|
{
|
||||||
if (i->second)
|
if (i->second)
|
||||||
{
|
{
|
||||||
if (i->second->name) Localization::MemAllocator.free(i->second->name);
|
if (i->second->name) allocator->free(i->second->name);
|
||||||
if (i->second->value) Localization::MemAllocator.free(i->second->value);
|
if (i->second->value) allocator->free(i->second->value);
|
||||||
Localization::MemAllocator.free(i->second);
|
allocator->free(i->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,8 +291,6 @@ namespace Components
|
|||||||
Localization::~Localization()
|
Localization::~Localization()
|
||||||
{
|
{
|
||||||
Localization::ClearTemp();
|
Localization::ClearTemp();
|
||||||
|
|
||||||
Localization::LocalizeMap.clear();
|
Localization::LocalizeMap.clear();
|
||||||
Localization::MemAllocator.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ namespace Components
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
static std::recursive_mutex LocalizeMutex;
|
static std::recursive_mutex LocalizeMutex;
|
||||||
static Utils::Memory::Allocator MemAllocator;
|
|
||||||
static std::unordered_map<std::string, Game::LocalizeEntry*> LocalizeMap;
|
static std::unordered_map<std::string, Game::LocalizeEntry*> LocalizeMap;
|
||||||
static std::unordered_map<std::string, Game::LocalizeEntry*> TempLocalizeMap;
|
static std::unordered_map<std::string, Game::LocalizeEntry*> TempLocalizeMap;
|
||||||
static Dvar::Var UseLocalization;
|
static Dvar::Var UseLocalization;
|
||||||
|
@ -55,6 +55,8 @@ namespace Components
|
|||||||
|
|
||||||
int Menus::LoadMenuSource(std::string name, std::string buffer)
|
int Menus::LoadMenuSource(std::string name, std::string buffer)
|
||||||
{
|
{
|
||||||
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
int handle = Menus::ReserveSourceHandle();
|
int handle = Menus::ReserveSourceHandle();
|
||||||
if (!Menus::IsValidSourceHandle(handle)) return 0; // No free source slot!
|
if (!Menus::IsValidSourceHandle(handle)) return 0; // No free source slot!
|
||||||
|
|
||||||
@ -68,7 +70,7 @@ namespace Components
|
|||||||
|
|
||||||
script->next = nullptr;
|
script->next = nullptr;
|
||||||
|
|
||||||
Game::source_t *source = Utils::Memory::Allocate<Game::source_t>();
|
Game::source_t *source = allocator->allocate<Game::source_t>();
|
||||||
if (!source)
|
if (!source)
|
||||||
{
|
{
|
||||||
Game::FreeMemory(script);
|
Game::FreeMemory(script);
|
||||||
@ -81,7 +83,7 @@ namespace Components
|
|||||||
source->defines = nullptr;
|
source->defines = nullptr;
|
||||||
source->indentstack = nullptr;
|
source->indentstack = nullptr;
|
||||||
source->skip = 0;
|
source->skip = 0;
|
||||||
source->definehash = static_cast<Game::define_t**>(Utils::Memory::Allocate(4096));
|
source->definehash = static_cast<Game::define_t**>(allocator->allocate(4096));
|
||||||
|
|
||||||
Game::sourceFiles[handle] = source;
|
Game::sourceFiles[handle] = source;
|
||||||
|
|
||||||
@ -112,21 +114,23 @@ namespace Components
|
|||||||
|
|
||||||
Game::menuDef_t* Menus::ParseMenu(int handle)
|
Game::menuDef_t* Menus::ParseMenu(int handle)
|
||||||
{
|
{
|
||||||
Game::menuDef_t* menu = Utils::Memory::Allocate<Game::menuDef_t>();
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
|
Game::menuDef_t* menu = allocator->allocate<Game::menuDef_t>();
|
||||||
if (!menu) return nullptr;
|
if (!menu) return nullptr;
|
||||||
|
|
||||||
menu->items = Utils::Memory::AllocateArray<Game::itemDef_t*>(512);
|
menu->items = allocator->allocateArray<Game::itemDef_t*>(512);
|
||||||
if (!menu->items)
|
if (!menu->items)
|
||||||
{
|
{
|
||||||
Utils::Memory::Free(menu);
|
allocator->free(menu);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Game::pc_token_t token;
|
Game::pc_token_t token;
|
||||||
if (!Game::PC_ReadTokenHandle(handle, &token) || token.string[0] != '{')
|
if (!Game::PC_ReadTokenHandle(handle, &token) || token.string[0] != '{')
|
||||||
{
|
{
|
||||||
Utils::Memory::Free(menu->items);
|
allocator->free(menu->items);
|
||||||
Utils::Memory::Free(menu);
|
allocator->free(menu);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,21 +239,23 @@ namespace Components
|
|||||||
|
|
||||||
Game::MenuList* Menus::LoadScriptMenu(const char* menu)
|
Game::MenuList* Menus::LoadScriptMenu(const char* menu)
|
||||||
{
|
{
|
||||||
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
std::vector<std::pair<bool, Game::menuDef_t*>> menus = Menus::LoadMenu(menu);
|
std::vector<std::pair<bool, Game::menuDef_t*>> menus = Menus::LoadMenu(menu);
|
||||||
if (menus.empty()) return nullptr;
|
if (menus.empty()) return nullptr;
|
||||||
|
|
||||||
// Allocate new menu list
|
// Allocate new menu list
|
||||||
Game::MenuList* newList = Utils::Memory::Allocate<Game::MenuList>();
|
Game::MenuList* newList = allocator->allocate<Game::MenuList>();
|
||||||
if (!newList) return nullptr;
|
if (!newList) return nullptr;
|
||||||
|
|
||||||
newList->menus = Utils::Memory::AllocateArray<Game::menuDef_t*>(menus.size());
|
newList->menus = allocator->allocateArray<Game::menuDef_t*>(menus.size());
|
||||||
if (!newList->menus)
|
if (!newList->menus)
|
||||||
{
|
{
|
||||||
Utils::Memory::Free(newList);
|
allocator->free(newList);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
newList->name = Utils::Memory::DuplicateString(menu);
|
newList->name = allocator->duplicateString(menu);
|
||||||
newList->menuCount = menus.size();
|
newList->menuCount = menus.size();
|
||||||
|
|
||||||
// Copy new menus
|
// Copy new menus
|
||||||
@ -312,6 +318,8 @@ namespace Components
|
|||||||
|
|
||||||
Game::MenuList* Menus::LoadMenuList(Game::MenuList* menuList)
|
Game::MenuList* Menus::LoadMenuList(Game::MenuList* menuList)
|
||||||
{
|
{
|
||||||
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
std::vector<std::pair<bool, Game::menuDef_t*>> menus;
|
std::vector<std::pair<bool, Game::menuDef_t*>> menus;
|
||||||
|
|
||||||
for (int i = 0; i < menuList->menuCount; ++i)
|
for (int i = 0; i < menuList->menuCount; ++i)
|
||||||
@ -340,18 +348,18 @@ namespace Components
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Allocate new menu list
|
// Allocate new menu list
|
||||||
Game::MenuList* newList = Utils::Memory::Allocate<Game::MenuList>();
|
Game::MenuList* newList = allocator->allocate<Game::MenuList>();
|
||||||
if (!newList) return menuList;
|
if (!newList) return menuList;
|
||||||
|
|
||||||
size_t size = menus.size();
|
size_t size = menus.size();
|
||||||
newList->menus = Utils::Memory::AllocateArray<Game::menuDef_t*>(size);
|
newList->menus = allocator->allocateArray<Game::menuDef_t*>(size);
|
||||||
if (!newList->menus)
|
if (!newList->menus)
|
||||||
{
|
{
|
||||||
Utils::Memory::Free(newList);
|
allocator->free(newList);
|
||||||
return menuList;
|
return menuList;
|
||||||
}
|
}
|
||||||
|
|
||||||
newList->name = Utils::Memory::DuplicateString(menuList->name);
|
newList->name = allocator->duplicateString(menuList->name);
|
||||||
newList->menuCount = size;
|
newList->menuCount = size;
|
||||||
|
|
||||||
// Copy new menus
|
// Copy new menus
|
||||||
@ -368,6 +376,8 @@ namespace Components
|
|||||||
|
|
||||||
void Menus::FreeMenuSource(int handle)
|
void Menus::FreeMenuSource(int handle)
|
||||||
{
|
{
|
||||||
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
if (!Menus::IsValidSourceHandle(handle)) return;
|
if (!Menus::IsValidSourceHandle(handle)) return;
|
||||||
|
|
||||||
Game::source_t *source = Game::sourceFiles[handle];
|
Game::source_t *source = Game::sourceFiles[handle];
|
||||||
@ -397,18 +407,20 @@ namespace Components
|
|||||||
{
|
{
|
||||||
Game::indent_t* indent = source->indentstack;
|
Game::indent_t* indent = source->indentstack;
|
||||||
source->indentstack = source->indentstack->next;
|
source->indentstack = source->indentstack->next;
|
||||||
Utils::Memory::Free(indent);
|
allocator->free(indent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source->definehash) Utils::Memory::Free(source->definehash);
|
if (source->definehash) allocator->free(source->definehash);
|
||||||
|
|
||||||
Utils::Memory::Free(source);
|
allocator->free(source);
|
||||||
|
|
||||||
Game::sourceFiles[handle] = nullptr;
|
Game::sourceFiles[handle] = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menus::FreeMenu(Game::menuDef_t* menudef)
|
void Menus::FreeMenu(Game::menuDef_t* menudef)
|
||||||
{
|
{
|
||||||
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
// Do i need to free expressions and strings?
|
// Do i need to free expressions and strings?
|
||||||
// Or does the game take care of it?
|
// Or does the game take care of it?
|
||||||
// Seems like it does...
|
// Seems like it does...
|
||||||
@ -423,30 +435,31 @@ namespace Components
|
|||||||
// Game::Menu_FreeItemMemory(menudef->items[i]);
|
// Game::Menu_FreeItemMemory(menudef->items[i]);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
Utils::Memory::Free(menudef->items);
|
allocator->free(menudef->items);
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::Memory::Free(menudef);
|
allocator->free(menudef);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menus::FreeMenuList(Game::MenuList* menuList)
|
void Menus::FreeMenuList(Game::MenuList* menuList)
|
||||||
{
|
{
|
||||||
if (!menuList) return;
|
if (!menuList) return;
|
||||||
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
// Keep our compiler happy
|
// Keep our compiler happy
|
||||||
Game::MenuList list = { menuList->name, menuList->menuCount, menuList->menus };
|
Game::MenuList list = { menuList->name, menuList->menuCount, menuList->menus };
|
||||||
|
|
||||||
if (list.name)
|
if (list.name)
|
||||||
{
|
{
|
||||||
Utils::Memory::Free(list.name);
|
allocator->free(list.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (list.menus)
|
if (list.menus)
|
||||||
{
|
{
|
||||||
Utils::Memory::Free(list.menus);
|
allocator->free(list.menus);
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::Memory::Free(menuList);
|
allocator->free(menuList);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menus::RemoveMenu(std::string menu)
|
void Menus::RemoveMenu(std::string menu)
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace Components
|
namespace Components
|
||||||
{
|
{
|
||||||
Utils::Memory::Allocator StringTable::MemAllocator;
|
|
||||||
std::unordered_map<std::string, Game::StringTable*> StringTable::StringTableMap;
|
std::unordered_map<std::string, Game::StringTable*> StringTable::StringTableMap;
|
||||||
|
|
||||||
int StringTable::Hash(const char* data)
|
int StringTable::Hash(const char* data)
|
||||||
@ -21,6 +20,8 @@ namespace Components
|
|||||||
|
|
||||||
Game::StringTable* StringTable::LoadObject(std::string filename)
|
Game::StringTable* StringTable::LoadObject(std::string filename)
|
||||||
{
|
{
|
||||||
|
Utils::Memory::Allocator* allocator = Loader::GetAlloctor();
|
||||||
|
|
||||||
filename = Utils::String::ToLower(filename);
|
filename = Utils::String::ToLower(filename);
|
||||||
|
|
||||||
Game::StringTable* table = nullptr;
|
Game::StringTable* table = nullptr;
|
||||||
@ -30,15 +31,15 @@ namespace Components
|
|||||||
{
|
{
|
||||||
Utils::CSV parsedTable(rawTable.getBuffer(), false, false);
|
Utils::CSV parsedTable(rawTable.getBuffer(), false, false);
|
||||||
|
|
||||||
table = StringTable::MemAllocator.allocate<Game::StringTable>();
|
table = allocator->allocate<Game::StringTable>();
|
||||||
|
|
||||||
if (table)
|
if (table)
|
||||||
{
|
{
|
||||||
table->name = StringTable::MemAllocator.duplicateString(filename);
|
table->name = allocator->duplicateString(filename);
|
||||||
table->columnCount = parsedTable.getColumns();
|
table->columnCount = parsedTable.getColumns();
|
||||||
table->rowCount = parsedTable.getRows();
|
table->rowCount = parsedTable.getRows();
|
||||||
|
|
||||||
table->values = StringTable::MemAllocator.allocateArray<Game::StringTableCell>(table->columnCount * table->rowCount);
|
table->values = allocator->allocateArray<Game::StringTableCell>(table->columnCount * table->rowCount);
|
||||||
|
|
||||||
if (!table->values)
|
if (!table->values)
|
||||||
{
|
{
|
||||||
@ -53,7 +54,7 @@ namespace Components
|
|||||||
|
|
||||||
Game::StringTableCell* cell = &table->values[i * table->columnCount + j];
|
Game::StringTableCell* cell = &table->values[i * table->columnCount + j];
|
||||||
cell->hash = StringTable::Hash(value.data());
|
cell->hash = StringTable::Hash(value.data());
|
||||||
cell->string = StringTable::MemAllocator.duplicateString(value);
|
cell->string = allocator->duplicateString(value);
|
||||||
//if (!cell->string) cell->string = ""; // We have to assume it allocated successfully
|
//if (!cell->string) cell->string = ""; // We have to assume it allocated successfully
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,6 +94,5 @@ namespace Components
|
|||||||
StringTable::~StringTable()
|
StringTable::~StringTable()
|
||||||
{
|
{
|
||||||
StringTable::StringTableMap.clear();
|
StringTable::StringTableMap.clear();
|
||||||
StringTable::MemAllocator.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ namespace Components
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Utils::Memory::Allocator MemAllocator;
|
|
||||||
static std::unordered_map<std::string, Game::StringTable*> StringTableMap;
|
static std::unordered_map<std::string, Game::StringTable*> StringTableMap;
|
||||||
|
|
||||||
static int Hash(const char* data);
|
static int Hash(const char* data);
|
||||||
|
@ -1190,7 +1190,7 @@ namespace Components
|
|||||||
AssertSize(image359, 52);
|
AssertSize(image359, 52);
|
||||||
|
|
||||||
// Copy to new struct
|
// Copy to new struct
|
||||||
memcpy(&image359, buffer, sizeof(image359));
|
std::memcpy(&image359, buffer, sizeof(image359));
|
||||||
|
|
||||||
// Convert to old struct
|
// Convert to old struct
|
||||||
Game::GfxImage* image = reinterpret_cast<Game::GfxImage*>(buffer);
|
Game::GfxImage* image = reinterpret_cast<Game::GfxImage*>(buffer);
|
||||||
@ -1212,7 +1212,7 @@ namespace Components
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memcpy(buffer + 28, buffer + (size - 4), 4);
|
std::memcpy(buffer + 28, buffer + (size - 4), 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,10 +125,10 @@ namespace Utils
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<void*> pool;
|
|
||||||
std::map<void*, FreeCallback> refMemory;
|
|
||||||
std::mutex mutex;
|
std::mutex mutex;
|
||||||
std::map<void*, void*> ptrMap;
|
std::vector<void*> pool;
|
||||||
|
std::unordered_map<void*, void*> ptrMap;
|
||||||
|
std::unordered_map<void*, FreeCallback> refMemory;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void* AllocateAlign(size_t length, size_t alignment);
|
static void* AllocateAlign(size_t length, size_t alignment);
|
||||||
|
Loading…
Reference in New Issue
Block a user