[7304] Move inner template class from parent class definition for better compatibility with some GCC versions.

This commit is contained in:
VladimirMangos 2009-02-19 15:41:40 +03:00
parent a5f51f70d0
commit b419c0ed03
3 changed files with 56 additions and 62 deletions

View file

@ -31,14 +31,14 @@ INSTANTIATE_SINGLETON_1(PoolHandler);
// Methods of template class PoolGroup // Methods of template class PoolGroup
template <class T> template <class T>
PoolHandler::PoolGroup<T>::PoolGroup() PoolGroup<T>::PoolGroup()
{ {
Spawned = 0; Spawned = 0;
} }
// Method to add a gameobject/creature guid to the proper list depending on pool type and chance value // Method to add a gameobject/creature guid to the proper list depending on pool type and chance value
template <class T> template <class T>
void PoolHandler::PoolGroup<T>::AddEntry(PoolObject& poolitem, uint32 maxentries) void PoolGroup<T>::AddEntry(PoolObject& poolitem, uint32 maxentries)
{ {
if (poolitem.chance != 0 && maxentries == 1) if (poolitem.chance != 0 && maxentries == 1)
ExplicitlyChanced.push_back(poolitem); ExplicitlyChanced.push_back(poolitem);
@ -48,7 +48,7 @@ void PoolHandler::PoolGroup<T>::AddEntry(PoolObject& poolitem, uint32 maxentries
// Method to check the chances are proper in this object pool // Method to check the chances are proper in this object pool
template <class T> template <class T>
bool PoolHandler::PoolGroup<T>::CheckPool(void) bool PoolGroup<T>::CheckPool(void)
{ {
if (EqualChanced.size() == 0) if (EqualChanced.size() == 0)
{ {
@ -63,7 +63,7 @@ bool PoolHandler::PoolGroup<T>::CheckPool(void)
// Method that tell if the gameobject, creature or pool is spawned currently // Method that tell if the gameobject, creature or pool is spawned currently
template <class T> template <class T>
bool PoolHandler::PoolGroup<T>::IsSpawnedObject(uint32 guid) bool PoolGroup<T>::IsSpawnedObject(uint32 guid)
{ {
for (uint32 i=0; i<ExplicitlyChanced.size(); ++i) for (uint32 i=0; i<ExplicitlyChanced.size(); ++i)
if (ExplicitlyChanced[i].guid == guid) if (ExplicitlyChanced[i].guid == guid)
@ -77,7 +77,7 @@ bool PoolHandler::PoolGroup<T>::IsSpawnedObject(uint32 guid)
// Method that return a guid of a rolled creature or gameobject // Method that return a guid of a rolled creature or gameobject
// Note: Copy from loot system because it's very similar and only few things change // Note: Copy from loot system because it's very similar and only few things change
template <class T> template <class T>
uint32 PoolHandler::PoolGroup<T>::RollOne(void) uint32 PoolGroup<T>::RollOne(void)
{ {
if (!ExplicitlyChanced.empty()) // First explicitly chanced entries are checked if (!ExplicitlyChanced.empty()) // First explicitly chanced entries are checked
{ {
@ -100,7 +100,7 @@ uint32 PoolHandler::PoolGroup<T>::RollOne(void)
// If no guid is passed, the pool is just removed (event end case) // If no guid is passed, the pool is just removed (event end case)
// If guid is filled, cache will be used and no removal will occur, it just fill the cache // If guid is filled, cache will be used and no removal will occur, it just fill the cache
template<class T> template<class T>
void PoolHandler::PoolGroup<T>::DespawnObject(uint32 guid) void PoolGroup<T>::DespawnObject(uint32 guid)
{ {
for (int i=0; i<EqualChanced.size(); ++i) for (int i=0; i<EqualChanced.size(); ++i)
{ {
@ -122,7 +122,7 @@ void PoolHandler::PoolGroup<T>::DespawnObject(uint32 guid)
// Method that is actualy doing the removal job on one creature // Method that is actualy doing the removal job on one creature
template<> template<>
void PoolHandler::PoolGroup<Creature>::Despawn1Object(uint32 guid) void PoolGroup<Creature>::Despawn1Object(uint32 guid)
{ {
if (CreatureData const* data = objmgr.GetCreatureData(guid)) if (CreatureData const* data = objmgr.GetCreatureData(guid))
{ {
@ -138,7 +138,7 @@ void PoolHandler::PoolGroup<Creature>::Despawn1Object(uint32 guid)
// Same on one gameobject // Same on one gameobject
template<> template<>
void PoolHandler::PoolGroup<GameObject>::Despawn1Object(uint32 guid) void PoolGroup<GameObject>::Despawn1Object(uint32 guid)
{ {
if (GameObjectData const* data = objmgr.GetGOData(guid)) if (GameObjectData const* data = objmgr.GetGOData(guid))
{ {
@ -151,14 +151,14 @@ void PoolHandler::PoolGroup<GameObject>::Despawn1Object(uint32 guid)
// Same on one pool // Same on one pool
template<> template<>
void PoolHandler::PoolGroup<PoolHandler::Pool>::Despawn1Object(uint32 child_pool_id) void PoolGroup<Pool>::Despawn1Object(uint32 child_pool_id)
{ {
poolhandler.DespawnPool(child_pool_id); poolhandler.DespawnPool(child_pool_id);
} }
// Method for a pool only to remove any found record causing a circular dependency loop // Method for a pool only to remove any found record causing a circular dependency loop
template<> template<>
void PoolHandler::PoolGroup<PoolHandler::Pool>::RemoveOneRelation(uint16 child_pool_id) void PoolGroup<Pool>::RemoveOneRelation(uint16 child_pool_id)
{ {
for (PoolObjectList::iterator itr = ExplicitlyChanced.begin(); itr != ExplicitlyChanced.end(); ++itr) for (PoolObjectList::iterator itr = ExplicitlyChanced.begin(); itr != ExplicitlyChanced.end(); ++itr)
{ {
@ -182,7 +182,7 @@ void PoolHandler::PoolGroup<PoolHandler::Pool>::RemoveOneRelation(uint16 child_p
// if cache is false (initialization or event start), X creatures are spawned with X <= limit (< if limit higher that the number of creatures in pool) // if cache is false (initialization or event start), X creatures are spawned with X <= limit (< if limit higher that the number of creatures in pool)
// if cache is true, this means only one has to be spawned (or respawned if the rolled one is same as cached one) // if cache is true, this means only one has to be spawned (or respawned if the rolled one is same as cached one)
template <class T> template <class T>
void PoolHandler::PoolGroup<T>::SpawnObject(uint32 limit, bool cache) void PoolGroup<T>::SpawnObject(uint32 limit, bool cache)
{ {
if (limit == 1) // This is the only case where explicit chance is used if (limit == 1) // This is the only case where explicit chance is used
{ {
@ -227,7 +227,7 @@ void PoolHandler::PoolGroup<T>::SpawnObject(uint32 limit, bool cache)
// Method that is actualy doing the spawn job on 1 creature // Method that is actualy doing the spawn job on 1 creature
template <> template <>
bool PoolHandler::PoolGroup<Creature>::Spawn1Object(uint32 guid) bool PoolGroup<Creature>::Spawn1Object(uint32 guid)
{ {
CreatureData const* data = objmgr.GetCreatureData(guid); CreatureData const* data = objmgr.GetCreatureData(guid);
if (data) if (data)
@ -257,7 +257,7 @@ bool PoolHandler::PoolGroup<Creature>::Spawn1Object(uint32 guid)
// Same for 1 gameobject // Same for 1 gameobject
template <> template <>
bool PoolHandler::PoolGroup<GameObject>::Spawn1Object(uint32 guid) bool PoolGroup<GameObject>::Spawn1Object(uint32 guid)
{ {
GameObjectData const* data = objmgr.GetGOData(guid); GameObjectData const* data = objmgr.GetGOData(guid);
if (data) if (data)
@ -288,7 +288,7 @@ bool PoolHandler::PoolGroup<GameObject>::Spawn1Object(uint32 guid)
// Same for 1 pool // Same for 1 pool
template <> template <>
bool PoolHandler::PoolGroup<PoolHandler::Pool>::Spawn1Object(uint32 child_pool_id) bool PoolGroup<Pool>::Spawn1Object(uint32 child_pool_id)
{ {
poolhandler.SpawnPool(child_pool_id); poolhandler.SpawnPool(child_pool_id);
return true; return true;
@ -296,7 +296,7 @@ bool PoolHandler::PoolGroup<PoolHandler::Pool>::Spawn1Object(uint32 child_pool_i
// Method that does the respawn job on the specified creature // Method that does the respawn job on the specified creature
template <> template <>
bool PoolHandler::PoolGroup<Creature>::ReSpawn1Object(uint32 guid) bool PoolGroup<Creature>::ReSpawn1Object(uint32 guid)
{ {
CreatureData const* data = objmgr.GetCreatureData(guid); CreatureData const* data = objmgr.GetCreatureData(guid);
if (data) if (data)
@ -310,7 +310,7 @@ bool PoolHandler::PoolGroup<Creature>::ReSpawn1Object(uint32 guid)
// Same for 1 gameobject // Same for 1 gameobject
template <> template <>
bool PoolHandler::PoolGroup<GameObject>::ReSpawn1Object(uint32 guid) bool PoolGroup<GameObject>::ReSpawn1Object(uint32 guid)
{ {
GameObjectData const* data = objmgr.GetGOData(guid); GameObjectData const* data = objmgr.GetGOData(guid);
if (data) if (data)
@ -324,7 +324,7 @@ bool PoolHandler::PoolGroup<GameObject>::ReSpawn1Object(uint32 guid)
// Nothing to do for a child Pool // Nothing to do for a child Pool
template <> template <>
bool PoolHandler::PoolGroup<PoolHandler::Pool>::ReSpawn1Object(uint32 guid) bool PoolGroup<Pool>::ReSpawn1Object(uint32 guid)
{ {
return true; return true;
} }

View file

@ -36,47 +36,8 @@ struct PoolObject
PoolObject(uint32 _guid, float _chance): guid(_guid), chance(fabs(_chance)), spawned(false) {} PoolObject(uint32 _guid, float _chance): guid(_guid), chance(fabs(_chance)), spawned(false) {}
}; };
class PoolHandler
{
template <class T> class PoolGroup;
class Pool;
public:
PoolHandler();
~PoolHandler() {};
void LoadFromDB();
uint16 IsPartOfAPool(uint32 guid, uint32 type);
bool IsSpawnedObject(uint16 pool_id, uint32 guid, uint32 type);
bool CheckPool(uint16 pool_id);
void SpawnPool(uint16 pool_id, bool cache=false);
void DespawnPool(uint16 pool_id);
void UpdatePool(uint16 pool_id, uint32 guid, uint32 type);
void Initialize();
private:
protected:
bool isSystemInit;
uint16 max_pool_id;
typedef std::vector<PoolTemplateData> PoolTemplateDataMap;
typedef std::vector<PoolGroup<Creature> > PoolGroupCreatureMap;
typedef std::vector<PoolGroup<GameObject> > PoolGroupGameObjectMap;
typedef std::vector<PoolGroup<Pool> > PoolGroupPoolMap;
typedef std::pair<uint32, uint16> SearchPair;
typedef std::map<uint32, uint16> SearchMap;
PoolTemplateDataMap mPoolTemplate;
PoolGroupCreatureMap mPoolCreatureGroups;
PoolGroupGameObjectMap mPoolGameobjectGroups;
PoolGroupPoolMap mPoolPoolGroups;
SearchMap mCreatureSearchMap;
SearchMap mGameobjectSearchMap;
SearchMap mPoolSearchMap;
};
template <class T> template <class T>
class PoolHandler::PoolGroup class PoolGroup
{ {
public: public:
PoolGroup(); PoolGroup();
@ -98,12 +59,45 @@ class PoolHandler::PoolGroup
PoolObjectList ExplicitlyChanced; PoolObjectList ExplicitlyChanced;
PoolObjectList EqualChanced; PoolObjectList EqualChanced;
uint32 Spawned; // Used to know the number of spawned objects uint32 Spawned; // Used to know the number of spawned objects
}; };
class PoolHandler::Pool class Pool // for Pool of Pool case
{ {
}; };
class PoolHandler
{
public:
PoolHandler();
~PoolHandler() {};
void LoadFromDB();
uint16 IsPartOfAPool(uint32 guid, uint32 type);
bool IsSpawnedObject(uint16 pool_id, uint32 guid, uint32 type);
bool CheckPool(uint16 pool_id);
void SpawnPool(uint16 pool_id, bool cache=false);
void DespawnPool(uint16 pool_id);
void UpdatePool(uint16 pool_id, uint32 guid, uint32 type);
void Initialize();
protected:
bool isSystemInit;
uint16 max_pool_id;
typedef std::vector<PoolTemplateData> PoolTemplateDataMap;
typedef std::vector<PoolGroup<Creature> > PoolGroupCreatureMap;
typedef std::vector<PoolGroup<GameObject> > PoolGroupGameObjectMap;
typedef std::vector<PoolGroup<Pool> > PoolGroupPoolMap;
typedef std::pair<uint32, uint16> SearchPair;
typedef std::map<uint32, uint16> SearchMap;
PoolTemplateDataMap mPoolTemplate;
PoolGroupCreatureMap mPoolCreatureGroups;
PoolGroupGameObjectMap mPoolGameobjectGroups;
PoolGroupPoolMap mPoolPoolGroups;
SearchMap mCreatureSearchMap;
SearchMap mGameobjectSearchMap;
SearchMap mPoolSearchMap;
};
#define poolhandler MaNGOS::Singleton<PoolHandler>::Instance() #define poolhandler MaNGOS::Singleton<PoolHandler>::Instance()
#endif #endif

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "7303" #define REVISION_NR "7304"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__