Changeset 807 for code/branches/core/src/orxonox/core/ClassTreeMask.cc
- Timestamp:
- Feb 12, 2008, 8:36:19 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core/src/orxonox/core/ClassTreeMask.cc
r806 r807 88 88 ClassTreeMaskIterator::ClassTreeMaskIterator(ClassTreeMaskNode* node) 89 89 { 90 std::list<ClassTreeMaskNode*> templist; 91 std::list<ClassTreeMaskNode*>::iterator tempiterator = templist.insert(templist.end(), node); 92 this->nodes_.push(std::pair<std::list<ClassTreeMaskNode*>::iterator, std::list<ClassTreeMaskNode*>::iterator>(tempiterator, templist.end())); 90 std::list<ClassTreeMaskNode*>::iterator it = this->rootlist_.insert(this->rootlist_.end(), node); 91 this->nodes_.push(std::pair<std::list<ClassTreeMaskNode*>::iterator, std::list<ClassTreeMaskNode*>::iterator>(it, this->rootlist_.end())); 93 92 } 94 93 … … 157 156 { 158 157 this->root_ = new ClassTreeMaskNode(ClassManager<BaseObject>::getIdentifier("BaseObject"), true); 158 } 159 160 ClassTreeMask::ClassTreeMask(const ClassTreeMask& other) 161 { 162 this->root_ = new ClassTreeMaskNode(ClassManager<BaseObject>::getIdentifier("BaseObject"), true); 163 for (ClassTreeMaskIterator it = other.root_; it; ++it) 164 this->add(it->getClass(), it->isIncluded()); 159 165 } 160 166 … … 241 247 if (subclass->isA(node->getClass())) 242 248 { 243 //std::cout << "1_2\n";244 249 // Check for the special case 245 250 if (subclass == node->getClass()) 246 {247 //std::cout << "1_3\n";248 251 return node->isIncluded(); 249 } 250 251 //std::cout << "1_4\n"; 252 252 253 // Go through the list of subnodes and look for a node containing the searched subclass 253 254 for (std::list<ClassTreeMaskNode*>::iterator it = node->subnodes_.begin(); it != node->subnodes_.end(); ++it) … … 255 256 return isIncluded(*it, subclass); 256 257 257 //std::cout << "1_5\n";258 258 // There is no subnode containing our class -> the rule of the current node takes in effect 259 259 return node->isIncluded(); … … 261 261 else 262 262 { 263 //std::cout << "1_6\n";264 263 // The class is not included in the mask: return false 265 264 return false; … … 285 284 node->subnodes_.insert(node->subnodes_.end(), (*it)->subnodes_.begin(), (*it)->subnodes_.end()); 286 285 (*it)->subnodes_.clear(); 287 node->subnodes_.erase(it++); 286 node->subnodes_.erase(it); 287 it = node->subnodes_.begin(); 288 288 } 289 289 else … … 294 294 } 295 295 296 ClassTreeMask& ClassTreeMask::operator=(const ClassTreeMask& other) 297 { 298 ClassTreeMask temp(other); 299 300 this->reset(); 301 302 for (ClassTreeMaskIterator it = temp.root_; it; ++it) 303 this->add(it->getClass(), it->isIncluded()); 304 305 return (*this); 306 } 307 308 ClassTreeMask& ClassTreeMask::operator+() 309 { 310 return (*this); 311 } 312 313 ClassTreeMask ClassTreeMask::operator-() const 314 { 315 return (!(*this)); 316 } 317 296 318 ClassTreeMask ClassTreeMask::operator+(const ClassTreeMask& other) const 297 319 { … … 330 352 } 331 353 354 ClassTreeMask ClassTreeMask::operator-(const ClassTreeMask& other) const 355 { 356 return ((*this) * (!other)); 357 } 358 332 359 ClassTreeMask ClassTreeMask::operator!() const 333 360 { … … 338 365 newmask.add(subclass, !this->isIncluded(subclass)); 339 366 } 340 341 367 return newmask; 342 368 } 343 369 344 ClassTreeMask ClassTreeMask::operator-(const ClassTreeMask& other) const 345 { 346 return ((*this) * (!other)); 370 ClassTreeMask& ClassTreeMask::operator+=(const ClassTreeMask& other) 371 { 372 (*this) = (*this) + other; 373 return (*this); 374 } 375 376 ClassTreeMask& ClassTreeMask::operator*=(const ClassTreeMask& other) 377 { 378 (*this) = (*this) * other; 379 return (*this); 380 } 381 382 ClassTreeMask& ClassTreeMask::operator-=(const ClassTreeMask& other) 383 { 384 (*this) = (*this) - other; 385 return (*this); 347 386 } 348 387 … … 379 418 return (!(*this)); 380 419 } 420 421 ClassTreeMask& ClassTreeMask::operator&=(const ClassTreeMask& other) 422 { 423 (*this) = (*this) & other; 424 return (*this); 425 } 426 427 ClassTreeMask& ClassTreeMask::operator|=(const ClassTreeMask& other) 428 { 429 (*this) = (*this) | other; 430 return (*this); 431 } 432 433 ClassTreeMask& ClassTreeMask::operator^=(const ClassTreeMask& other) 434 { 435 (*this) = (*this) ^ other; 436 return (*this); 437 } 438 439 std::ostream& operator<<(std::ostream& out, const ClassTreeMask& mask) 440 { 441 for (ClassTreeMaskIterator it = mask.root_; it; ++it) 442 { 443 if (it->isIncluded()) 444 out << "+"; 445 else 446 out << "-"; 447 448 out << it->getClass()->getName() << " "; 449 } 450 451 return out; 452 } 381 453 }
Note: See TracChangeset
for help on using the changeset viewer.