Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 9869 in orxonox.OLD for trunk/src/lib/lang/base_object.cc


Ignore:
Timestamp:
Oct 3, 2006, 12:19:30 AM (18 years ago)
Author:
bensch
Message:

orxonox/trunk: merged the new_class_id branche back to the trunk.
merged with command:
svn merge https://svn.orxonox.net/orxonox/branches/new_class_id trunk -r9683:HEAD
no conflicts… puh..

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/lang/base_object.cc

    r9406 r9869  
    1 
    2 
    31/*
    42   orxonox - the future of 3D-vertical-scrollers
     
    1917#include "base_object.h"
    2018
     19#include "util/debug.h"
    2120#include "util/loading/load_param.h"
    22 #include "class_list.h"
     21
     22ObjectListDefinition(BaseObject);
    2323
    2424/**
    2525 * @brief sets the name from a LoadXML-Element
    26  * @param root the element to load from
     26 * @param objectName: The name of the Object.
    2727 */
    2828BaseObject::BaseObject(const std::string& objectName)
    2929{
    30   this->classID = CL_BASE_OBJECT;
    3130  this->className = "BaseObject";
    3231
    3332  this->objectName = objectName;
    34   this->classList = NULL;
    3533  this->xmlElem = NULL;
    36 
    37   //ClassList::addToClassList(this, this->classID, "BaseObject");
     34  this->registerObject(this, BaseObject::_objectList);
    3835}
    3936
     
    4340BaseObject::~BaseObject ()
    4441{
    45   ClassList::removeFromClassList(this);
     42  /// Remove from the ObjectLists
     43  ClassEntries::iterator it;
     44  PRINTF(5)("Deleting Object of type %s::%s\n", this->getClassCName(), getCName());
     45  for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     46  {
     47    if (ORX_DEBUG >= 5)
     48      assert((*it)._objectList->checkIteratorInList((*it)._iterator) || (*it)._objectList->checkObjectInList(this));
     49    (*it)._objectList->unregisterObject((*it)._iterator);
     50    delete (*it)._iterator;
     51  }
    4652
    4753  if (this->xmlElem != NULL)
     
    6975
    7076/**
    71  * @brief sets the class identifiers
    72  * @param id a number for the class from class_id.h enumeration
    73  * @param className the class name
    74 */
    75 void BaseObject::setClassID(ClassID classID, const std::string& className)
    76 {
    77   //printf("%s(0x%.8X)->%s(0x%.8X)\n", this->className, this->classID, className, classID);
    78   assert (!(this->classID & classID & !CL_MASK_SUBSUPER_CLASS_IDA ));
    79 
    80   this->leafClassID = classID;
    81   this->classID |= (long)classID;
    82   this->className = className;
    83 
    84   this->classList = ClassList::addToClassList(this, classID, this->classID, className);
    85 }
    86 
    87 
    88 /**
    8977 * @brief set the name of the Object
    9078 * @param objectName The new name of the Object.
     
    9785
    9886/**
    99  * @brief queries for the ClassID of the Leaf Class (the last made class of this type
    100  * @returns the ClassID of the Leaf Class (e.g. the ID of the Class)
    101  *
    102  * the returned ID can be used to generate new Objects of the same type through
    103  * Factory::fabricate(Object->getLeafClassID());
     87 * @brief Seeks in the Inheritance if it matches objectList.
     88 * @param objectList The ObjectList this should be a member of (by Pointer-comparison).
     89 * @return True if found, false if not.
    10490 */
    105 const ClassID& BaseObject::getLeafClassID() const
     91bool BaseObject::isA(const ObjectListBase& objectList) const
    10692{
    107   return this->leafClassID;
    108 }
    109 
    110 
    111 
    112 /**
    113  * @brief checks if the class is a classID
    114  * @param classID the Identifier to check for
    115  * @returns true if it is, false otherwise
    116 */
    117 bool BaseObject::isA (ClassID classID) const
    118 {
    119   // if classID is a derivable object from a SUPERCLASS
    120   if (classID & CL_MASK_SUPER_CLASS)
    121   {
    122     if( likely(this->classID & classID))
     93  ClassEntries::const_iterator it;
     94  for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     95    if ((*it)._objectList == &objectList)
    12396      return true;
    124   }
    125   // if classID is a SubSuperClass, and
    126   else if (classID & CL_MASK_SUBSUPER_CLASS)
    127   {
    128     if (likely(((this->classID & CL_MASK_SUBSUPER_CLASS_IDA) == (classID & CL_MASK_SUBSUPER_CLASS_IDA)) &&
    129         this->classID & classID & CL_MASK_SUBSUPER_CLASS_IDB))
    130       return true;
    131   }
    132   // if classID is a LOWLEVEL-class
    133   else
    134   {
    135     if( likely((this->classID & CL_MASK_LOWLEVEL_CLASS) == classID))
    136       return true;
    137   }
    13897  return false;
    13998}
    14099
    141100
     101/**
     102 * @brief Seeks in the Inheritance if it matches objectList.
     103 * @param classID The ClassID this should be a member of (by Pointer-comparison).
     104 * @return True if found, false if not.
     105 */
     106bool BaseObject::isA(const ClassID& classID) const
     107{
     108  ClassEntries::const_iterator it;
     109  for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     110    if (*(*it)._objectList == classID)
     111      return true;
     112  return false;
     113}
    142114
    143115/**
    144  * @brief checks if the class is a classID
    145  * @param classID the Identifier to check for
    146  * @returns true if it is, false otherwise
     116 * @brief Seeks in the Inheritance if it matches objectList.
     117 * @param classID The ClassID of the class this should be a member of.
     118 * @return True if found, false if not.
    147119 */
    148 bool BaseObject::isA (const std::string& className) const
     120bool BaseObject::isA(int classID) const
    149121{
    150   ClassID classID = ClassList::StringToID(className);
    151   if (classID != CL_NULL)
    152     return this->isA(classID);
    153   else
    154     return false;
     122  ClassEntries::const_iterator it;
     123  for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     124    if (*(*it)._objectList == classID)
     125
     126      return true;
     127  return false;
     128}
     129
     130/**
     131 * @brief Seeks in the Inheritance if it matches objectList.
     132 * @param className The ClassName of the class this should be a member of.
     133 * @return True if found, false if not.
     134 */
     135bool BaseObject::isA(const std::string& className) const
     136{
     137  ClassEntries::const_iterator it;
     138  for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     139    if (*(*it)._objectList == className)
     140      return true;
     141  return false;
    155142}
    156143
    157144
    158145/**
    159  * @brief compares the ObjectName with an external name
    160  * @param objectName: the name to check.
    161  * @returns true on match, false otherwise.
     146 * @brief This is for debug purposes, to see the Inheritances of this Object and its classes.
     147 *
     148 * The Inheritance will be listed in a Linear fashion, diamand structures are resolved in a linear dependency.
    162149 */
    163 bool BaseObject::operator==(const std::string& objectName) const
     150void BaseObject::listInheritance() const
    164151{
    165   return (this->objectName == objectName);
     152  PRINT(0)("Listing inheritance diagram for %s::%s: ", getClassCName(), getCName());
     153  ClassEntries::const_iterator it;
     154  for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
     155    PRINT(0)(" -> %s(id:%d)", (*it)._objectList->name().c_str(), (*it)._objectList->id());
     156  PRINT(0)("\n");
     157
    166158}
    167 
Note: See TracChangeset for help on using the changeset viewer.