/* * Copyright (C) 2016+ AzerothCore , released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version. * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS */ #ifndef _GRIDREFERENCE_H #define _GRIDREFERENCE_H #include "LinkedReference/Reference.h" template class GridRefManager; template class GridReference : public Reference, OBJECT> { protected: void targetObjectBuildLink() override { // called from link() this->getTarget()->insertFirst(this); this->getTarget()->incSize(); } void targetObjectDestroyLink() override { // called from unlink() if (this->isValid()) this->getTarget()->decSize(); } void sourceObjectDestroyLink() override { // called from invalidate() this->getTarget()->decSize(); } public: GridReference() : Reference, OBJECT>() {} ~GridReference() override { this->unlink(); } GridReference* next() { return (GridReference*)Reference, OBJECT>::next(); } }; #endif