aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/shared')
-rwxr-xr-xsrc/server/shared/DataStores/DBCStore.h65
1 files changed, 41 insertions, 24 deletions
diff --git a/src/server/shared/DataStores/DBCStore.h b/src/server/shared/DataStores/DBCStore.h
index 0a7059ffa21..bae253f4114 100755
--- a/src/server/shared/DataStores/DBCStore.h
+++ b/src/server/shared/DataStores/DBCStore.h
@@ -70,10 +70,17 @@ class DBCStorage
{
typedef std::list<char*> StringPoolList;
public:
- explicit DBCStorage(const char *f) : fmt(f), nCount(0), fieldCount(0), indexTable(NULL), m_dataTable(NULL) { }
+ explicit DBCStorage(const char *f) :
+ fmt(f), nCount(0), fieldCount(0), dataTable(NULL)
+ {
+ indexTable.asT = NULL;
+ }
~DBCStorage() { Clear(); }
- T const* LookupEntry(uint32 id) const { return (id>=nCount)?NULL:indexTable[id]; }
+ T const* LookupEntry(uint32 id) const
+ {
+ return (id >= nCount) ? NULL : indexTable.asT[id];
+ }
uint32 GetNumRows() const { return nCount; }
char const* GetFormat() const { return fmt; }
uint32 GetFieldCount() const { return fieldCount; }
@@ -95,7 +102,7 @@ class DBCStorage
std::string query = "SELECT * FROM " + sql->sqlTableName;
if (sql->indexPos >= 0)
query +=" ORDER BY " + *sql->indexName + " DESC";
- query += ";";
+ query += ';';
result = WorldDatabase.Query(query.c_str());
@@ -115,16 +122,19 @@ class DBCStorage
}
}
}
+
char * sqlDataTable;
fieldCount = dbc.GetCols();
- m_dataTable = (T*)dbc.AutoProduceData(fmt, nCount, (char**&)indexTable, sqlRecordCount, sqlHighestIndex, sqlDataTable);
- m_stringPoolList.push_back(dbc.AutoProduceStrings(fmt, (char*)m_dataTable));
+ dataTable = (T*)dbc.AutoProduceData(fmt, nCount, indexTable.asChar,
+ sqlRecordCount, sqlHighestIndex, sqlDataTable);
+
+ stringPoolList.push_back(dbc.AutoProduceStrings(fmt, (char*)dataTable));
// Insert sql data into arrays
if (result)
{
- if (indexTable)
+ if (indexTable.asT)
{
uint32 offset = 0;
uint32 rowIndex = dbc.GetNumRows();
@@ -136,15 +146,15 @@ class DBCStorage
if(sql->indexPos >= 0)
{
uint32 id = fields[sql->sqlIndexPos].GetUInt32();
- if (indexTable[id])
+ if (indexTable.asT[id])
{
sLog->outError("Index %d already exists in dbc:'%s'", id, sql->sqlTableName.c_str());
return false;
}
- indexTable[id]=(T*)&sqlDataTable[offset];
+ indexTable.asT[id]=(T*)&sqlDataTable[offset];
}
else
- indexTable[rowIndex]=(T*)&sqlDataTable[offset];
+ indexTable.asT[rowIndex]=(T*)&sqlDataTable[offset];
uint32 columnNumber = 0;
uint32 sqlColumnNumber = 0;
@@ -169,7 +179,7 @@ class DBCStorage
break;
case FT_STRING:
// Beginning of the pool - empty string
- *((char**)(&sqlDataTable[offset]))=m_stringPoolList.back();
+ *((char**)(&sqlDataTable[offset]))=stringPoolList.back();
offset+=sizeof(char*);
break;
}
@@ -222,13 +232,13 @@ class DBCStorage
}
// error in dbc file at loading if NULL
- return indexTable!=NULL;
+ return indexTable.asT != NULL;
}
bool LoadStringsFrom(char const* fn)
{
// DBC must be already loaded using Load
- if(!indexTable)
+ if (!indexTable.asT)
return false;
DBCFileLoader dbc;
@@ -236,25 +246,25 @@ class DBCStorage
if(!dbc.Load(fn, fmt))
return false;
- m_stringPoolList.push_back(dbc.AutoProduceStrings(fmt, (char*)m_dataTable));
+ stringPoolList.push_back(dbc.AutoProduceStrings(fmt, (char*)dataTable));
return true;
}
void Clear()
{
- if (!indexTable)
+ if (!indexTable.asT)
return;
- delete[] ((char*)indexTable);
- indexTable = NULL;
- delete[] ((char*)m_dataTable);
- m_dataTable = NULL;
+ delete[] ((char*)indexTable.asT);
+ indexTable.asT = NULL;
+ delete[] ((char*)dataTable);
+ dataTable = NULL;
- while(!m_stringPoolList.empty())
+ while(!stringPoolList.empty())
{
- delete[] m_stringPoolList.front();
- m_stringPoolList.pop_front();
+ delete[] stringPoolList.front();
+ stringPoolList.pop_front();
}
nCount = 0;
}
@@ -263,9 +273,16 @@ class DBCStorage
char const* fmt;
uint32 nCount;
uint32 fieldCount;
- T** indexTable;
- T* m_dataTable;
- StringPoolList m_stringPoolList;
+
+ union
+ {
+ T** asT;
+ char** asChar;
+ }
+ indexTable;
+
+ T* dataTable;
+ StringPoolList stringPoolList;
};
#endif