From ec244dbe366e84a93c8fa1ef294af4a2e4e3b0b1 Mon Sep 17 00:00:00 2001 From: Xanadu Date: Sat, 17 Jul 2010 02:35:14 +0200 Subject: Correctly redo file moves/renames from rev. 8452. --HG-- branch : trunk rename : src/server/game/Grids/Cell.h => src/server/game/Grids/Cells/Cell.h rename : src/server/game/Grids/CellImpl.h => src/server/game/Grids/Cells/CellImpl.h rename : src/server/framework/GameSystem/Grid.h => src/server/game/Grids/Grid.h rename : src/server/framework/GameSystem/GridLoader.h => src/server/game/Grids/GridLoader.h rename : src/server/framework/GameSystem/GridRefManager.h => src/server/game/Grids/GridRefManager.h rename : src/server/framework/GameSystem/GridReference.h => src/server/game/Grids/GridReference.h rename : src/server/framework/GameSystem/NGrid.h => src/server/game/Grids/NGrid.h rename : src/server/game/Grids/GridNotifiers.cpp => src/server/game/Grids/Notifiers/GridNotifiers.cpp rename : src/server/game/Grids/GridNotifiers.h => src/server/game/Grids/Notifiers/GridNotifiers.h rename : src/server/game/Grids/GridNotifiersImpl.h => src/server/game/Grids/Notifiers/GridNotifiersImpl.h rename : src/server/framework/Platform/CompilerDefs.h => src/server/shared/CompilerDefs.h rename : src/server/framework/Platform/Define.h => src/server/shared/Define.h rename : src/server/framework/Utilities/CountedReference/Reference.h => src/server/shared/Dynamic/CountedReference/Reference.h rename : src/server/framework/Utilities/CountedReference/ReferenceHolder.h => src/server/shared/Dynamic/CountedReference/ReferenceHolder.h rename : src/server/framework/Utilities/CountedReference/ReferenceImpl.h => src/server/shared/Dynamic/CountedReference/ReferenceImpl.h rename : src/server/framework/Dynamic/FactoryHolder.h => src/server/shared/Dynamic/FactoryHolder.h rename : src/server/framework/Utilities/LinkedList.h => src/server/shared/Dynamic/LinkedList.h rename : src/server/framework/Utilities/LinkedReference/RefManager.h => src/server/shared/Dynamic/LinkedReference/RefManager.h rename : src/server/framework/Utilities/LinkedReference/Reference.h => src/server/shared/Dynamic/LinkedReference/Reference.h rename : src/server/framework/Dynamic/ObjectRegistry.h => src/server/shared/Dynamic/ObjectRegistry.h rename : src/server/framework/GameSystem/TypeContainer.h => src/server/shared/Dynamic/TypeContainer.h rename : src/server/framework/GameSystem/TypeContainerFunctions.h => src/server/shared/Dynamic/TypeContainerFunctions.h rename : src/server/framework/GameSystem/TypeContainerFunctionsPtr.h => src/server/shared/Dynamic/TypeContainerFunctionsPtr.h rename : src/server/framework/GameSystem/TypeContainerVisitor.h => src/server/shared/Dynamic/TypeContainerVisitor.h rename : src/server/framework/Utilities/TypeList.h => src/server/shared/Dynamic/TypeList.h rename : src/server/framework/Utilities/UnorderedMap.h => src/server/shared/Dynamic/UnorderedMap.h rename : src/server/framework/Policies/CreationPolicy.h => src/server/shared/Policies/CreationPolicy.h rename : src/server/framework/Policies/ObjectLifeTime.cpp => src/server/shared/Policies/ObjectLifeTime.cpp rename : src/server/framework/Policies/ObjectLifeTime.h => src/server/shared/Policies/ObjectLifeTime.h rename : src/server/framework/Policies/Singleton.h => src/server/shared/Policies/Singleton.h rename : src/server/framework/Policies/SingletonImp.h => src/server/shared/Policies/SingletonImp.h rename : src/server/framework/Policies/ThreadingModel.h => src/server/shared/Policies/ThreadingModel.h rename : src/server/framework/Utilities/Callback.h => src/server/shared/Threading/Callback.h rename : src/server/framework/Utilities/ByteConverter.h => src/server/shared/Utilities/ByteConverter.h rename : src/server/framework/Utilities/EventProcessor.cpp => src/server/shared/Utilities/EventProcessor.cpp rename : src/server/framework/Utilities/EventProcessor.h => src/server/shared/Utilities/EventProcessor.h rename : src/server/framework/Network/SocketDefines.h => src/server/worldserver/RemoteAccess/SocketDefines.h --- .../shared/Dynamic/LinkedReference/RefManager.h | 58 +++++++++++++ .../shared/Dynamic/LinkedReference/Reference.h | 94 ++++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 src/server/shared/Dynamic/LinkedReference/RefManager.h create mode 100644 src/server/shared/Dynamic/LinkedReference/Reference.h (limited to 'src/server/shared/Dynamic/LinkedReference') diff --git a/src/server/shared/Dynamic/LinkedReference/RefManager.h b/src/server/shared/Dynamic/LinkedReference/RefManager.h new file mode 100644 index 00000000000..7e294b4f5f0 --- /dev/null +++ b/src/server/shared/Dynamic/LinkedReference/RefManager.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * Copyright (C) 2008-2010 Trinity + * + * 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 _REFMANAGER_H +#define _REFMANAGER_H +//===================================================== + +#include "Utilities/LinkedList.h" +#include "Utilities/LinkedReference/Reference.h" + +template class RefManager : public LinkedListHead +{ + public: + typedef LinkedListHead::Iterator< Reference > iterator; + RefManager() { } + virtual ~RefManager() { clearReferences(); } + + Reference* getFirst() { return ((Reference*) LinkedListHead::getFirst()); } + Reference const* getFirst() const { return ((Reference const*) LinkedListHead::getFirst()); } + Reference* getLast() { return ((Reference*) LinkedListHead::getLast()); } + Reference const* getLast() const { return ((Reference const*) LinkedListHead::getLast()); } + + iterator begin() { return iterator(getFirst()); } + iterator end() { return iterator(NULL); } + iterator rbegin() { return iterator(getLast()); } + iterator rend() { return iterator(NULL); } + + void clearReferences() + { + LinkedListElement* ref; + while((ref = getFirst()) != NULL) + { + ((Reference*) ref)->invalidate(); + ref->delink(); // the delink might be already done by invalidate(), but doing it here again does not hurt and insures an empty list + } + } +}; + +//===================================================== +#endif + diff --git a/src/server/shared/Dynamic/LinkedReference/Reference.h b/src/server/shared/Dynamic/LinkedReference/Reference.h new file mode 100644 index 00000000000..4a1545f8f12 --- /dev/null +++ b/src/server/shared/Dynamic/LinkedReference/Reference.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * Copyright (C) 2008-2010 Trinity + * + * 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 _REFERENCE_H +#define _REFERENCE_H + +#include "Utilities/LinkedList.h" + +//===================================================== + +template class Reference : public LinkedListElement +{ + private: + TO* iRefTo; + FROM* iRefFrom; + protected: + // Tell our refTo (target) object that we have a link + virtual void targetObjectBuildLink() = 0; + + // Tell our refTo (taget) object, that the link is cut + virtual void targetObjectDestroyLink() = 0; + + // Tell our refFrom (source) object, that the link is cut (Target destroyed) + virtual void sourceObjectDestroyLink() = 0; + public: + Reference() { iRefTo = NULL; iRefFrom = NULL; } + virtual ~Reference() {} + + // Create new link + void link(TO* toObj, FROM* fromObj) + { + assert(fromObj); // fromObj MUST not be NULL + if(isValid()) + unlink(); + if(toObj != NULL) + { + iRefTo = toObj; + iRefFrom = fromObj; + targetObjectBuildLink(); + } + } + + // We don't need the reference anymore. Call comes from the refFrom object + // Tell our refTo object, that the link is cut + void unlink() { targetObjectDestroyLink(); delink(); iRefTo = NULL; iRefFrom = NULL; } + + // Link is invalid due to destruction of referenced target object. Call comes from the refTo object + // Tell our refFrom object, that the link is cut + void invalidate() // the iRefFrom MUST remain!! + { + sourceObjectDestroyLink(); delink(); iRefTo = NULL; + } + + bool isValid() const // Only check the iRefTo + { + return iRefTo != NULL; + } + + Reference * next() { return((Reference *) LinkedListElement::next()); } + Reference const * next() const { return((Reference const *) LinkedListElement::next()); } + Reference * prev() { return((Reference *) LinkedListElement::prev()); } + Reference const * prev() const { return((Reference const *) LinkedListElement::prev()); } + + Reference * nocheck_next() { return((Reference *) LinkedListElement::nocheck_next()); } + Reference const * nocheck_next() const { return((Reference const *) LinkedListElement::nocheck_next()); } + Reference * nocheck_prev() { return((Reference *) LinkedListElement::nocheck_prev()); } + Reference const * nocheck_prev() const { return((Reference const *) LinkedListElement::nocheck_prev()); } + + TO* operator ->() const { return iRefTo; } + TO* getTarget() const { return iRefTo; } + + FROM* getSource() const { return iRefFrom; } +}; + +//===================================================== +#endif + -- cgit v1.2.3