aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Dynamic
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/shared/Dynamic')
-rw-r--r--src/server/shared/Dynamic/CountedReference/Reference.h100
-rw-r--r--src/server/shared/Dynamic/CountedReference/ReferenceHolder.h42
-rw-r--r--src/server/shared/Dynamic/CountedReference/ReferenceImpl.h133
-rw-r--r--src/server/shared/Dynamic/FactoryHolder.h12
-rw-r--r--src/server/shared/Dynamic/LinkedReference/RefManager.h4
-rw-r--r--src/server/shared/Dynamic/LinkedReference/Reference.h2
-rw-r--r--src/server/shared/Dynamic/ObjectRegistry.h14
-rw-r--r--src/server/shared/Dynamic/TypeContainer.h6
-rw-r--r--src/server/shared/Dynamic/TypeContainerFunctions.h4
-rw-r--r--src/server/shared/Dynamic/TypeContainerVisitor.h4
-rw-r--r--src/server/shared/Dynamic/UnorderedMap.h12
11 files changed, 31 insertions, 302 deletions
diff --git a/src/server/shared/Dynamic/CountedReference/Reference.h b/src/server/shared/Dynamic/CountedReference/Reference.h
deleted file mode 100644
index d3cfe55ffc0..00000000000
--- a/src/server/shared/Dynamic/CountedReference/Reference.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * Copyright (C) 2008-2010 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
- */
-
-#ifndef TRINITY_REFERENCE_H
-#define TRINITY_REFERENCE_H
-
-/**
- * Referencer<T>
- * Referencer is an object that holds a reference holder that hold a reference
- * counted object. When an object's reference count drop to zero, it removes
- * the object. This is a non intrusive mechanism and any object at any point
- * in time can be referenced. When and object is reference counted, do not
- * pass the object directly to other methods but rather, pass its
- * reference around. Objects can be reference counted in both single threaded
- * model and multi-threaded model
- */
-
-#include <stdexcept>
-#include "Platform/Define.h"
-#include "Policies/ThreadingModel.h"
-#include "ReferenceHolder.h"
-
-template
-<
-typename T,
-class THREADING_MODEL = Trinity::SingleThreaded<T>
->
-class Referencer
-{
- typedef typename THREADING_MODEL::Lock Lock;
- typedef ReferenceHolder<T, THREADING_MODEL> ReferenceeHolder;
- public:
-
- /// Constructs a referencer.
- Referencer(T *ref = NULL);
-
- /// Copy constructor
- Referencer(const Referencer &obj) : i_holder(NULL) { *this = obj; }
-
- /// Destructor
- ~Referencer();
-
- /// Referencee accessor
- T* referencee(void) { return (i_holder == NULL ? NULL : i_holder->i_referencee); }
- const T* referencee(void) const { return (i_holder == NULL ? NULL : i_holder->i_referencee); }
-
- //T& referencee(void){ return _referencee(); }
- //const T& referencee(void) const { return const_cast<Referencer *>(this)->_referencee(); }
- operator T&(void) { return _referencee(); }
- operator const T&(void) const { return *const_cast<Referencer *>(this)->_referencee(); }
-
- /// cast operators
- T* operator*() { return (i_holder == NULL ? NULL : i_holder->i_referencee); }
- T const * operator*() const { return (i_holder == NULL ? NULL : i_holder->i_referencee); }
-
- /// overload operators
- T* operator->() { return (i_holder == NULL ? NULL : i_holder->i_referencee); }
- const T * operator->() const { return (i_holder == NULL ? NULL : i_holder->i_referencee); }
-
- /// operator =
- Referencer& operator=(const Referencer &obj);
- Referencer& operator=(T *);
-
- /// returns true if i_referencee is null
- bool isNull(void) const { return i_holder == NULL; }
-
- private:
-
- T& _referencee(void)
- {
- if( i_holder == NULL )
- throw std::runtime_error("Invalid access to null pointer");
- return *i_holder->i_referencee;
- }
-
- void deReference(ReferenceeHolder *);
- void addReference(ReferenceeHolder *);
-
- // private data
- ReferenceeHolder *i_holder;
-};
-#endif
-
diff --git a/src/server/shared/Dynamic/CountedReference/ReferenceHolder.h b/src/server/shared/Dynamic/CountedReference/ReferenceHolder.h
deleted file mode 100644
index 597e9854be0..00000000000
--- a/src/server/shared/Dynamic/CountedReference/ReferenceHolder.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * Copyright (C) 2008-2010 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
- */
-
-#ifndef TRINITY_REFERENCEHOLDER_H
-#define TRINITY_REFERENCEHOLDER_H
-
-/** ReferenceHolder holds the actualy referenced obejct as well the refence
- count. The ReferenecHolder implements as a policy base object and
- will decided by the Reference class to be consnsitent.
- */
-
-template
-<
-typename T,
-class THREADING_MODEL
->
-struct ReferenceHolder : public THREADING_MODEL
-{
- explicit ReferenceHolder(T *ref) : i_referencee(ref), i_referenceCount(0) {}
- T *i_referencee;
- unsigned int i_referenceCount;
- typedef typename THREADING_MODEL::Lock Lock;
-};
-#endif
-
diff --git a/src/server/shared/Dynamic/CountedReference/ReferenceImpl.h b/src/server/shared/Dynamic/CountedReference/ReferenceImpl.h
deleted file mode 100644
index cde330179e3..00000000000
--- a/src/server/shared/Dynamic/CountedReference/ReferenceImpl.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * Copyright (C) 2008-2010 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
- */
-
-#ifndef TRINITY_REFERENCEIMPL_H
-#define TRINITY_REFERENCEIMPL_H
-
-#include "Reference.h"
-
-template
-<
-typename T,
-class THREADING_MODEL
->
-Referencer<T, THREADING_MODEL>::Referencer(T *ref)
-: i_holder(NULL)
-{
- if( ref != NULL )
- {
- i_holder = new ReferenceeHolder(ref);
- ++i_holder->i_referenceCount;
- }
-}
-
-template
-<
-typename T,
-class THREADING_MODEL
->
-Referencer<T, THREADING_MODEL>::~Referencer()
-{
- if( i_holder != NULL )
- deReference(i_holder);
- i_holder = NULL;
-}
-
-template
-<
-typename T,
-class THREADING_MODEL
->
-Referencer<T, THREADING_MODEL>&
-Referencer<T, THREADING_MODEL>::operator=(const Referencer<T, THREADING_MODEL> &obj)
-{
- if( i_holder != NULL )
- deReference(i_holder);
- if( obj.i_holder != NULL )
- addReference(obj.i_holder);
- i_holder = obj.i_holder;
- return *this;
-}
-
-template
-<
-typename T,
-class THREADING_MODEL
->
-Referencer<T, THREADING_MODEL>&
-Referencer<T, THREADING_MODEL>::operator=(T *ref)
-{
- if( i_holder != NULL )
- deReference(i_holder);
- i_holder = NULL;
- if( ref != NULL )
- {
- i_holder = new ReferenceeHolder(ref);
- ++i_holder->i_referenceCount;
- }
-
- return *this;
-}
-
-template
-<
-typename T,
-class THREADING_MODEL
->
-void
-Referencer<T, THREADING_MODEL>::deReference(ReferenceHolder<T, THREADING_MODEL> *holder)
-{
- assert( holder != NULL && holder->i_referenceCount > 0);
- bool delete_object = false;
-
- {
- // The guard is within the scope due to the guard
- // must release earlier than expected.
- Lock guard(*holder);
- Guard(&guard);
-
- --holder->i_referenceCount;
- if( holder->i_referenceCount == 0 )
- delete_object = true;
- }
-
- if( delete_object )
- {
- delete holder->i_referencee;
- delete holder;
- }
-}
-
-template
-<
-typename T,
-class THREADING_MODEL
->
-void
-Referencer<T, THREADING_MODEL>::addReference(ReferenceHolder<T, THREADING_MODEL> *holder)
-{
- assert( i_holder != NULL );
- Lock guard(*holder);
- Guard(&guard);
-
- ++holder->i_referenceCount;
-}
-#endif
-
diff --git a/src/server/shared/Dynamic/FactoryHolder.h b/src/server/shared/Dynamic/FactoryHolder.h
index 282968d6097..096bdad1783 100644
--- a/src/server/shared/Dynamic/FactoryHolder.h
+++ b/src/server/shared/Dynamic/FactoryHolder.h
@@ -21,10 +21,9 @@
#ifndef TRINITY_FACTORY_HOLDER
#define TRINITY_FACTORY_HOLDER
-#include "Platform/Define.h"
-#include "Utilities/TypeList.h"
+#include "Define.h"
+#include "Dynamic/TypeList.h"
#include "ObjectRegistry.h"
-#include "Policies/SingletonImp.h"
/** FactoryHolder holds a factory object of a specific type
*/
@@ -33,14 +32,15 @@ class FactoryHolder
{
public:
typedef ObjectRegistry<FactoryHolder<T, Key >, Key > FactoryHolderRegistry;
- typedef Trinity::Singleton<FactoryHolderRegistry > FactoryHolderRepository;
+ friend class ACE_Singleton<FactoryHolderRegistry, ACE_Null_Mutex>;
+ typedef ACE_Singleton<FactoryHolderRegistry, ACE_Null_Mutex> FactoryHolderRepository;
FactoryHolder(Key k) : i_key(k) {}
virtual ~FactoryHolder() {}
inline Key key() const { return i_key; }
- void RegisterSelf(void) { FactoryHolderRepository::Instance().InsertItem(this, i_key); }
- void DeregisterSelf(void) { FactoryHolderRepository::Instance().RemoveItem(this, false); }
+ void RegisterSelf(void) { FactoryHolderRepository::instance()->InsertItem(this, i_key); }
+ void DeregisterSelf(void) { FactoryHolderRepository::instance()->RemoveItem(this, false); }
/// Abstract Factory create method
virtual T* Create(void *data = NULL) const = 0;
diff --git a/src/server/shared/Dynamic/LinkedReference/RefManager.h b/src/server/shared/Dynamic/LinkedReference/RefManager.h
index 7e294b4f5f0..ea79d5e1784 100644
--- a/src/server/shared/Dynamic/LinkedReference/RefManager.h
+++ b/src/server/shared/Dynamic/LinkedReference/RefManager.h
@@ -22,8 +22,8 @@
#define _REFMANAGER_H
//=====================================================
-#include "Utilities/LinkedList.h"
-#include "Utilities/LinkedReference/Reference.h"
+#include "Dynamic/LinkedList.h"
+#include "Dynamic/LinkedReference/Reference.h"
template <class TO, class FROM> class RefManager : public LinkedListHead
{
diff --git a/src/server/shared/Dynamic/LinkedReference/Reference.h b/src/server/shared/Dynamic/LinkedReference/Reference.h
index 4a1545f8f12..8891199a5eb 100644
--- a/src/server/shared/Dynamic/LinkedReference/Reference.h
+++ b/src/server/shared/Dynamic/LinkedReference/Reference.h
@@ -21,7 +21,7 @@
#ifndef _REFERENCE_H
#define _REFERENCE_H
-#include "Utilities/LinkedList.h"
+#include "Dynamic/LinkedList.h"
//=====================================================
diff --git a/src/server/shared/Dynamic/ObjectRegistry.h b/src/server/shared/Dynamic/ObjectRegistry.h
index e6619427885..11052a9f0a7 100644
--- a/src/server/shared/Dynamic/ObjectRegistry.h
+++ b/src/server/shared/Dynamic/ObjectRegistry.h
@@ -21,9 +21,9 @@
#ifndef TRINITY_OBJECTREGISTRY_H
#define TRINITY_OBJECTREGISTRY_H
-#include "Platform/Define.h"
-#include "Utilities/UnorderedMap.h"
-#include "Policies/Singleton.h"
+#include "Define.h"
+#include "Dynamic/UnorderedMap.h"
+#include "ace/Singleton.h"
#include <string>
#include <vector>
@@ -94,11 +94,6 @@ class ObjectRegistry
return i_registeredObjects;
}
- private:
- RegistryMapType i_registeredObjects;
- friend class Trinity::OperatorNew<ObjectRegistry<T, Key> >;
-
- // protected for friend use since it should be a singleton
ObjectRegistry() {}
~ObjectRegistry()
{
@@ -106,6 +101,9 @@ class ObjectRegistry
delete iter->second;
i_registeredObjects.clear();
}
+ private:
+ RegistryMapType i_registeredObjects;
+
};
#endif
diff --git a/src/server/shared/Dynamic/TypeContainer.h b/src/server/shared/Dynamic/TypeContainer.h
index c2c9b4fcdea..4ed07431ee3 100644
--- a/src/server/shared/Dynamic/TypeContainer.h
+++ b/src/server/shared/Dynamic/TypeContainer.h
@@ -28,9 +28,9 @@
#include <map>
#include <vector>
-#include "Platform/Define.h"
-#include "Utilities/TypeList.h"
-#include "GameSystem/GridRefManager.h"
+#include "Define.h"
+#include "Dynamic/TypeList.h"
+#include "GridRefManager.h"
/*
* @class ContainerMapList is a mulit-type container for map elements
diff --git a/src/server/shared/Dynamic/TypeContainerFunctions.h b/src/server/shared/Dynamic/TypeContainerFunctions.h
index edfbb40e659..7ab2151461e 100644
--- a/src/server/shared/Dynamic/TypeContainerFunctions.h
+++ b/src/server/shared/Dynamic/TypeContainerFunctions.h
@@ -27,8 +27,8 @@
* to access or mutate the container.
*/
-#include "Platform/Define.h"
-#include "Utilities/TypeList.h"
+#include "Define.h"
+#include "Dynamic/TypeList.h"
#include <map>
namespace Trinity
diff --git a/src/server/shared/Dynamic/TypeContainerVisitor.h b/src/server/shared/Dynamic/TypeContainerVisitor.h
index f15075e5afd..6057eb32fc3 100644
--- a/src/server/shared/Dynamic/TypeContainerVisitor.h
+++ b/src/server/shared/Dynamic/TypeContainerVisitor.h
@@ -27,8 +27,8 @@
* to overload its types as a visit method is called.
*/
-#include "Platform/Define.h"
-#include "TypeContainer.h"
+#include "Define.h"
+#include "Dynamic/TypeContainer.h"
// forward declaration
template<class T, class Y> class TypeContainerVisitor;
diff --git a/src/server/shared/Dynamic/UnorderedMap.h b/src/server/shared/Dynamic/UnorderedMap.h
index fce5ec82bfc..d9f41fe4ab8 100644
--- a/src/server/shared/Dynamic/UnorderedMap.h
+++ b/src/server/shared/Dynamic/UnorderedMap.h
@@ -21,8 +21,8 @@
#ifndef TRINITY_UNORDERED_MAP_H
#define TRINITY_UNORDERED_MAP_H
-#include "Platform/CompilerDefs.h"
-#include "Platform/Define.h"
+#include "CompilerDefs.h"
+#include "Define.h"
#if COMPILER == COMPILER_INTEL
#include <ext/hash_map>
@@ -62,7 +62,13 @@ namespace __gnu_cxx
{
size_t operator()(T * const &__x) const { return (size_t)__x; }
};
-
+ template<> struct hash<std::string>
+ {
+ size_t operator()(const std::string &__x) const
+ {
+ return hash<const char *>()(__x.c_str());
+ }
+ };
};
#else