Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/lang/base_object.cc @ 6318

Last change on this file since 6318 was 6282, checked in by bensch, 19 years ago

orxonox/trunk: merged the PowerUps back here

File size: 4.1 KB
RevLine 
[3302]1
2
[4591]3/*
[3302]4   orxonox - the future of 3D-vertical-scrollers
5
6   Copyright (C) 2004 orx
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   ### File Specific:
14   main-programmer: Patrick Boenzli
15   co-programmer: ...
16*/
[5439]17#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_BASE
[3302]18
19#include "base_object.h"
[4747]20
[4436]21#include "load_param.h"
[4595]22#include "compiler.h"
[4747]23#include "class_list.h"
[3302]24
25using namespace std;
26
27
28/**
[6280]29 * @brief sets the name from a LoadXML-Element
[4836]30 * @param root the element to load from
[5439]31 */
[4436]32BaseObject::BaseObject(const TiXmlElement* root)
[3531]33{
[6276]34  this->className = "BaseObject";
[4591]35  this->classID = CL_BASE_OBJECT;
[4435]36
37  this->objectName = NULL;
[6280]38  this->classList = NULL;
[4436]39
40  if (root)
41    this->loadParams(root);
[4747]42
[4778]43//  ClassList::addToClassList(this, this->classID, "BaseObject");
[3531]44}
[3302]45
46/**
[6280]47 * @brief standard deconstructor
[3302]48*/
[4591]49BaseObject::~BaseObject ()
[3531]50{
[4747]51  ClassList::removeFromClassList(this);
52
[4261]53  //  delete []this->className;
[4435]54  if (this->objectName)
[5447]55    delete[] this->objectName;
56}
[3302]57
[4436]58/**
[6280]59 * @brief loads parameters
[4836]60 * @param root the element to load from
[5439]61 */
[4436]62void BaseObject::loadParams(const TiXmlElement* root)
63{
64  // name setup
[5671]65  LoadParam(root, "name", this, BaseObject, setName)
[5645]66      .describe("the Name of the Object.");
[4436]67}
[4321]68
69/**
[6280]70 * @brief sets the class identifiers
[4836]71 * @param id a number for the class from class_id.h enumeration
72 * @param className the class name
[4321]73*/
[5791]74void BaseObject::setClassID(ClassID classID, const char* className)
[4320]75{
[6282]76  //printf("%s(0x%.8X)->%s(0x%.8X)\n", this->className, this->classID, className, classID);
77  assert (!(this->classID & classID & !CL_MASK_SUBSUPER_CLASS_IDA ));
[6276]78
[5791]79  this->classID |= (long)classID;
[4320]80  this->className = className;
[4747]81
[6280]82  this->classList = ClassList::addToClassList(this, classID, this->classID, className);
[4320]83}
[4318]84
[6280]85
[4435]86/**
[6280]87 * @brief set the name of the Object
[4591]88 */
[4742]89void BaseObject::setName (const char* objectName)
[4435]90{
91  if (this->objectName)
[5113]92    delete[] this->objectName;
[5645]93  if (objectName != NULL)
[4592]94  {
95    this->objectName = new char[strlen(objectName)+1];
96    strcpy(this->objectName, objectName);
97  }
[4591]98  else
[4435]99    this->objectName = NULL;
100}
[4592]101
[6281]102
[6280]103/**
104 * @brief queries for the ClassID of the Leaf Class (the last made class of this type
105 * @returns the ClassID of the Leaf Class (e.g. the ID of the Class)
106 *
107 * the returned ID can be used to generate new Objects of the same type through
108 * Factory::fabricate(Object->getLeafClassID());
109 */
110ClassID BaseObject::getLeafClassID() const
111{
112  assert (this->classList != NULL);
113  return this->classList->getLeafClassID();
114}
[4592]115
[6280]116
117
[4592]118/**
[6280]119 * @brief checks if the class is a classID
[4836]120 * @param classID the Identifier to check for
121 * @returns true if it is, false otherwise
[4592]122*/
[6077]123bool BaseObject::isA (ClassID classID) const
[4592]124{
[4837]125  // if classID is a derivable object from a SUPERCLASS
126  if (classID & CL_MASK_SUPER_CLASS)
[4594]127  {
[4837]128    if( likely(this->classID & classID))
[4594]129      return true;
[4837]130  }
131  // if classID is a SubSuperClass, and
132  else if (classID & CL_MASK_SUBSUPER_CLASS)
133  {
[5915]134    if (likely(((this->classID & CL_MASK_SUBSUPER_CLASS_IDA) == (this->classID & CL_MASK_SUBSUPER_CLASS_IDA)) &&
135        this->classID & classID & CL_MASK_SUBSUPER_CLASS_IDB))
[4837]136      return true;
137  }
138  // if classID is a LOWLEVEL-class
[4594]139  else
140  {
[4837]141    if( likely((this->classID & CL_MASK_LOWLEVEL_CLASS) == classID))
[4594]142      return true;
143  }
[4592]144  return false;
145}
146
[6280]147
148
[4592]149/**
[6280]150 * @brief checks if the class is a classID
[5513]151 * @param classID the Identifier to check for
152 * @returns true if it is, false otherwise
153 */
154bool BaseObject::isA (const char* className) const
155{
[6077]156  ClassID classID = ClassList::StringToID(className);
[5513]157  if (classID != CL_NULL)
158    return this->isA(classID);
159}
160
[6280]161
[5626]162/**
[6280]163 * @brief compares the ObjectName with an external name
[5626]164 * @param objectName: the name to check.
165 * @returns true on match, false otherwise.
166 */
[5791]167bool BaseObject::operator==(const char* objectName)
[5626]168{
169  if (likely(this->objectName != NULL && objectName != NULL))
170    return (strcmp(this->objectName, objectName)) ? false : true;
171}
[5513]172
[5626]173
[5513]174/**
[6280]175 * @brief displays everything this class is
[5642]176 * @TODO REIMPLEMENT WITH SENSE.
[4592]177 */
[4746]178void BaseObject::whatIs() const
[4592]179{
[6280]180
[4592]181}
Note: See TracBrowser for help on using the repository browser.