#include "Identifier.h" namespace orxonox { // ############################### // ### Identifier ### // ############################### int Identifier::hierarchyCreatingCounter_s = 0; Identifier::Identifier() { this->bCreatedOneObject_ = false; this->directChildren_ = new IdentifierList; this->allChildren_ = new IdentifierList; this->directParents_ = new IdentifierList; this->allParents_ = new IdentifierList; } Identifier::~Identifier() { delete &this->name_; delete this->directChildren_; delete this->allChildren_; delete this->directParents_; delete this->allParents_; } void Identifier::initialize(const IdentifierList* parents) { #if HIERARCHY_VERBOSE std::cout << "*** Initialize " << this->name_ << "-Singleton.\n"; #endif if (parents) { this->bCreatedOneObject_ = true; IdentifierListElement* temp1; IdentifierListElement* temp2; IdentifierListElement* temp3; temp1 = parents->first_; while (temp1) { temp2 = temp1->identifier_->directParents_->first_; while (temp2) { temp3 = parents->first_; while(temp3) { if (temp3->identifier_ == temp2->identifier_) temp3->bDirect_ = false; temp3 = temp3->next_; } temp2 = temp2->next_; } temp1 = temp1->next_; } temp1 = parents->first_; while (temp1) { if (temp1->bDirect_) { this->directParents_->add(temp1->identifier_); temp1->identifier_->directChildren_->add(this); } this->allParents_->add(temp1->identifier_); temp1->identifier_->allChildren_->add(this); temp1 = temp1->next_; } } } bool Identifier::isA(const Identifier* identifier) const { return (identifier == this || this->allParents_->isInList(identifier)); } bool Identifier::isDirectlyA(const Identifier* identifier) const { return (identifier == this); } bool Identifier::isChildOf(const Identifier* identifier) const { return this->allParents_->isInList(identifier); } bool Identifier::isDirectChildOf(const Identifier* identifier) const { return this->directParents_->isInList(identifier); } bool Identifier::isParentOf(const Identifier* identifier) const { return this->allChildren_->isInList(identifier); } bool Identifier::isDirectParentOf(const Identifier* identifier) const { return this->directChildren_->isInList(identifier); } }