aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/ScriptMgr.cpp2
-rw-r--r--src/bindings/scripts/ScriptMgr.h2
-rw-r--r--src/game/AchievementMgr.cpp6
-rw-r--r--src/game/AchievementMgr.h4
-rw-r--r--src/game/AuctionHouseMgr.cpp2
-rw-r--r--src/game/DBCEnums.h (renamed from src/shared/Database/DBCEnums.h)0
-rw-r--r--src/game/DBCStores.cpp (renamed from src/shared/Database/DBCStores.cpp)5
-rw-r--r--src/game/DBCStores.h (renamed from src/shared/Database/DBCStores.h)87
-rw-r--r--src/game/DBCStructure.h (renamed from src/shared/Database/DBCStructure.h)4
-rw-r--r--src/game/DBCfmt.h (renamed from src/shared/Database/DBCfmt.cpp)5
-rw-r--r--src/game/HostilRefManager.cpp2
-rw-r--r--src/game/Mail.cpp2
-rw-r--r--src/game/Makefile.am5
-rw-r--r--src/game/Map.h2
-rw-r--r--src/game/OutdoorPvPEP.h2
-rw-r--r--src/game/Pet.cpp10
-rw-r--r--src/game/PetAI.cpp2
-rw-r--r--src/game/ReputationMgr.cpp4
-rw-r--r--src/game/ReputationMgr.h2
-rw-r--r--src/game/SpellHandler.cpp2
-rw-r--r--src/game/SpellMgr.cpp2
-rw-r--r--src/game/SpellMgr.h2
-rw-r--r--src/game/TotemAI.cpp2
-rw-r--r--src/game/Transports.cpp2
-rw-r--r--src/game/Unit.cpp2
-rw-r--r--src/game/Unit.h2
-rw-r--r--src/game/World.cpp2
-rw-r--r--src/shared/Database/DBCFileLoader.h (renamed from src/shared/Database/dbcfile.h)19
-rw-r--r--src/shared/Database/DBCStore.h94
-rw-r--r--src/shared/Database/DatabaseEnv.h1
-rw-r--r--src/shared/Database/Makefile.am11
-rw-r--r--src/shared/Database/SQLStorageImpl.h2
-rw-r--r--src/shared/Database/dbcfile.cpp261
33 files changed, 154 insertions, 398 deletions
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp
index b63d27055d4..09bbf7955e8 100644
--- a/src/bindings/scripts/ScriptMgr.cpp
+++ b/src/bindings/scripts/ScriptMgr.cpp
@@ -5,7 +5,7 @@
#include "precompiled.h"
#include "Config/Config.h"
#include "Database/DatabaseEnv.h"
-#include "Database/DBCStores.h"
+#include "DBCStores.h"
#include "ObjectMgr.h"
#include "ProgressBar.h"
#include "scripts/creature/mob_event_ai.h"
diff --git a/src/bindings/scripts/ScriptMgr.h b/src/bindings/scripts/ScriptMgr.h
index 75474cfa2b8..7d814c373da 100644
--- a/src/bindings/scripts/ScriptMgr.h
+++ b/src/bindings/scripts/ScriptMgr.h
@@ -10,7 +10,7 @@
#include "Common.h"
#include "Platform/CompilerDefs.h"
-#include "Database/DBCStructure.h"
+#include "DBCStructure.h"
class Player;
class Creature;
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp
index dfd63f4b37d..c3bef0678e6 100644
--- a/src/game/AchievementMgr.cpp
+++ b/src/game/AchievementMgr.cpp
@@ -20,7 +20,7 @@
#include "Common.h"
#include "Player.h"
#include "WorldPacket.h"
-#include "Database/DBCEnums.h"
+#include "DBCEnums.h"
#include "GameEventMgr.h"
#include "ObjectMgr.h"
#include "Guild.h"
@@ -197,10 +197,8 @@ void AchievementMgr::SaveToDB()
if(need_execute)
{
- CharacterDatabase.BeginTransaction ();
CharacterDatabase.Execute( ssdel.str().c_str() );
CharacterDatabase.Execute( ssins.str().c_str() );
- CharacterDatabase.CommitTransaction ();
}
}
@@ -258,12 +256,10 @@ void AchievementMgr::SaveToDB()
if(need_execute_del || need_execute_ins)
{
- CharacterDatabase.BeginTransaction ();
if(need_execute_del)
CharacterDatabase.Execute( ssdel.str().c_str() );
if(need_execute_ins)
CharacterDatabase.Execute( ssins.str().c_str() );
- CharacterDatabase.CommitTransaction ();
}
}
}
diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h
index 83a4317f601..030d053a554 100644
--- a/src/game/AchievementMgr.h
+++ b/src/game/AchievementMgr.h
@@ -20,9 +20,9 @@
#include "Common.h"
#include "Policies/Singleton.h"
-#include "Database/DBCEnums.h"
-#include "Database/DBCStores.h"
#include "Database/DatabaseEnv.h"
+#include "DBCEnums.h"
+#include "DBCStores.h"
#include <map>
#include <string>
diff --git a/src/game/AuctionHouseMgr.cpp b/src/game/AuctionHouseMgr.cpp
index 0e028b62296..f50de441b58 100644
--- a/src/game/AuctionHouseMgr.cpp
+++ b/src/game/AuctionHouseMgr.cpp
@@ -18,8 +18,8 @@
#include "Common.h"
#include "Database/DatabaseEnv.h"
-#include "Database/DBCStores.h"
#include "Database/SQLStorage.h"
+#include "DBCStores.h"
#include "ProgressBar.h"
#include "AccountMgr.h"
diff --git a/src/shared/Database/DBCEnums.h b/src/game/DBCEnums.h
index c5801c7b315..c5801c7b315 100644
--- a/src/shared/Database/DBCEnums.h
+++ b/src/game/DBCEnums.h
diff --git a/src/shared/Database/DBCStores.cpp b/src/game/DBCStores.cpp
index ba61b028203..018b361616f 100644
--- a/src/shared/Database/DBCStores.cpp
+++ b/src/game/DBCStores.cpp
@@ -19,12 +19,11 @@
*/
#include "DBCStores.h"
-//#include "DataStore.h"
#include "Policies/SingletonImp.h"
#include "Log.h"
#include "ProgressBar.h"
-#include "DBCfmt.cpp"
+#include "DBCfmt.h"
#include <map>
@@ -162,7 +161,7 @@ template<class T>
inline void LoadDBC(uint32& availableDbcLocales,barGoLink& bar, StoreProblemList& errlist, DBCStorage<T>& storage, const std::string& dbc_path, const std::string& filename)
{
// compatibility format and C++ structure sizes
- assert(DBCFile::GetFormatRecordSize(storage.GetFormat()) == sizeof(T) || LoadDBC_assert_print(DBCFile::GetFormatRecordSize(storage.GetFormat()),sizeof(T),filename));
+ assert(DBCFileLoader::GetFormatRecordSize(storage.GetFormat()) == sizeof(T) || LoadDBC_assert_print(DBCFileLoader::GetFormatRecordSize(storage.GetFormat()),sizeof(T),filename));
std::string dbc_filename = dbc_path + filename;
if(storage.Load(dbc_filename.c_str()))
diff --git a/src/shared/Database/DBCStores.h b/src/game/DBCStores.h
index 3e8d3280596..4cad2b106c5 100644
--- a/src/shared/Database/DBCStores.h
+++ b/src/game/DBCStores.h
@@ -1,8 +1,6 @@
/*
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
- * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/>
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -18,12 +16,11 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#ifndef DBCSTORES_H
-#define DBCSTORES_H
+#ifndef MANGOS_DBCSTORES_H
+#define MANGOS_DBCSTORES_H
#include "Common.h"
-//#include "DataStore.h"
-#include "dbcfile.h"
+#include "Database/DBCStore.h"
#include "DBCStructure.h"
#include <list>
@@ -61,77 +58,6 @@ uint32 GetTalentInspectBitPosInTab(uint32 talentId);
uint32 GetTalentTabInspectBitSize(uint32 talentTabId);
uint32 const* /*[3]*/ GetTalentTabPages(uint32 cls);
-template<class T>
-class DBCStorage
-{
- typedef std::list<char*> StringPoolList;
- public:
- explicit DBCStorage(const char *f) : nCount(0), fieldCount(0), fmt(f), indexTable(NULL), m_dataTable(NULL) { }
- ~DBCStorage() { Clear(); }
-
- T const* LookupEntry(uint32 id) const { return (id>=nCount)?NULL:indexTable[id]; }
- uint32 GetNumRows() const { return nCount; }
- char const* GetFormat() const { return fmt; }
- uint32 GetFieldCount() const { return fieldCount; }
-
- bool Load(char const* fn)
- {
- DBCFile dbc;
- // Check if load was sucessful, only then continue
- if(!dbc.Load(fn, fmt))
- return false;
-
- fieldCount = dbc.GetCols();
- m_dataTable = (T*)dbc.AutoProduceData(fmt,nCount,(char**&)indexTable);
- m_stringPoolList.push_back(dbc.AutoProduceStrings(fmt,(char*)m_dataTable));
-
- // error in dbc file at loading if NULL
- return indexTable!=NULL;
- }
-
- bool LoadStringsFrom(char const* fn)
- {
- // DBC must be already loaded using Load
- if(!indexTable)
- return false;
-
- DBCFile dbc;
- // Check if load was successful, only then continue
- if(!dbc.Load(fn, fmt))
- return false;
-
- m_stringPoolList.push_back(dbc.AutoProduceStrings(fmt,(char*)m_dataTable));
-
- return true;
- }
-
- void Clear()
- {
- if (!indexTable)
- return;
-
- delete[] ((char*)indexTable);
- indexTable = NULL;
- delete[] ((char*)m_dataTable);
- m_dataTable = NULL;
-
- while(!m_stringPoolList.empty())
- {
- delete[] m_stringPoolList.front();
- m_stringPoolList.pop_front();
- }
- nCount = 0;
- }
-
- private:
- uint32 nCount;
- uint32 fieldCount;
- char const* fmt;
- T** indexTable;
- T* m_dataTable;
- StringPoolList m_stringPoolList;
-};
-
extern DBCStorage <AchievementEntry> sAchievementStore;
extern DBCStorage <AchievementCriteriaEntry> sAchievementCriteriaStore;
extern DBCStorage <AreaTableEntry> sAreaStore;// recommend access using functions
@@ -220,11 +146,10 @@ extern DBCStorage <WorldMapOverlayEntry> sWorldMapOverlayStore;
void LoadDBCStores(const std::string& dataPath);
// script support functions
-TRINITY_DLL_SPEC DBCStorage <SoundEntriesEntry> const* GetSoundEntriesStore();
-TRINITY_DLL_SPEC DBCStorage <SpellEntry> const* GetSpellStore();
-TRINITY_DLL_SPEC DBCStorage <SpellRangeEntry> const* GetSpellRangeStore();
+TRINITY_DLL_SPEC DBCStorage <SoundEntriesEntry> const* GetSoundEntriesStore();
+TRINITY_DLL_SPEC DBCStorage <SpellEntry> const* GetSpellStore();
+TRINITY_DLL_SPEC DBCStorage <SpellRangeEntry> const* GetSpellRangeStore();
TRINITY_DLL_SPEC DBCStorage <FactionEntry> const* GetFactionStore();
TRINITY_DLL_SPEC DBCStorage <ItemEntry> const* GetItemDisplayStore();
TRINITY_DLL_SPEC DBCStorage <CreatureDisplayInfoEntry> const* GetCreatureDisplayStore();
#endif
-
diff --git a/src/shared/Database/DBCStructure.h b/src/game/DBCStructure.h
index 32f78faa509..e9370c3e4ad 100644
--- a/src/shared/Database/DBCStructure.h
+++ b/src/game/DBCStructure.h
@@ -18,8 +18,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#ifndef DBCSTRUCTURE_H
-#define DBCSTRUCTURE_H
+#ifndef MANGOS_DBCSTRUCTURE_H
+#define MANGOS_DBCSTRUCTURE_H
#include "DBCEnums.h"
#include "Platform/Define.h"
diff --git a/src/shared/Database/DBCfmt.cpp b/src/game/DBCfmt.h
index fdaaac14f66..f7d8538bf3b 100644
--- a/src/shared/Database/DBCfmt.cpp
+++ b/src/game/DBCfmt.h
@@ -18,6 +18,9 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#ifndef MANGOS_DBCSFRM_H
+#define MANGOS_DBCSFRM_H
+
const char Achievementfmt[]="niixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiixixxxxxxxxxxxxxxxxxxxi";
const char AchievementCriteriafmt[]="niiiiiiiixxxxxxxxxxxxxxxxxiixix";
const char AreaTableEntryfmt[]="iiinixxxxxissssssssssssssssxixxxxxxx";
@@ -99,3 +102,5 @@ const char VehicleSeatEntryfmt[]="niiffffffffffiiiiiifffffffiiifffiiiiiiiffiiiii
const char WorldMapAreaEntryfmt[]="xinxffffix";
const char WorldSafeLocsEntryfmt[]="nifffxxxxxxxxxxxxxxxxx";
const char WorldMapOverlayEntryfmt[]="nxiiiixxxxxxxxxxx";
+
+#endif \ No newline at end of file
diff --git a/src/game/HostilRefManager.cpp b/src/game/HostilRefManager.cpp
index aee035ded49..4a51d54248d 100644
--- a/src/game/HostilRefManager.cpp
+++ b/src/game/HostilRefManager.cpp
@@ -21,7 +21,7 @@
#include "HostilRefManager.h"
#include "ThreatManager.h"
#include "Unit.h"
-#include "Database/DBCStructure.h"
+#include "DBCStructure.h"
#include "SpellMgr.h"
HostilRefManager::~HostilRefManager()
diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp
index 8b5c5e5faf2..09c95628921 100644
--- a/src/game/Mail.cpp
+++ b/src/game/Mail.cpp
@@ -29,8 +29,8 @@
#include "UpdateMask.h"
#include "Unit.h"
#include "Language.h"
-#include "Database/DBCStores.h"
#include "AuctionHouseBot.h"
+#include "DBCStores.h"
void MailItem::deleteItem( bool inDB )
{
diff --git a/src/game/Makefile.am b/src/game/Makefile.am
index 329ecdaa9cf..4c629fcf40b 100644
--- a/src/game/Makefile.am
+++ b/src/game/Makefile.am
@@ -380,6 +380,11 @@ libmangosgame_a_SOURCES = \
CreatureAISelector.h \
Creature.cpp \
Creature.h \
+ DBCEnums.h \
+ DBCfmt.h \
+ DBCStores.cpp \
+ DBCStores.h \
+ DBCStructure.h \
debugcmds.cpp \
DestinationHolder.cpp \
DestinationHolder.h \
diff --git a/src/game/Map.h b/src/game/Map.h
index bd3ca891a58..83cb1009669 100644
--- a/src/game/Map.h
+++ b/src/game/Map.h
@@ -26,7 +26,7 @@
#include "zthread/Lockable.h"
#include "zthread/Mutex.h"
#include "zthread/FairReadWriteLock.h"
-#include "Database/DBCStructure.h"
+#include "DBCStructure.h"
#include "GridDefines.h"
#include "Cell.h"
#include "Timer.h"
diff --git a/src/game/OutdoorPvPEP.h b/src/game/OutdoorPvPEP.h
index 5ba4591e48d..08d31de5cf5 100644
--- a/src/game/OutdoorPvPEP.h
+++ b/src/game/OutdoorPvPEP.h
@@ -21,7 +21,7 @@
#include "OutdoorPvP.h"
-#include "Database/DBCStructure.h"
+#include "DBCStructure.h"
const uint32 EP_AllianceBuffs[4] = {11413, 11414, 11415, 1386};
diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp
index 71f45507d45..91630eda9a4 100644
--- a/src/game/Pet.cpp
+++ b/src/game/Pet.cpp
@@ -210,8 +210,6 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool
}
owner->SetPet(this, true);
- AIM_Initialize();
- map->Add((Creature*)this);
InitStatsForLevel(petlevel);
SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, time(NULL));
@@ -314,6 +312,9 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool
sLog.outDebug("New Pet has guid %u", GetGUIDLow());
+ AIM_Initialize();
+ map->Add((Creature*)this);
+
if(owner->GetTypeId() == TYPEID_PLAYER)
{
((Player*)owner)->PetSpellInitialize();
@@ -1362,8 +1363,8 @@ bool Pet::learnSpell(uint32 spell_id)
WorldPacket data(SMSG_PET_LEARNED_SPELL, 2);
data << uint16(spell_id);
((Player*)owner)->GetSession()->SendPacket(&data);
+ ((Player*)owner)->PetSpellInitialize();
}
- ((Player*)owner)->PetSpellInitialize();
}
return true;
}
@@ -1603,7 +1604,8 @@ bool Pet::resetTalents(bool no_cost)
m_resetTalentsCost = cost;
m_resetTalentsTime = time(NULL);
}
- player->PetSpellInitialize();
+ if(!m_loading)
+ player->PetSpellInitialize();
return true;
}
diff --git a/src/game/PetAI.cpp b/src/game/PetAI.cpp
index f218818febf..3ba66bd57a0 100644
--- a/src/game/PetAI.cpp
+++ b/src/game/PetAI.cpp
@@ -22,7 +22,7 @@
#include "Errors.h"
#include "Pet.h"
#include "Player.h"
-#include "Database/DBCStores.h"
+#include "DBCStores.h"
#include "Spell.h"
#include "ObjectAccessor.h"
#include "SpellMgr.h"
diff --git a/src/game/ReputationMgr.cpp b/src/game/ReputationMgr.cpp
index 0ff70201015..62b9504daff 100644
--- a/src/game/ReputationMgr.cpp
+++ b/src/game/ReputationMgr.cpp
@@ -17,7 +17,7 @@
*/
#include "ReputationMgr.h"
-#include "Database/DBCStores.h"
+#include "DBCStores.h"
#include "Player.h"
#include "WorldPacket.h"
@@ -444,7 +444,6 @@ void ReputationMgr::LoadFromDB(QueryResult *result)
void ReputationMgr::SaveToDB()
{
- CharacterDatabase.BeginTransaction();
for(FactionStateList::iterator itr = m_factions.begin(); itr != m_factions.end(); ++itr)
{
if (itr->second.Changed)
@@ -454,7 +453,6 @@ void ReputationMgr::SaveToDB()
itr->second.Changed = false;
}
}
- CharacterDatabase.CommitTransaction();
}
void ReputationMgr::UpdateRankCounters( ReputationRank old_rank, ReputationRank new_rank )
diff --git a/src/game/ReputationMgr.h b/src/game/ReputationMgr.h
index cb4c85fd5be..b81634119df 100644
--- a/src/game/ReputationMgr.h
+++ b/src/game/ReputationMgr.h
@@ -21,7 +21,7 @@
#include "Common.h"
#include "SharedDefines.h"
-#include "Database/DBCStructure.h"
+#include "DBCStructure.h"
#include <map>
enum FactionFlags
diff --git a/src/game/SpellHandler.cpp b/src/game/SpellHandler.cpp
index e15dd92149b..2fd5384d03e 100644
--- a/src/game/SpellHandler.cpp
+++ b/src/game/SpellHandler.cpp
@@ -19,7 +19,7 @@
*/
#include "Common.h"
-#include "Database/DBCStores.h"
+#include "DBCStores.h"
#include "WorldPacket.h"
#include "WorldSession.h"
#include "ObjectMgr.h"
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
index dead7ed3cc2..36039c4c04c 100644
--- a/src/game/SpellMgr.cpp
+++ b/src/game/SpellMgr.cpp
@@ -22,7 +22,7 @@
#include "ObjectMgr.h"
#include "SpellAuraDefines.h"
#include "ProgressBar.h"
-#include "Database/DBCStores.h"
+#include "DBCStores.h"
#include "World.h"
#include "Chat.h"
#include "Spell.h"
diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h
index 190059f81c4..234922fc0b4 100644
--- a/src/game/SpellMgr.h
+++ b/src/game/SpellMgr.h
@@ -25,7 +25,7 @@
// For more high level function for sSpellStore data
#include "SharedDefines.h"
-#include "Database/DBCStructure.h"
+#include "DBCStructure.h"
#include "Database/SQLStorage.h"
#include "Utilities/UnorderedMap.h"
diff --git a/src/game/TotemAI.cpp b/src/game/TotemAI.cpp
index a8a049f9dd0..cc32d40fdae 100644
--- a/src/game/TotemAI.cpp
+++ b/src/game/TotemAI.cpp
@@ -21,7 +21,7 @@
#include "TotemAI.h"
#include "Totem.h"
#include "Creature.h"
-#include "Database/DBCStores.h"
+#include "DBCStores.h"
#include "ObjectAccessor.h"
#include "SpellMgr.h"
diff --git a/src/game/Transports.cpp b/src/game/Transports.cpp
index ea267f5df46..147f8ce39a3 100644
--- a/src/game/Transports.cpp
+++ b/src/game/Transports.cpp
@@ -26,7 +26,7 @@
#include "Path.h"
#include "WorldPacket.h"
-#include "Database/DBCStores.h"
+#include "DBCStores.h"
#include "ProgressBar.h"
#include "World.h"
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 100fa5231db..c7a5d45d285 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -8273,7 +8273,7 @@ Pet* Unit::GetPet() const
return pet;
sLog.outError("Unit::GetPet: Pet %u not exist.",GUID_LOPART(pet_guid));
- const_cast<Unit*>(this)->SetUInt64Value(UNIT_FIELD_SUMMON, 0);
+ //const_cast<Unit*>(this)->SetUInt64Value(UNIT_FIELD_SUMMON, 0);
}
return NULL;
diff --git a/src/game/Unit.h b/src/game/Unit.h
index 80547a7e237..b8d58110352 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -33,7 +33,7 @@
#include "FollowerRefManager.h"
#include "Utilities/EventProcessor.h"
#include "MotionMaster.h"
-#include "Database/DBCStructure.h"
+#include "DBCStructure.h"
#include <list>
#define WORLD_TRIGGER 12999
diff --git a/src/game/World.cpp b/src/game/World.cpp
index 3a2709549e8..8aaaeec2dc4 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -42,7 +42,7 @@
#include "ObjectMgr.h"
#include "SpellMgr.h"
#include "Chat.h"
-#include "Database/DBCStores.h"
+#include "DBCStores.h"
#include "LootMgr.h"
#include "ItemEnchantmentMgr.h"
#include "MapManager.h"
diff --git a/src/shared/Database/dbcfile.h b/src/shared/Database/DBCFileLoader.h
index e94417b4371..13562148dfc 100644
--- a/src/shared/Database/dbcfile.h
+++ b/src/shared/Database/DBCFileLoader.h
@@ -1,8 +1,6 @@
/*
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
- * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/>
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -18,8 +16,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#ifndef DBCFILE_H
-#define DBCFILE_H
+#ifndef DBC_FILE_LOADER_H
+#define DBC_FILE_LOADER_H
#include "Platform/Define.h"
#include "Utilities/ByteConverter.h"
#include <cassert>
@@ -37,11 +35,11 @@ enum
FT_LOGIC='l' //Logical (boolean)
};
-class DBCFile
+class DBCFileLoader
{
public:
- DBCFile();
- ~DBCFile();
+ DBCFileLoader();
+ ~DBCFileLoader();
bool Load(const char *filename, const char *fmt);
@@ -77,11 +75,11 @@ class DBCFile
}
private:
- Record(DBCFile &file_, unsigned char *offset_): offset(offset_), file(file_) {}
+ Record(DBCFileLoader &file_, unsigned char *offset_): offset(offset_), file(file_) {}
unsigned char *offset;
- DBCFile &file;
+ DBCFileLoader &file;
- friend class DBCFile;
+ friend class DBCFileLoader;
};
@@ -107,4 +105,3 @@ class DBCFile
unsigned char *stringTable;
};
#endif
-
diff --git a/src/shared/Database/DBCStore.h b/src/shared/Database/DBCStore.h
new file mode 100644
index 00000000000..523d5c5a0b3
--- /dev/null
+++ b/src/shared/Database/DBCStore.h
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef DBCSTORE_H
+#define DBCSTORE_H
+
+#include "DBCFileLoader.h"
+
+template<class T>
+class DBCStorage
+{
+ typedef std::list<char*> StringPoolList;
+ public:
+ explicit DBCStorage(const char *f) : nCount(0), fieldCount(0), fmt(f), indexTable(NULL), m_dataTable(NULL) { }
+ ~DBCStorage() { Clear(); }
+
+ T const* LookupEntry(uint32 id) const { return (id>=nCount)?NULL:indexTable[id]; }
+ uint32 GetNumRows() const { return nCount; }
+ char const* GetFormat() const { return fmt; }
+ uint32 GetFieldCount() const { return fieldCount; }
+
+ bool Load(char const* fn)
+ {
+ DBCFileLoader dbc;
+ // Check if load was sucessful, only then continue
+ if(!dbc.Load(fn, fmt))
+ return false;
+
+ fieldCount = dbc.GetCols();
+ m_dataTable = (T*)dbc.AutoProduceData(fmt,nCount,(char**&)indexTable);
+ m_stringPoolList.push_back(dbc.AutoProduceStrings(fmt,(char*)m_dataTable));
+
+ // error in dbc file at loading if NULL
+ return indexTable!=NULL;
+ }
+
+ bool LoadStringsFrom(char const* fn)
+ {
+ // DBC must be already loaded using Load
+ if(!indexTable)
+ return false;
+
+ DBCFileLoader dbc;
+ // Check if load was successful, only then continue
+ if(!dbc.Load(fn, fmt))
+ return false;
+
+ m_stringPoolList.push_back(dbc.AutoProduceStrings(fmt,(char*)m_dataTable));
+
+ return true;
+ }
+
+ void Clear()
+ {
+ if (!indexTable)
+ return;
+
+ delete[] ((char*)indexTable);
+ indexTable = NULL;
+ delete[] ((char*)m_dataTable);
+ m_dataTable = NULL;
+
+ while(!m_stringPoolList.empty())
+ {
+ delete[] m_stringPoolList.front();
+ m_stringPoolList.pop_front();
+ }
+ nCount = 0;
+ }
+
+ private:
+ uint32 nCount;
+ uint32 fieldCount;
+ char const* fmt;
+ T** indexTable;
+ T* m_dataTable;
+ StringPoolList m_stringPoolList;
+};
+#endif
diff --git a/src/shared/Database/DatabaseEnv.h b/src/shared/Database/DatabaseEnv.h
index 9366d1e0070..c915538276c 100644
--- a/src/shared/Database/DatabaseEnv.h
+++ b/src/shared/Database/DatabaseEnv.h
@@ -25,7 +25,6 @@
#include "Log.h"
#include "Errors.h"
-#include "Database/DBCStores.h"
#include "Database/Field.h"
#include "Database/QueryResult.h"
diff --git a/src/shared/Database/Makefile.am b/src/shared/Database/Makefile.am
index b030fca9b7e..6092bdc0e8e 100644
--- a/src/shared/Database/Makefile.am
+++ b/src/shared/Database/Makefile.am
@@ -29,10 +29,9 @@ AM_CPPFLAGS = $(TRINI_INCLUDES) -I$(top_builddir)/src/shared -I$(srcdir) -I$(src
noinst_LIBRARIES = libmangosdatabase.a
libmangosdatabase_a_SOURCES = \
- DBCStores.cpp \
- DBCStores.h \
- DBCStructure.h \
- DBCfmt.cpp \
+ DBCFileLoader.cpp \
+ DBCFileLoader.h \
+ DBCStore.h \
Database.cpp \
Database.h \
DatabaseEnv.h \
@@ -61,6 +60,4 @@ libmangosdatabase_a_SOURCES = \
SqlDelayThread.cpp \
SqlDelayThread.h \
SqlOperations.cpp \
- SqlOperations.h \
- dbcfile.cpp \
- dbcfile.h
+ SqlOperations.h
diff --git a/src/shared/Database/SQLStorageImpl.h b/src/shared/Database/SQLStorageImpl.h
index b7927851fef..b511bdad68c 100644
--- a/src/shared/Database/SQLStorageImpl.h
+++ b/src/shared/Database/SQLStorageImpl.h
@@ -18,7 +18,7 @@
#include "ProgressBar.h"
#include "Log.h"
-#include "dbcfile.h"
+#include "DBCFileLoader.h"
template<class T>
template<class S, class D>
diff --git a/src/shared/Database/dbcfile.cpp b/src/shared/Database/dbcfile.cpp
deleted file mode 100644
index 1de121bb17d..00000000000
--- a/src/shared/Database/dbcfile.cpp
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "dbcfile.h"
-
-DBCFile::DBCFile()
-{
- data = NULL;
- fieldsOffset = NULL;
-}
-
-bool DBCFile::Load(const char *filename, const char *fmt)
-{
-
- uint32 header;
- if(data)
- {
- delete [] data;
- data=NULL;
- }
-
- FILE * f=fopen(filename,"rb");
- if(!f)return false;
-
- if(fread(&header,4,1,f)!=1) // Number of records
- return false;
-
- EndianConvert(header);
- if(header!=0x43424457)
- return false; //'WDBC'
-
- if(fread(&recordCount,4,1,f)!=1) // Number of records
- return false;
-
- EndianConvert(recordCount);
-
- if(fread(&fieldCount,4,1,f)!=1) // Number of fields
- return false;
-
- EndianConvert(fieldCount);
-
- if(fread(&recordSize,4,1,f)!=1) // Size of a record
- return false;
-
- EndianConvert(recordSize);
-
- if(fread(&stringSize,4,1,f)!=1) // String size
- return false;
-
- EndianConvert(stringSize);
-
- fieldsOffset = new uint32[fieldCount];
- fieldsOffset[0] = 0;
- for(uint32 i = 1; i < fieldCount; i++)
- {
- fieldsOffset[i] = fieldsOffset[i - 1];
- if (fmt[i - 1] == 'b' || fmt[i - 1] == 'X') // byte fields
- fieldsOffset[i] += 1;
- else // 4 byte fields (int32/float/strings)
- fieldsOffset[i] += 4;
- }
-
- data = new unsigned char[recordSize*recordCount+stringSize];
- stringTable = data + recordSize*recordCount;
-
- if(fread(data,recordSize*recordCount+stringSize,1,f)!=1)
- return false;
-
- fclose(f);
- return true;
-}
-
-DBCFile::~DBCFile()
-{
- if(data)
- delete [] data;
- if(fieldsOffset)
- delete [] fieldsOffset;
-}
-
-DBCFile::Record DBCFile::getRecord(size_t id)
-{
- assert(data);
- return Record(*this, data + id*recordSize);
-}
-
-uint32 DBCFile::GetFormatRecordSize(const char * format,int32* index_pos)
-{
- uint32 recordsize = 0;
- int32 i = -1;
- for(uint32 x=0; format[x];++x)
- switch(format[x])
- {
- case FT_FLOAT:
- case FT_INT:
- recordsize+=4;
- break;
- case FT_STRING:
- recordsize+=sizeof(char*);
- break;
- case FT_SORT:
- i=x;
- break;
- case FT_IND:
- i=x;
- recordsize+=4;
- break;
- case FT_BYTE:
- recordsize += 1;
- break;
- }
-
- if(index_pos)
- *index_pos = i;
-
- return recordsize;
-}
-
-char* DBCFile::AutoProduceData(const char* format, uint32& records, char**& indexTable)
-{
- /*
- format STRING, NA, FLOAT,NA,INT <=>
- struct{
- char* field0,
- float field1,
- int field2
- }entry;
-
- this func will generate entry[rows] data;
- */
-
- typedef char * ptr;
- if(strlen(format)!=fieldCount)
- return NULL;
-
- //get struct size and index pos
- int32 i;
- uint32 recordsize=GetFormatRecordSize(format,&i);
-
- if(i>=0)
- {
- uint32 maxi=0;
- //find max index
- for(uint32 y=0;y<recordCount;y++)
- {
- uint32 ind=getRecord(y).getUInt (i);
- if(ind>maxi)maxi=ind;
- }
-
- ++maxi;
- records=maxi;
- indexTable=new ptr[maxi];
- memset(indexTable,0,maxi*sizeof(ptr));
- }
- else
- {
- records = recordCount;
- indexTable = new ptr[recordCount];
- }
-
- char* dataTable= new char[recordCount*recordsize];
-
- uint32 offset=0;
-
- for(uint32 y =0;y<recordCount;y++)
- {
- if(i>=0)
- {
- indexTable[getRecord(y).getUInt(i)]=&dataTable[offset];
- }
- else
- indexTable[y]=&dataTable[offset];
-
- for(uint32 x=0;x<fieldCount;x++)
- {
- switch(format[x])
- {
- case FT_FLOAT:
- *((float*)(&dataTable[offset]))=getRecord(y).getFloat(x);
- offset+=4;
- break;
- case FT_IND:
- case FT_INT:
- *((uint32*)(&dataTable[offset]))=getRecord(y).getUInt(x);
- offset+=4;
- break;
- case FT_BYTE:
- *((uint8*)(&dataTable[offset]))=getRecord(y).getUInt8(x);
- offset+=1;
- break;
- case FT_STRING:
- *((char**)(&dataTable[offset]))=NULL; // will be replaces non-empty or "" strings in AutoProduceStrings
- offset+=sizeof(char*);
- break;
- }
- }
- }
-
- return dataTable;
-}
-
-char* DBCFile::AutoProduceStrings(const char* format, char* dataTable)
-{
- if(strlen(format)!=fieldCount)
- return NULL;
-
- char* stringPool= new char[stringSize];
- memcpy(stringPool,stringTable,stringSize);
-
- uint32 offset=0;
-
- for(uint32 y =0;y<recordCount;y++)
- {
- for(uint32 x=0;x<fieldCount;x++)
- switch(format[x])
- {
- case FT_FLOAT:
- case FT_IND:
- case FT_INT:
- offset+=4;
- break;
- case FT_BYTE:
- offset+=1;
- break;
- case FT_STRING:
- // fill only not filled entries
- char** slot = (char**)(&dataTable[offset]);
- if(!*slot || !**slot)
- {
- const char * st = getRecord(y).getString(x);
- *slot=stringPool+(st-(const char*)stringTable);
- }
- offset+=sizeof(char*);
- break;
- }
- }
-
- return stringPool;
-}
-