#ifndef _MetaObjectList_H__ #define _MetaObjectList_H__ #include "ObjectList.h" #include "Identifier.h" namespace orxonox { class BaseMetaObjectListElement { public: virtual ~BaseMetaObjectListElement() {}; BaseMetaObjectListElement* next_; }; // ############################### // ### MetaObjectListElement ### // ############################### template class MetaObjectListElement : public BaseMetaObjectListElement { public: MetaObjectListElement(ObjectList* list, ObjectListElement* element); ~MetaObjectListElement(); ObjectListElement* element_; ObjectList* list_; }; template MetaObjectListElement::MetaObjectListElement(ObjectList* list, ObjectListElement* element) { this->element_ = element; this->list_ = list; this->next_ = 0; } template MetaObjectListElement::~MetaObjectListElement() { if (this->element_->next_) this->element_->next_->prev_ = this->element_->prev_; else this->list_->last_ = this->element_->prev_; if (this->element_->prev_) this->element_->prev_->next_ = this->element_->next_; else this->list_->first_ = this->element_->next_; #if HIERARCHY_VERBOSE std::cout << "*** Removing Object from " << ClassIdentifier::getIdentifier()->getName() << "-list.\n"; #endif delete this->element_; } // ############################### // ### ObjectList ### // ############################### class MetaObjectList { public: MetaObjectList(); ~MetaObjectList(); template void add(ObjectList* list, ObjectListElement* element); BaseMetaObjectListElement* first_; }; template void MetaObjectList::add(ObjectList* list, ObjectListElement* element) { BaseMetaObjectListElement* temp = this->first_; this->first_ = new MetaObjectListElement(list, element); this->first_->next_ = temp; } } #endif