Orxonox  0.0.5 Codename: Arcturus
XMLPort.h
Go to the documentation of this file.
1 /*
2  * ORXONOX - the hottest 3D action shooter ever to exist
3  * > www.orxonox.net <
4  *
5  *
6  * License notice:
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * Author:
23  * Fabian 'x3n' Landau
24  * Co-authors:
25  * ...
26  *
27  */
28 
46 #ifndef _XMLPort_H__
47 #define _XMLPort_H__
48 
49 #include "CorePrereqs.h"
50 
51 #include <cassert>
52 #include <string>
53 #include <tinyxml/ticpp.h>
54 
55 #include "util/Output.h"
56 #include "util/Exception.h"
57 #include "util/MultiType.h"
58 #include "util/OrxAssert.h"
59 #include "util/StringUtils.h"
60 #include "class/Identifier.h"
61 #include "BaseObject.h"
62 #include "command/Executor.h"
63 
64 // ------------
65 // XMLPortParam
66 
84 #define XMLPortParam(classname, paramname, loadfunction, savefunction, xmlelement, mode) \
85  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
86  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
87  XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, classname, this, paramname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode)
88 
104 #define XMLPortParamVariable(classname, paramname, variable, xmlelement, mode) \
105  XMLPortVariableHelperClass xmlcontainer##variable##dummy(static_cast<void*>(&variable)); \
106  static ExecutorMemberPtr<orxonox::XMLPortVariableHelperClass> xmlcontainer##variable##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(orxonox::XMLPortVariableHelperClass::getLoader(variable)), std::string( #classname ) + "::" + #variable + "loader"); \
107  static ExecutorMemberPtr<orxonox::XMLPortVariableHelperClass> xmlcontainer##variable##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(orxonox::XMLPortVariableHelperClass::getSaver (variable)), std::string( #classname ) + "::" + #variable + "saver" ); \
108  XMLPortParamGeneric(xmlcontainer##variable, classname, orxonox::XMLPortVariableHelperClass, &xmlcontainer##variable##dummy, paramname, xmlcontainer##variable##loadexecutor, xmlcontainer##variable##saveexecutor, xmlelement, mode)
109 
121 #define XMLPortParamTemplate(classname, paramname, loadfunction, savefunction, xmlelement, mode, ...) \
122  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<void, classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
123  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
124  XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, classname, this, paramname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode)
125 
126 // --------------------
127 // XMLPortParamLoadOnly
128 
140 #define XMLPortParamLoadOnly(classname, paramname, loadfunction, xmlelement, mode) \
141  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##0##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
142  XMLPortParamGeneric(xmlcontainer##loadfunction##0, classname, classname, this, paramname, xmlcontainer##loadfunction##0##loadexecutor, 0, xmlelement, mode)
143 
146 #define XMLPortParamLoadOnlyTemplate(classname, paramname, loadfunction, xmlelement, mode, ...) \
147  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##0##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<void, classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
148  XMLPortParamGeneric(xmlcontainer##loadfunction##0, classname, classname, this, paramname, xmlcontainer##loadfunction##0##loadexecutor, 0, xmlelement, mode)
149 
150 // ------------------
151 // XMLPortParamExtern
152 
174 #define XMLPortParamExtern(classname, externclass, object, paramname, loadfunction, savefunction, xmlelement, mode) \
175  static ExecutorMemberPtr<externclass> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&externclass::loadfunction), std::string( #externclass ) + "::" + #loadfunction); \
176  static ExecutorMemberPtr<externclass> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&externclass::savefunction), std::string( #externclass ) + "::" + #savefunction); \
177  XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, externclass, object, paramname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode);
178 
181 #define XMLPortParamExternTemplate(classname, externclass, object, paramname, loadfunction, savefunction, xmlelement, mode, ...) \
182  static ExecutorMemberPtr<externclass> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<void, externclass, __VA_ARGS__ >(&externclass::loadfunction), std::string( #externclass ) + "::" + #loadfunction); \
183  static ExecutorMemberPtr<externclass> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&externclass::savefunction), std::string( #externclass ) + "::" + #savefunction); \
184  XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, externclass, object, paramname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode);
185 
186 // -------------------
187 // XMLPortParamGeneric
188 
192 #define XMLPortParamGeneric(containername, classname, objectclass, object, paramname, loadexecutor, saveexecutor, xmlelement, mode) \
193  orxonox::XMLPortClassParamContainer<objectclass>* containername = static_cast<orxonox::XMLPortClassParamContainer<objectclass>*>(ClassIdentifier<classname>::getIdentifier()->getXMLPortParamContainer(paramname)); \
194  if (!containername) \
195  { \
196  containername = new orxonox::XMLPortClassParamContainer<objectclass>(std::string(paramname), ClassIdentifier<classname>::getIdentifier(), loadexecutor, saveexecutor); \
197  ClassIdentifier<classname>::getIdentifier()->addXMLPortParamContainer(paramname, containername); \
198  } \
199  containername->port(orxonox_cast<BaseObject*>(this), object, xmlelement, mode)
200 
201 // --------------------
202 // XMLPortObjectExtended
203 
272 #define XMLPortObjectExtended(classname, objectclass, sectionname, loadfunction, savefunction, xmlelement, mode, bApplyLoaderMask, bLoadBefore) \
273  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
274  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
275  XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode, bApplyLoaderMask, bLoadBefore)
276 
279 #define XMLPortObjectExtendedTemplate(classname, objectclass, sectionname, loadfunction, savefunction, xmlelement, mode, bApplyLoaderMask, bLoadBefore, ...) \
280  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<void, classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
281  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
282  XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode, bApplyLoaderMask, bLoadBefore)
283 
284 // -------------
285 // XMLPortObject
286 
290 #define XMLPortObject(classname, objectclass, sectionname, loadfunction, savefunction, xmlelement, mode) \
291  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
292  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
293  XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode, false, true)
294 
297 #define XMLPortObjectTemplate(classname, objectclass, sectionname, loadfunction, savefunction, xmlelement, mode, ...) \
298  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<void, classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
299  static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
300  XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode, false, true)
301 
302 // --------------------
303 // XMLPortObjectGeneric
304 
308 #define XMLPortObjectGeneric(containername, classname, objectclass, sectionname, loadexecutor, saveexecutor, xmlelement, mode, bApplyLoaderMask, bLoadBefore) \
309  orxonox::XMLPortClassObjectContainer<classname, objectclass>* containername = (orxonox::XMLPortClassObjectContainer<classname, objectclass>*)(ClassIdentifier<classname>::getIdentifier()->getXMLPortObjectContainer(sectionname)); \
310  if (!containername) \
311  { \
312  containername = new orxonox::XMLPortClassObjectContainer<classname, objectclass>(std::string(sectionname), ClassIdentifier<classname>::getIdentifier(), loadexecutor, saveexecutor, bApplyLoaderMask, bLoadBefore); \
313  ClassIdentifier<classname>::getIdentifier()->addXMLPortObjectContainer(sectionname, containername); \
314  } \
315  containername->port(this, xmlelement, mode)
316 
317 
318 namespace orxonox
319 {
320  // ###############################
321  // ### XMLPortParamContainer ###
322  // ###############################
324  {
325  public:
326  enum class ParseResult
327  {
328  not_started,
329  finished,
330  waiting_for_default_values
331  };
332 
333  public:
335  { this->parseResult_ = ParseResult::not_started; }
336  virtual ~XMLPortParamContainer() = default;
337 
338  inline const std::string& getName() const
339  { return this->paramname_; }
340 
341  inline XMLPortParamContainer& description(const std::string& description)
342  { this->description_ = description; return *this; }
343  inline const std::string& getDescription() const
344  { return this->description_; }
345 
346  virtual XMLPortParamContainer& defaultValue(unsigned int index, const MultiType& param) = 0;
347  virtual XMLPortParamContainer& defaultValues(const MultiType& param1) = 0;
348  virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2) = 0;
349  virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3) = 0;
350  virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4) = 0;
351  virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) = 0;
352 
353  protected:
359  };
360 
361  template <class T>
363  {
364  struct ParseParams
365  {
367  Element* xmlelement;
369  };
370 
371  public:
372  XMLPortClassParamContainer(const std::string& paramname, Identifier* identifier, const ExecutorMemberPtr<T>& loadexecutor, const ExecutorMemberPtr<T>& saveexecutor)
373  {
374  this->paramname_ = paramname;
375  this->identifier_ = identifier;
376  this->loadexecutor_ = loadexecutor;
377  this->saveexecutor_ = saveexecutor;
378  }
379 
380  XMLPortParamContainer& port(BaseObject* owner, T* object, Element& xmlelement, XMLPort::Mode mode)
381  {
382  OrxAssert(owner, "XMLPortParamContainer must have a BaseObject as owner.");
383  this->owner_ = owner;
384  this->parseParams_.object = object;
385  this->parseParams_.xmlelement = &xmlelement;
386  this->parseParams_.mode = mode;
387 
388  if ((mode == XMLPort::LoadObject) || (mode == XMLPort::ExpandObject))
389  {
390  try
391  {
392  if (this->owner_->lastLoadedXMLElement_ != &xmlelement)
393  {
394  this->owner_->xmlAttributes_.clear();
395  // Iterate through the attributes manually in order to make them case insensitive
396  ticpp::Attribute* attribute = xmlelement.FirstAttribute(false);
397  while (attribute != nullptr)
398  {
399  this->owner_->xmlAttributes_[getLowercase(attribute->Name())] = attribute->Value();
400  attribute = attribute->Next(false);
401  }
402  this->owner_->lastLoadedXMLElement_ = &xmlelement;
403  }
404  std::map<std::string, std::string>::const_iterator it = this->owner_->xmlAttributes_.find(getLowercase(this->paramname_));
405  std::string attributeValue;
406  if (it != this->owner_->xmlAttributes_.end())
407  attributeValue = it->second;
408 
409  // TODO: Checking the iterator would be better since then we can have strings with value "" as well.
410  // Unfortunately this does not seem to work with the Executor parser yet.
411  if ((!attributeValue.empty()) || ((mode != XMLPort::ExpandObject) && this->loadexecutor_->allDefaultValuesSet()))
412  {
413  orxout(verbose_more, context::xml) << this->owner_->getLoaderIndentation() << "Loading parameter " << this->paramname_ << " in " << this->identifier_->getName() << " (objectname " << this->owner_->getName() << ")." << endl;
414  int error;
415  this->loadexecutor_->parse(object, attributeValue, &error, ",");
416  if (!error || (mode == XMLPort::ExpandObject))
417  this->parseResult_ = ParseResult::finished;
418  else
419  this->parseResult_ = ParseResult::waiting_for_default_values;
420  }
421  else if (mode == XMLPort::ExpandObject)
422  this->parseResult_ = ParseResult::finished;
423  else
424  this->parseResult_ = ParseResult::waiting_for_default_values;
425  }
426  catch (ticpp::Exception& ex)
427  {
428  orxout(internal_error, context::xml) << endl;
429  orxout(internal_error, context::xml) << "An error occurred in XMLPort.h while loading attribute '" << this->paramname_ << "' of '" << this->identifier_->getName() << "' (objectname: " << this->owner_->getName() << ") in " << this->owner_->getFilename() << ':' << endl;
430  orxout(internal_error, context::xml) << ex.what() << endl;
431  }
432  }
433  else if (mode == XMLPort::SaveObject)
434  {
435  if (this->saveexecutor_)
436  {
437 // xmlelement.SetAttribute(this->paramname_, "...");
438  }
439  }
440 
441  return (*this);
442  }
443 
444  XMLPortParamContainer& port(BaseObject* owner, const ParseParams& parseParams)
445  {
446  return this->port(owner, parseParams.object, *parseParams.xmlelement, parseParams.mode);
447  }
448 
450  {
451  if (result == ParseResult::waiting_for_default_values)
452  return this->port(this->owner_, params);
453  else
454  return (*this);
455  }
456 
457  virtual XMLPortParamContainer& defaultValue(unsigned int index, const MultiType& param) override
458  {
459  if (!this->loadexecutor_->defaultValueSet(index))
460  this->loadexecutor_->setDefaultValue(index, param);
461  return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
462  }
463  virtual XMLPortParamContainer& defaultValues(const MultiType& param1) override
464  {
465  if (!this->loadexecutor_->defaultValueSet(0))
466  this->loadexecutor_->setDefaultValues(param1);
467  return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
468  }
469  virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2) override
470  {
471  if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)))
472  this->loadexecutor_->setDefaultValues(param1, param2);
473  return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
474  }
475  virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3) override
476  {
477  if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)) || (!this->loadexecutor_->defaultValueSet(2)))
478  this->loadexecutor_->setDefaultValues(param1, param2, param3);
479  return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
480  }
481  virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4) override
482  {
483  if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)) || (!this->loadexecutor_->defaultValueSet(2)) || (!this->loadexecutor_->defaultValueSet(3)))
484  this->loadexecutor_->setDefaultValues(param1, param2, param3, param4);
485  return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
486  }
487  virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) override
488  {
489  if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)) || (!this->loadexecutor_->defaultValueSet(2)) || (!this->loadexecutor_->defaultValueSet(3)) || (!this->loadexecutor_->defaultValueSet(4)))
490  this->loadexecutor_->setDefaultValues(param1, param2, param3, param4, param5);
491  return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
492  }
493 
494  private:
498  };
499 
500 
501  // ################################
502  // ### XMLPortObjectContainer ###
503  // ################################
505  {
506  public:
508  { this->bApplyLoaderMask_ = false; }
509  virtual ~XMLPortObjectContainer() = default;
510 
511  XMLPortObjectContainer& port(BaseObject* object, Element& xmlelement, XMLPort::Mode mode);
512 
513  virtual void callLoadExecutor(BaseObject* object, BaseObject* newObject) = 0;
514 
515  inline const std::string& getName() const
516  { return this->sectionname_; }
517 
518  inline XMLPortObjectContainer& description(const std::string& description)
519  { this->description_ = description; return *this; }
521  { return this->description_; }
522 
523  bool identifierIsIncludedInLoaderMask(const Identifier* identifier);
524 
525  protected:
532  };
533 
534  template <class T, class O>
536  {
537  public:
538  XMLPortClassObjectContainer(const std::string& sectionname, Identifier* identifier, const ExecutorMemberPtr<T>& loadexecutor, const ExecutorMemberPtr<T>& saveexecutor, bool bApplyLoaderMask, bool bLoadBefore)
539  {
540  this->sectionname_ = sectionname;
541  this->identifier_ = identifier;
542  assert(identifier->isA(ClassIdentifier<T>::getIdentifier()));
543  this->objectIdentifier_ = ClassIdentifier<O>::getIdentifier();
544  this->loadexecutor_ = loadexecutor;
545  this->saveexecutor_ = saveexecutor;
546  this->bApplyLoaderMask_ = bApplyLoaderMask;
547  this->bLoadBefore_ = bLoadBefore;
548  }
549 
550  virtual void callLoadExecutor(BaseObject* object, BaseObject* newObject) override
551  {
552  T* castObject = orxonox_cast<T*>(object);
553  assert(castObject);
554  O* castNewObject = orxonox_cast<O*>(newObject);
555  assert(castNewObject);
556 
557  (*this->loadexecutor_)(castObject, castNewObject);
558  }
559 
560  private:
563  };
564 
565 
566  // ####################################
567  // ### XMLPortVariableHelperClass ###
568  // ####################################
578  {
579  public:
581  : variable_(var)
582  { }
584 
585  template <class T>
586  void load(const T& value)
587  { *static_cast<T*>(this->variable_) = value; }
588 
589  template <class T>
590  const T& save()
591  { return *static_cast<T*>(this->variable_); }
592 
593  template <class T>
594  static void (XMLPortVariableHelperClass::*getLoader(const T& var))(const T& value)
595  { return &XMLPortVariableHelperClass::load<T>; }
596 
597  template <class T>
598  static const T& (XMLPortVariableHelperClass::*getSaver(const T& var))()
599  { return &XMLPortVariableHelperClass::save<T>; }
600 
601  private:
602  void* variable_;
603  };
604 }
605 
606 #endif /* _XMLPort_H__ */
The BaseObject is the parent of all classes representing an instance in the game. ...
Definition: BaseObject.h:63
Definition: CorePrereqs.h:105
The ClassIdentifier is derived from Identifier and holds all class-specific functions and variables t...
Definition: Identifier.h:262
Definition: InputPrereqs.h:82
Definition: XMLPort.h:323
XMLPortVariableHelperClass(void *var)
Definition: XMLPort.h:580
Definition: CorePrereqs.h:241
ExecutorMemberPtr< T > saveexecutor_
Definition: XMLPort.h:496
XMLPortObjectContainer & description(const std::string &description)
Definition: XMLPort.h:518
void error(const std::string &text)
Prints output with error level.
Definition: ConsoleCommandCompilation.cc:145
XMLPortParamContainer & description(const std::string &description)
Definition: XMLPort.h:341
const T & save()
Definition: XMLPort.h:590
Identifier * objectIdentifier_
Definition: XMLPort.h:530
virtual XMLPortParamContainer & defaultValues(const MultiType &param1, const MultiType &param2, const MultiType &param3, const MultiType &param4, const MultiType &param5) override
Definition: XMLPort.h:487
const std::string & getName() const
Definition: XMLPort.h:338
bool bLoadBefore_
Definition: XMLPort.h:528
std::string description_
Definition: XMLPort.h:358
Shared library macros, enums, constants and forward declarations for the core library ...
::std::string string
Definition: gtest-port.h:756
Element * xmlelement
Definition: XMLPort.h:367
XMLPortClassParamContainer(const std::string &paramname, Identifier *identifier, const ExecutorMemberPtr< T > &loadexecutor, const ExecutorMemberPtr< T > &saveexecutor)
Definition: XMLPort.h:372
XMLPortParamContainer & portIfWaitingForDefaultValues(const ParseResult &result, const ParseParams &params)
Definition: XMLPort.h:449
bool bApplyLoaderMask_
Definition: XMLPort.h:527
Definition: CorePrereqs.h:107
XMLPort::Mode mode
Definition: XMLPort.h:368
ExecutorMemberPtr< T > saveexecutor_
Definition: XMLPort.h:562
Output level, used for error messages which are important for developers.
Definition: OutputDefinitions.h:95
Declaration of Identifier, definition of ClassIdentifier<T>; used to identify the class of an object...
Helper class to load and save simple variables with XMLPort.
Definition: XMLPort.h:577
typedef void(ENET_CALLBACK *ENetPacketFreeCallback)(struct _ENetPacket *)
Identifier * identifier_
Definition: XMLPort.h:529
std::string getLowercase(const std::string &str)
Returns a copy of the given string where all chars are converted to lowercase.
Definition: StringUtils.cc:342
XMLPortParamContainer & port(BaseObject *owner, T *object, Element &xmlelement, XMLPort::Mode mode)
Definition: XMLPort.h:380
static ClassIdentifier< T > * getIdentifier()
Returns the only instance of this class.
Definition: Identifier.h:329
BaseObject * owner_
Definition: XMLPort.h:357
#define OrxAssert(condition, errorMessage)
Run time assertion like assert(), but with an embedded message.
Definition: OrxAssert.h:54
Declaration of facilities to handle exceptions.
const std::string & getName() const
Definition: XMLPort.h:515
Definition: XMLPort.h:504
xmlelement
Definition: Super.h:519
const std::string & getDescription() const
Definition: XMLPort.h:520
void load(const T &value)
Definition: XMLPort.h:586
ExecutorMemberPtr< T > loadexecutor_
Definition: XMLPort.h:561
false defaultValue(2, false).argumentCompleter(0
void * variable_
Definition: XMLPort.h:602
std::string paramname_
Definition: XMLPort.h:354
ParseParams parseParams_
Definition: XMLPort.h:497
static const T &(XMLPortVariableHelperClass::*)() getSaver(const T &var)
Definition: XMLPort.h:598
Declaration of the orxonox::Executor class and the createExecutor() functions.
virtual XMLPortParamContainer & defaultValues(const MultiType &param1, const MultiType &param2, const MultiType &param3) override
Definition: XMLPort.h:475
Definition: CorePrereqs.h:106
std::string sectionname_
Definition: XMLPort.h:526
OutputStream & orxout(OutputLevel level=level::debug_output, const OutputContextContainer &context=context::undefined())
This helper function returns a reference to a commonly used instance of OutputStream.
Definition: Output.h:81
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
bool isA(const Identifier *identifier) const
Returns true, if the Identifier is at least of the given type.
Definition: Identifier.cc:316
Declaration of the MultiType and some helper constructs.
#define _CoreExport
Definition: CorePrereqs.h:61
Mode
Definition: CorePrereqs.h:102
The MultiType can hold a value of many possible types and convert them to other types.
Definition: MultiType.h:130
The Identifier is used to identify the class of an object and to store information about the class...
Definition: Identifier.h:109
Defines the helper function orxout() and includes all necessary headers to use the output system...
ORX_FORCEINLINE T orxonox_cast(U *source)
Casts on object of type Identifiable to any derived type that is registered in the class hierarchy...
Definition: Identifier.h:485
XMLPortObjectContainer()
Definition: XMLPort.h:507
virtual XMLPortParamContainer & defaultValues(const MultiType &param1, const MultiType &param2) override
Definition: XMLPort.h:469
ExecutorMemberPtr< T > loadexecutor_
Definition: XMLPort.h:495
std::string description_
Definition: XMLPort.h:531
Definition: InputPrereqs.h:78
Declaration of BaseObject, the base class of all objects in Orxonox.
virtual XMLPortParamContainer & defaultValue(unsigned int index, const MultiType &param) override
Definition: XMLPort.h:457
Output level, usually not visible, used for unimportant debug information (less important than verbos...
Definition: OutputDefinitions.h:100
virtual void callLoadExecutor(BaseObject *object, BaseObject *newObject) override
Definition: XMLPort.h:550
Declaration of several string manipulation functions, used in many parts of the game.
virtual ~XMLPortVariableHelperClass()
Definition: XMLPort.h:583
std::shared_ptr< ExecutorMember< T >> ExecutorMemberPtr
Definition: ExecutorPtr.h:58
XMLPortClassObjectContainer(const std::string &sectionname, Identifier *identifier, const ExecutorMemberPtr< T > &loadexecutor, const ExecutorMemberPtr< T > &saveexecutor, bool bApplyLoaderMask, bool bLoadBefore)
Definition: XMLPort.h:538
ParseResult
Definition: XMLPort.h:326
const std::string & getDescription() const
Definition: XMLPort.h:343
virtual XMLPortParamContainer & defaultValues(const MultiType &param1) override
Definition: XMLPort.h:463
static void(XMLPortVariableHelperClass::*)(const T &value) getLoader(const T &var)
Definition: XMLPort.h:594
Definition: CorePrereqs.h:243
virtual XMLPortParamContainer & defaultValues(const MultiType &param1, const MultiType &param2, const MultiType &param3, const MultiType &param4) override
Definition: XMLPort.h:481
Declaration of custom assertion facilities
ParseResult parseResult_
Definition: XMLPort.h:355
Identifier * identifier_
Definition: XMLPort.h:356
XMLPortParamContainer & port(BaseObject *owner, const ParseParams &parseParams)
Definition: XMLPort.h:444
XMLPortParamContainer()
Definition: XMLPort.h:334