mirror of
https://github.com/mangosfour/server.git
synced 2025-12-28 04:37:04 +00:00
Various Cleanups (framework/)
This commit is contained in:
parent
8951eed780
commit
9753625fd1
23 changed files with 239 additions and 224 deletions
|
|
@ -41,13 +41,13 @@ template<class A, class T, class O> class GridLoader;
|
|||
template
|
||||
<
|
||||
class ACTIVE_OBJECT,
|
||||
class WORLD_OBJECT_TYPES,
|
||||
class GRID_OBJECT_TYPES
|
||||
>
|
||||
class WORLD_OBJECT_TYPES,
|
||||
class GRID_OBJECT_TYPES
|
||||
>
|
||||
class MANGOS_DLL_DECL Grid
|
||||
{
|
||||
// allows the GridLoader to access its internals
|
||||
template<class A, class T, class O> friend class GridLoader;
|
||||
// allows the GridLoader to access its internals
|
||||
template<class A, class T, class O> friend class GridLoader;
|
||||
|
||||
public:
|
||||
|
||||
|
|
@ -59,7 +59,7 @@ class MANGOS_DLL_DECL Grid
|
|||
/** an object of interested enters the grid
|
||||
*/
|
||||
template<class SPECIFIC_OBJECT>
|
||||
bool AddWorldObject(SPECIFIC_OBJECT *obj)
|
||||
bool AddWorldObject(SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
return i_objects.template insert<SPECIFIC_OBJECT>(obj);
|
||||
}
|
||||
|
|
@ -67,7 +67,7 @@ class MANGOS_DLL_DECL Grid
|
|||
/** an object of interested exits the grid
|
||||
*/
|
||||
template<class SPECIFIC_OBJECT>
|
||||
bool RemoveWorldObject(SPECIFIC_OBJECT *obj)
|
||||
bool RemoveWorldObject(SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
return i_objects.template remove<SPECIFIC_OBJECT>(obj);
|
||||
}
|
||||
|
|
@ -75,7 +75,7 @@ class MANGOS_DLL_DECL Grid
|
|||
/** Grid visitor for grid objects
|
||||
*/
|
||||
template<class T>
|
||||
void Visit(TypeContainerVisitor<T, TypeMapContainer<GRID_OBJECT_TYPES> > &visitor)
|
||||
void Visit(TypeContainerVisitor<T, TypeMapContainer<GRID_OBJECT_TYPES> >& visitor)
|
||||
{
|
||||
visitor.Visit(i_container);
|
||||
}
|
||||
|
|
@ -83,7 +83,7 @@ class MANGOS_DLL_DECL Grid
|
|||
/** Grid visitor for world objects
|
||||
*/
|
||||
template<class T>
|
||||
void Visit(TypeContainerVisitor<T, TypeMapContainer<WORLD_OBJECT_TYPES> > &visitor)
|
||||
void Visit(TypeContainerVisitor<T, TypeMapContainer<WORLD_OBJECT_TYPES> >& visitor)
|
||||
{
|
||||
visitor.Visit(i_objects);
|
||||
}
|
||||
|
|
@ -98,7 +98,7 @@ class MANGOS_DLL_DECL Grid
|
|||
/** Inserts a container type object into the grid.
|
||||
*/
|
||||
template<class SPECIFIC_OBJECT>
|
||||
bool AddGridObject(SPECIFIC_OBJECT *obj)
|
||||
bool AddGridObject(SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
if (obj->isActiveObject())
|
||||
m_activeGridObjects.insert(obj);
|
||||
|
|
@ -109,7 +109,7 @@ class MANGOS_DLL_DECL Grid
|
|||
/** Removes a containter type object from the grid
|
||||
*/
|
||||
template<class SPECIFIC_OBJECT>
|
||||
bool RemoveGridObject(SPECIFIC_OBJECT *obj)
|
||||
bool RemoveGridObject(SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
if (obj->isActiveObject())
|
||||
m_activeGridObjects.erase(obj);
|
||||
|
|
|
|||
|
|
@ -37,9 +37,9 @@
|
|||
template
|
||||
<
|
||||
class ACTIVE_OBJECT,
|
||||
class WORLD_OBJECT_TYPES,
|
||||
class GRID_OBJECT_TYPES
|
||||
>
|
||||
class WORLD_OBJECT_TYPES,
|
||||
class GRID_OBJECT_TYPES
|
||||
>
|
||||
class MANGOS_DLL_DECL GridLoader
|
||||
{
|
||||
public:
|
||||
|
|
@ -47,7 +47,7 @@ class MANGOS_DLL_DECL GridLoader
|
|||
/** Loads the grid
|
||||
*/
|
||||
template<class LOADER>
|
||||
void Load(Grid<ACTIVE_OBJECT,WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES> &grid, LOADER &loader)
|
||||
void Load(Grid<ACTIVE_OBJECT,WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES>& grid, LOADER& loader)
|
||||
{
|
||||
loader.Load(grid);
|
||||
}
|
||||
|
|
@ -55,7 +55,7 @@ class MANGOS_DLL_DECL GridLoader
|
|||
/** Stop the grid
|
||||
*/
|
||||
template<class STOPER>
|
||||
void Stop(Grid<ACTIVE_OBJECT,WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES> &grid, STOPER &stoper)
|
||||
void Stop(Grid<ACTIVE_OBJECT,WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES>& grid, STOPER& stoper)
|
||||
{
|
||||
stoper.Stop(grid);
|
||||
}
|
||||
|
|
@ -63,7 +63,7 @@ class MANGOS_DLL_DECL GridLoader
|
|||
/** Unloads the grid
|
||||
*/
|
||||
template<class UNLOADER>
|
||||
void Unload(Grid<ACTIVE_OBJECT,WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES> &grid, UNLOADER &unloader)
|
||||
void Unload(Grid<ACTIVE_OBJECT,WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES>& grid, UNLOADER& unloader)
|
||||
{
|
||||
unloader.Unload(grid);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ class MANGOS_DLL_SPEC GridReference : public Reference<GridRefManager<OBJECT>, O
|
|||
this->unlink();
|
||||
}
|
||||
|
||||
GridReference *next()
|
||||
GridReference* next()
|
||||
{
|
||||
return (GridReference*)Reference<GridRefManager<OBJECT>, OBJECT>::next();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class GridInfo
|
|||
{
|
||||
}
|
||||
|
||||
GridInfo(time_t expiry, bool unload = true )
|
||||
GridInfo(time_t expiry, bool unload = true)
|
||||
: i_timer(expiry), i_unloadActiveLockCount(0), i_unloadExplicitLock(!unload)
|
||||
{
|
||||
}
|
||||
|
|
@ -49,7 +49,7 @@ class GridInfo
|
|||
return i_unloadActiveLockCount || i_unloadExplicitLock;
|
||||
}
|
||||
|
||||
void setUnloadExplicitLock( bool on ) { i_unloadExplicitLock = on; }
|
||||
void setUnloadExplicitLock(bool on) { i_unloadExplicitLock = on; }
|
||||
void incUnloadActiveLock() { ++i_unloadActiveLockCount; }
|
||||
void decUnloadActiveLock() { if (i_unloadActiveLockCount) --i_unloadActiveLockCount; }
|
||||
|
||||
|
|
@ -76,10 +76,10 @@ typedef enum
|
|||
template
|
||||
<
|
||||
uint32 N,
|
||||
class ACTIVE_OBJECT,
|
||||
class WORLD_OBJECT_TYPES,
|
||||
class GRID_OBJECT_TYPES
|
||||
>
|
||||
class ACTIVE_OBJECT,
|
||||
class WORLD_OBJECT_TYPES,
|
||||
class GRID_OBJECT_TYPES
|
||||
>
|
||||
class MANGOS_DLL_DECL NGrid
|
||||
{
|
||||
public:
|
||||
|
|
@ -131,19 +131,19 @@ class MANGOS_DLL_DECL NGrid
|
|||
void UpdateTimeTracker(time_t diff) { i_GridInfo.UpdateTimeTracker(diff); }
|
||||
|
||||
template<class SPECIFIC_OBJECT>
|
||||
void AddWorldObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
|
||||
void AddWorldObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
getGridType(x, y).AddWorldObject(obj);
|
||||
}
|
||||
|
||||
template<class SPECIFIC_OBJECT>
|
||||
void RemoveWorldObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
|
||||
void RemoveWorldObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
getGridType(x, y).RemoveWorldObject(obj);
|
||||
}
|
||||
|
||||
template<class T, class TT>
|
||||
void Visit(TypeContainerVisitor<T, TypeMapContainer<TT> > &visitor)
|
||||
void Visit(TypeContainerVisitor<T, TypeMapContainer<TT> >& visitor)
|
||||
{
|
||||
for (uint32 x = 0; x < N; ++x)
|
||||
for (uint32 y = 0; y < N; ++y)
|
||||
|
|
@ -151,7 +151,7 @@ class MANGOS_DLL_DECL NGrid
|
|||
}
|
||||
|
||||
template<class T, class TT>
|
||||
void Visit(const uint32 &x, const uint32 &y, TypeContainerVisitor<T, TypeMapContainer<TT> > &visitor)
|
||||
void Visit(const uint32& x, const uint32& y, TypeContainerVisitor<T, TypeMapContainer<TT> >& visitor)
|
||||
{
|
||||
getGridType(x, y).Visit(visitor);
|
||||
}
|
||||
|
|
@ -167,13 +167,13 @@ class MANGOS_DLL_DECL NGrid
|
|||
}
|
||||
|
||||
template<class SPECIFIC_OBJECT>
|
||||
bool AddGridObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
|
||||
bool AddGridObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
return getGridType(x, y).AddGridObject(obj);
|
||||
}
|
||||
|
||||
template<class SPECIFIC_OBJECT>
|
||||
bool RemoveGridObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
|
||||
bool RemoveGridObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
return getGridType(x, y).RemoveGridObject(obj);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ class MANGOS_DLL_DECL TypeMapContainer
|
|||
|
||||
/// inserts a specific object into the container
|
||||
template<class SPECIFIC_TYPE>
|
||||
bool insert(SPECIFIC_TYPE *obj)
|
||||
bool insert(SPECIFIC_TYPE* obj)
|
||||
{
|
||||
SPECIFIC_TYPE* t = MaNGOS::Insert(i_elements, obj);
|
||||
return (t != NULL);
|
||||
|
|
@ -229,8 +229,8 @@ class MANGOS_DLL_DECL TypeMapContainer
|
|||
return (t != NULL);
|
||||
}
|
||||
|
||||
ContainerMapList<OBJECT_TYPES> & GetElements() { return i_elements; }
|
||||
const ContainerMapList<OBJECT_TYPES> & GetElements() const { return i_elements;}
|
||||
ContainerMapList<OBJECT_TYPES>& GetElements() { return i_elements; }
|
||||
const ContainerMapList<OBJECT_TYPES>& GetElements() const { return i_elements;}
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
|||
|
|
@ -34,38 +34,38 @@ namespace MaNGOS
|
|||
/* ContainerMapList Helpers */
|
||||
// count functions
|
||||
template<class SPECIFIC_TYPE>
|
||||
size_t Count(const ContainerMapList<SPECIFIC_TYPE> &elements, SPECIFIC_TYPE* /*fake*/)
|
||||
size_t Count(const ContainerMapList<SPECIFIC_TYPE>& elements, SPECIFIC_TYPE* /*fake*/)
|
||||
{
|
||||
return elements._element.getSize();
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE>
|
||||
size_t Count(const ContainerMapList<TypeNull> &/*elements*/, SPECIFIC_TYPE* /*fake*/)
|
||||
size_t Count(const ContainerMapList<TypeNull>& /*elements*/, SPECIFIC_TYPE* /*fake*/)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE, class T>
|
||||
size_t Count(const ContainerMapList<T> &/*elements*/, SPECIFIC_TYPE* /*fake*/)
|
||||
size_t Count(const ContainerMapList<T>& /*elements*/, SPECIFIC_TYPE* /*fake*/)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE, class T>
|
||||
size_t Count(const ContainerMapList<TypeList<SPECIFIC_TYPE, T> >&elements, SPECIFIC_TYPE* fake)
|
||||
size_t Count(const ContainerMapList<TypeList<SPECIFIC_TYPE, T> >& elements, SPECIFIC_TYPE* fake)
|
||||
{
|
||||
return Count(elements._elements,fake);
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE, class H, class T>
|
||||
size_t Count(const ContainerMapList<TypeList<H, T> >&elements, SPECIFIC_TYPE* fake)
|
||||
size_t Count(const ContainerMapList<TypeList<H, T> >& elements, SPECIFIC_TYPE* fake)
|
||||
{
|
||||
return Count(elements._TailElements, fake);
|
||||
}
|
||||
|
||||
// non-const insert functions
|
||||
template<class SPECIFIC_TYPE>
|
||||
SPECIFIC_TYPE* Insert(ContainerMapList<SPECIFIC_TYPE> &elements, SPECIFIC_TYPE *obj)
|
||||
SPECIFIC_TYPE* Insert(ContainerMapList<SPECIFIC_TYPE>& elements, SPECIFIC_TYPE* obj)
|
||||
{
|
||||
//elements._element[hdl] = obj;
|
||||
obj->GetGridRef().link(&elements._element, obj);
|
||||
|
|
@ -73,21 +73,21 @@ namespace MaNGOS
|
|||
}
|
||||
|
||||
template<class SPECIFIC_TYPE>
|
||||
SPECIFIC_TYPE* Insert(ContainerMapList<TypeNull> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
|
||||
SPECIFIC_TYPE* Insert(ContainerMapList<TypeNull>& /*elements*/, SPECIFIC_TYPE* /*obj*/)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// this is a missed
|
||||
template<class SPECIFIC_TYPE, class T>
|
||||
SPECIFIC_TYPE* Insert(ContainerMapList<T> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
|
||||
SPECIFIC_TYPE* Insert(ContainerMapList<T>& /*elements*/, SPECIFIC_TYPE* /*obj*/)
|
||||
{
|
||||
return NULL; // a missed
|
||||
}
|
||||
|
||||
// Recursion
|
||||
template<class SPECIFIC_TYPE, class H, class T>
|
||||
SPECIFIC_TYPE* Insert(ContainerMapList<TypeList<H, T> >&elements, SPECIFIC_TYPE *obj)
|
||||
SPECIFIC_TYPE* Insert(ContainerMapList<TypeList<H, T> >& elements, SPECIFIC_TYPE* obj)
|
||||
{
|
||||
SPECIFIC_TYPE* t= Insert(elements._elements, obj);
|
||||
return (t != NULL ? t : Insert(elements._TailElements, obj));
|
||||
|
|
@ -95,31 +95,31 @@ namespace MaNGOS
|
|||
|
||||
// non-const remove method
|
||||
template<class SPECIFIC_TYPE>
|
||||
SPECIFIC_TYPE* Remove(ContainerMapList<SPECIFIC_TYPE> & /*elements*/, SPECIFIC_TYPE *obj)
|
||||
SPECIFIC_TYPE* Remove(ContainerMapList<SPECIFIC_TYPE>& /*elements*/, SPECIFIC_TYPE* obj)
|
||||
{
|
||||
obj->GetGridRef().unlink();
|
||||
return obj;
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE>
|
||||
SPECIFIC_TYPE* Remove(ContainerMapList<TypeNull> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
|
||||
SPECIFIC_TYPE* Remove(ContainerMapList<TypeNull>& /*elements*/, SPECIFIC_TYPE* /*obj*/)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// this is a missed
|
||||
template<class SPECIFIC_TYPE, class T>
|
||||
SPECIFIC_TYPE* Remove(ContainerMapList<T> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
|
||||
SPECIFIC_TYPE* Remove(ContainerMapList<T>& /*elements*/, SPECIFIC_TYPE* /*obj*/)
|
||||
{
|
||||
return NULL; // a missed
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE, class T, class H>
|
||||
SPECIFIC_TYPE* Remove(ContainerMapList<TypeList<H, T> > &elements, SPECIFIC_TYPE *obj)
|
||||
SPECIFIC_TYPE* Remove(ContainerMapList<TypeList<H, T> >& elements, SPECIFIC_TYPE* obj)
|
||||
{
|
||||
// The head element is bad
|
||||
SPECIFIC_TYPE* t = Remove(elements._elements, obj);
|
||||
return ( t != NULL ? t : Remove(elements._TailElements, obj) );
|
||||
return (t != NULL ? t : Remove(elements._TailElements, obj));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,84 +59,84 @@ namespace MaNGOS
|
|||
// }
|
||||
|
||||
// non-const find functions
|
||||
template<class SPECIFIC_TYPE> CountedPtr<SPECIFIC_TYPE>& Find(ContainerMapList<SPECIFIC_TYPE> &elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
template<class SPECIFIC_TYPE> CountedPtr<SPECIFIC_TYPE>& Find(ContainerMapList<SPECIFIC_TYPE>& elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
{
|
||||
typename std::map<OBJECT_HANDLE, CountedPtr<SPECIFIC_TYPE> >::iterator iter = elements._element.find(hdl);
|
||||
return (iter == elements._element.end() ? NullPtr<SPECIFIC_TYPE>((SPECIFIC_TYPE*)NULL) : iter->second);
|
||||
};
|
||||
|
||||
template<class SPECIFIC_TYPE> CountedPtr<SPECIFIC_TYPE>& Find(ContainerMapList<TypeNull> &elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
template<class SPECIFIC_TYPE> CountedPtr<SPECIFIC_TYPE>& Find(ContainerMapList<TypeNull>& elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
{
|
||||
return NullPtr<SPECIFIC_TYPE>((SPECIFIC_TYPE*)NULL);// terminate recursion
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE, class T> CountedPtr<SPECIFIC_TYPE>& Find(ContainerMapList<T> &elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
template<class SPECIFIC_TYPE, class T> CountedPtr<SPECIFIC_TYPE>& Find(ContainerMapList<T>& elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
{
|
||||
return NullPtr<SPECIFIC_TYPE>((SPECIFIC_TYPE*)NULL);// this is a missed
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE, class H, class T> CountedPtr<SPECIFIC_TYPE>& Find(ContainerMapList<TypeList<H, T> >&elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* fake)
|
||||
template<class SPECIFIC_TYPE, class H, class T> CountedPtr<SPECIFIC_TYPE>& Find(ContainerMapList<TypeList<H, T> >& elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* fake)
|
||||
{
|
||||
CountedPtr<SPECIFIC_TYPE> &t = Find(elements._elements, hdl,fake);
|
||||
CountedPtr<SPECIFIC_TYPE>& t = Find(elements._elements, hdl,fake);
|
||||
return (!t ? Find(elements._TailElements, hdl,fake) : t);
|
||||
}
|
||||
|
||||
// const find functions
|
||||
template<class SPECIFIC_TYPE> const CountedPtr<SPECIFIC_TYPE>& Find(const ContainerMapList<SPECIFIC_TYPE> &elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
template<class SPECIFIC_TYPE> const CountedPtr<SPECIFIC_TYPE>& Find(const ContainerMapList<SPECIFIC_TYPE>& elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
{
|
||||
typename CountedPtr<SPECIFIC_TYPE>::iterator iter = elements._element.find(hdl);
|
||||
return (iter == elements._element.end() ? NullPtr<SPECIFIC_TYPE>((SPECIFIC_TYPE*)NULL) : iter->second);
|
||||
};
|
||||
|
||||
template<class SPECIFIC_TYPE> const CountedPtr<SPECIFIC_TYPE>& Find(const ContainerMapList<TypeNull> &elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
template<class SPECIFIC_TYPE> const CountedPtr<SPECIFIC_TYPE>& Find(const ContainerMapList<TypeNull>& elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
{
|
||||
return NullPtr<SPECIFIC_TYPE>((SPECIFIC_TYPE*)NULL);
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE, class T> const CountedPtr<SPECIFIC_TYPE>& Find(const ContainerMapList<T> &elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
template<class SPECIFIC_TYPE, class T> const CountedPtr<SPECIFIC_TYPE>& Find(const ContainerMapList<T>& elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* /*fake*/)
|
||||
{
|
||||
return NullPtr<SPECIFIC_TYPE>((SPECIFIC_TYPE*)NULL);
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE, class H, class T> CountedPtr<SPECIFIC_TYPE>& Find(const ContainerMapList<TypeList<H, T> >&elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* fake)
|
||||
template<class SPECIFIC_TYPE, class H, class T> CountedPtr<SPECIFIC_TYPE>& Find(const ContainerMapList<TypeList<H, T> >& elements, OBJECT_HANDLE hdl, CountedPtr<SPECIFIC_TYPE>* fake)
|
||||
{
|
||||
CountedPtr<SPECIFIC_TYPE> &t = Find(elements._elements, hdl,fake);
|
||||
if(!t)
|
||||
CountedPtr<SPECIFIC_TYPE>& t = Find(elements._elements, hdl,fake);
|
||||
if (!t)
|
||||
t = Find(elements._TailElement, hdl,fake);
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
// non-const insert functions
|
||||
template<class SPECIFIC_TYPE> CountedPtr<SPECIFIC_TYPE>& Insert(ContainerMapList<SPECIFIC_TYPE> &elements, CountedPtr<SPECIFIC_TYPE> &obj, OBJECT_HANDLE hdl)
|
||||
template<class SPECIFIC_TYPE> CountedPtr<SPECIFIC_TYPE>& Insert(ContainerMapList<SPECIFIC_TYPE>& elements, CountedPtr<SPECIFIC_TYPE>& obj, OBJECT_HANDLE hdl)
|
||||
{
|
||||
elements._element[hdl] = obj;
|
||||
return obj;
|
||||
};
|
||||
|
||||
template<class SPECIFIC_TYPE> CountedPtr<SPECIFIC_TYPE>& Insert(ContainerMapList<TypeNull> &elements, CountedPtr<SPECIFIC_TYPE> &obj, OBJECT_HANDLE hdl)
|
||||
template<class SPECIFIC_TYPE> CountedPtr<SPECIFIC_TYPE>& Insert(ContainerMapList<TypeNull>& elements, CountedPtr<SPECIFIC_TYPE>& obj, OBJECT_HANDLE hdl)
|
||||
{
|
||||
return NullPtr<SPECIFIC_TYPE>((SPECIFIC_TYPE*)NULL);
|
||||
}
|
||||
|
||||
// this is a missed
|
||||
template<class SPECIFIC_TYPE, class T> CountedPtr<SPECIFIC_TYPE>& Insert(ContainerMapList<T> &elements, CountedPtr<SPECIFIC_TYPE> &obj, OBJECT_HANDLE hdl)
|
||||
template<class SPECIFIC_TYPE, class T> CountedPtr<SPECIFIC_TYPE>& Insert(ContainerMapList<T>& elements, CountedPtr<SPECIFIC_TYPE>& obj, OBJECT_HANDLE hdl)
|
||||
{
|
||||
return NullPtr<SPECIFIC_TYPE>((SPECIFIC_TYPE*)NULL);// a missed
|
||||
}
|
||||
|
||||
// Recursion
|
||||
template<class SPECIFIC_TYPE, class H, class T> CountedPtr<SPECIFIC_TYPE>& Insert(ContainerMapList<TypeList<H, T> >&elements, CountedPtr<SPECIFIC_TYPE> &obj, OBJECT_HANDLE hdl)
|
||||
template<class SPECIFIC_TYPE, class H, class T> CountedPtr<SPECIFIC_TYPE>& Insert(ContainerMapList<TypeList<H, T> >& elements, CountedPtr<SPECIFIC_TYPE>& obj, OBJECT_HANDLE hdl)
|
||||
{
|
||||
CountedPtr<SPECIFIC_TYPE> &t= Insert(elements._elements, obj, hdl);
|
||||
CountedPtr<SPECIFIC_TYPE>& t= Insert(elements._elements, obj, hdl);
|
||||
return (!t ? Insert(elements._TailElements, obj, hdl) : t);
|
||||
}
|
||||
|
||||
// non-const remove method
|
||||
template<class SPECIFIC_TYPE> bool Remove(ContainerMapList<SPECIFIC_TYPE> &elements, CountedPtr<SPECIFIC_TYPE> &obj, OBJECT_HANDLE hdl)
|
||||
template<class SPECIFIC_TYPE> bool Remove(ContainerMapList<SPECIFIC_TYPE>& elements, CountedPtr<SPECIFIC_TYPE>& obj, OBJECT_HANDLE hdl)
|
||||
{
|
||||
typename std::map<OBJECT_HANDLE, CountedPtr<SPECIFIC_TYPE> >::iterator iter = elements._element.find(hdl);
|
||||
if( iter != elements._element.end() )
|
||||
if (iter != elements._element.end())
|
||||
{
|
||||
elements._element.erase(iter);
|
||||
return true;
|
||||
|
|
@ -145,22 +145,22 @@ namespace MaNGOS
|
|||
return false; // found... terminate the search
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE> bool Remove(ContainerMapList<TypeNull> &elements, CountedPtr<SPECIFIC_TYPE> &obj, OBJECT_HANDLE hdl)
|
||||
template<class SPECIFIC_TYPE> bool Remove(ContainerMapList<TypeNull>& elements, CountedPtr<SPECIFIC_TYPE>& obj, OBJECT_HANDLE hdl)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// this is a missed
|
||||
template<class SPECIFIC_TYPE, class T> bool Remove(ContainerMapList<T> &elements, CountedPtr<SPECIFIC_TYPE> &obj, OBJECT_HANDLE hdl)
|
||||
template<class SPECIFIC_TYPE, class T> bool Remove(ContainerMapList<T>& elements, CountedPtr<SPECIFIC_TYPE>& obj, OBJECT_HANDLE hdl)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
template<class SPECIFIC_TYPE, class T, class H> bool Remove(ContainerMapList<TypeList<H, T> > &elements, CountedPtr<SPECIFIC_TYPE> &obj, OBJECT_HANDLE hdl)
|
||||
template<class SPECIFIC_TYPE, class T, class H> bool Remove(ContainerMapList<TypeList<H, T> >& elements, CountedPtr<SPECIFIC_TYPE>& obj, OBJECT_HANDLE hdl)
|
||||
{
|
||||
// The head element is bad
|
||||
bool t = Remove(elements._elements, obj, hdl);
|
||||
return ( !t ? Remove(elements._TailElements, obj, hdl) : t );
|
||||
return (!t ? Remove(elements._TailElements, obj, hdl) : t);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,26 +33,26 @@ template<class T, class Y> class TypeContainerVisitor;
|
|||
|
||||
// visitor helper
|
||||
template<class VISITOR, class TYPE_CONTAINER>
|
||||
void VisitorHelper(VISITOR &v, TYPE_CONTAINER &c)
|
||||
void VisitorHelper(VISITOR& v, TYPE_CONTAINER& c)
|
||||
{
|
||||
v.Visit(c);
|
||||
}
|
||||
|
||||
// terminate condition container map list
|
||||
template<class VISITOR>
|
||||
void VisitorHelper(VISITOR &/*v*/, ContainerMapList<TypeNull> &/*c*/)
|
||||
void VisitorHelper(VISITOR& /*v*/, ContainerMapList<TypeNull>& /*c*/)
|
||||
{
|
||||
}
|
||||
|
||||
template<class VISITOR, class T>
|
||||
void VisitorHelper(VISITOR &v, ContainerMapList<T> &c)
|
||||
void VisitorHelper(VISITOR& v, ContainerMapList<T>& c)
|
||||
{
|
||||
v.Visit(c._element);
|
||||
}
|
||||
|
||||
// recursion container map list
|
||||
template<class VISITOR, class H, class T>
|
||||
void VisitorHelper(VISITOR &v, ContainerMapList<TypeList<H, T> > &c)
|
||||
void VisitorHelper(VISITOR& v, ContainerMapList<TypeList<H, T> >& c)
|
||||
{
|
||||
VisitorHelper(v, c._elements);
|
||||
VisitorHelper(v, c._TailElements);
|
||||
|
|
@ -60,7 +60,7 @@ void VisitorHelper(VISITOR &v, ContainerMapList<TypeList<H, T> > &c)
|
|||
|
||||
// for TypeMapContainer
|
||||
template<class VISITOR, class OBJECT_TYPES>
|
||||
void VisitorHelper(VISITOR &v, TypeMapContainer<OBJECT_TYPES> &c)
|
||||
void VisitorHelper(VISITOR& v, TypeMapContainer<OBJECT_TYPES>& c)
|
||||
{
|
||||
VisitorHelper(v, c.GetElements());
|
||||
}
|
||||
|
|
@ -70,24 +70,24 @@ class MANGOS_DLL_DECL TypeContainerVisitor
|
|||
{
|
||||
public:
|
||||
|
||||
TypeContainerVisitor(VISITOR &v)
|
||||
TypeContainerVisitor(VISITOR& v)
|
||||
: i_visitor(v)
|
||||
{
|
||||
}
|
||||
|
||||
void Visit(TYPE_CONTAINER &c)
|
||||
void Visit(TYPE_CONTAINER& c)
|
||||
{
|
||||
VisitorHelper(i_visitor, c);
|
||||
}
|
||||
|
||||
void Visit(const TYPE_CONTAINER &c) const
|
||||
void Visit(const TYPE_CONTAINER& c) const
|
||||
{
|
||||
VisitorHelper(i_visitor, c);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
VISITOR &i_visitor;
|
||||
VISITOR& i_visitor;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue