diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2018-10-02 20:05:22 +0200 |
|---|---|---|
| committer | Treeston <treeston.mmoc@gmail.com> | 2018-10-02 20:05:22 +0200 |
| commit | f2447a8dfc4e030b0bbe6ac5f8d5f2ff102cf8e5 (patch) | |
| tree | 4b070f85140a1cdb71753621fcaebd7781665fcb | |
| parent | ead439fbd6620ab53530c3d1d28b4755280a1059 (diff) | |
Core/DBC: Some cleanup of Cleanup (8edea4a follow-up)
| -rw-r--r-- | src/server/shared/DataStores/DBCDatabaseLoader.cpp | 43 | ||||
| -rw-r--r-- | src/server/shared/DataStores/DBCDatabaseLoader.h | 4 | ||||
| -rw-r--r-- | src/server/shared/DataStores/DBCStore.cpp | 2 |
3 files changed, 19 insertions, 30 deletions
diff --git a/src/server/shared/DataStores/DBCDatabaseLoader.cpp b/src/server/shared/DataStores/DBCDatabaseLoader.cpp index fd34a86fcb5..8bccbba56fd 100644 --- a/src/server/shared/DataStores/DBCDatabaseLoader.cpp +++ b/src/server/shared/DataStores/DBCDatabaseLoader.cpp @@ -23,8 +23,8 @@ #include "StringFormat.h" #include <sstream> -DBCDatabaseLoader::DBCDatabaseLoader(char const* tableName, char const* dbFormatString, char const* primaryKey, char const* dbcFormatString) - : _sqlTableName(tableName), _formatString(dbFormatString), _indexName(primaryKey), _dbcFormat(dbcFormatString), _sqlIndexPos(0), _recordSize(0) +DBCDatabaseLoader::DBCDatabaseLoader(char const* tableName, char const* dbFormatString, char const* primaryKey, char const* dbcFormatString, std::vector<char*>& stringPool) + : _sqlTableName(tableName), _formatString(dbFormatString), _indexName(primaryKey), _dbcFormat(dbcFormatString), _sqlIndexPos(0), _recordSize(0), _stringPool(stringPool) { // Get sql index position int32 indexPos = -1; @@ -54,28 +54,6 @@ DBCDatabaseLoader::DBCDatabaseLoader(char const* tableName, char const* dbFormat static char const* nullStr = ""; -struct CleanupStruct -{ - static char* Clone(std::string const& str) - { - char* ptr = new char[str.size() + 1]; - memcpy(ptr, str.c_str(), str.size() + 1); - _instance()._managed.push_back(ptr); - return ptr; - } - - ~CleanupStruct() - { - for (char* ptr : _managed) - delete[] ptr; - _managed.clear(); - } - - private: - static CleanupStruct& _instance() { static CleanupStruct c; return c; } - std::vector<char*> _managed; -}; - char* DBCDatabaseLoader::Load(uint32& records, char**& indexTable) { std::string query = Trinity::StringFormat("SELECT * FROM %s ORDER BY %s DESC;", _sqlTableName, _indexName); @@ -160,8 +138,9 @@ char* DBCDatabaseLoader::Load(uint32& records, char**& indexTable) dataOffset += sizeof(uint8); break; case FT_STRING: - *reinterpret_cast<char**>(&dataValue[dataOffset]) = CleanupStruct::Clone(fields[sqlColumnNumber].GetString()); + *reinterpret_cast<char**>(&dataValue[dataOffset]) = CloneStringToPool(fields[sqlColumnNumber].GetString()); dataOffset += sizeof(char*); + break; case FT_SORT: break; default: @@ -175,16 +154,16 @@ char* DBCDatabaseLoader::Load(uint32& records, char**& indexTable) { case FT_FLOAT: *reinterpret_cast<float*>(&dataValue[dataOffset]) = 0.0f; - dataOffset += 4; + dataOffset += sizeof(float); break; case FT_IND: case FT_INT: *reinterpret_cast<uint32*>(&dataValue[dataOffset]) = uint32(0); - dataOffset += 4; + dataOffset += sizeof(uint32); break; case FT_BYTE: *reinterpret_cast<uint8*>(&dataValue[dataOffset]) = uint8(0); - dataOffset += 1; + dataOffset += sizeof(uint8); break; case FT_STRING: *reinterpret_cast<char**>(&dataValue[dataOffset]) = const_cast<char*>(nullStr); @@ -211,3 +190,11 @@ char* DBCDatabaseLoader::Load(uint32& records, char**& indexTable) return dataTable.release(); } + +char* DBCDatabaseLoader::CloneStringToPool(std::string const& str) +{ + char* buf = new char[str.size() + 1]; + memcpy(buf, str.c_str(), str.size() + 1); + _stringPool.push_back(buf); + return buf; +} diff --git a/src/server/shared/DataStores/DBCDatabaseLoader.h b/src/server/shared/DataStores/DBCDatabaseLoader.h index 1f885df8cb7..ebc71969763 100644 --- a/src/server/shared/DataStores/DBCDatabaseLoader.h +++ b/src/server/shared/DataStores/DBCDatabaseLoader.h @@ -24,7 +24,7 @@ struct TC_SHARED_API DBCDatabaseLoader { - DBCDatabaseLoader(char const* dbTable, char const* dbFormatString, char const* index, char const* dbcFormatString); + DBCDatabaseLoader(char const* dbTable, char const* dbFormatString, char const* index, char const* dbcFormatString, std::vector<char*>& stringPool); char* Load(uint32& records, char**& indexTable); @@ -35,6 +35,8 @@ private: char const* _dbcFormat; int32 _sqlIndexPos; uint32 _recordSize; + std::vector<char*>& _stringPool; + char* CloneStringToPool(std::string const& str); DBCDatabaseLoader(DBCDatabaseLoader const& right) = delete; DBCDatabaseLoader& operator=(DBCDatabaseLoader const& right) = delete; diff --git a/src/server/shared/DataStores/DBCStore.cpp b/src/server/shared/DataStores/DBCStore.cpp index dbe0e52fe87..dabaa84aa23 100644 --- a/src/server/shared/DataStores/DBCStore.cpp +++ b/src/server/shared/DataStores/DBCStore.cpp @@ -72,5 +72,5 @@ bool DBCStorageBase::LoadStringsFrom(char const* path, char** indexTable) void DBCStorageBase::LoadFromDB(char const* table, char const* format, char const* index, char**& indexTable) { - _dataTableEx = DBCDatabaseLoader(table, format, index, _fileFormat).Load(_indexTableSize, indexTable); + _dataTableEx = DBCDatabaseLoader(table, format, index, _fileFormat, _stringPool).Load(_indexTableSize, indexTable); } |
