Changeset 1747 for code/trunk/src/core/XMLPort.h
- Timestamp:
- Sep 9, 2008, 4:25:52 AM (16 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
/code/branches/core3 (added) merged: 1573-1574,1583-1586,1591-1594,1596-1597,1603,1606-1607,1610-1611,1655,1658,1676-1679,1681-1685,1687,1716-1723,1725-1729,1736
- Property svn:mergeinfo changed
-
code/trunk/src/core/XMLPort.h
r1628 r1747 32 32 #include "CorePrereqs.h" 33 33 34 #include "util/Debug.h" 34 35 #include "util/XMLIncludes.h" 35 #include "util/MultiType Math.h"36 #include "util/MultiType.h" 36 37 #include "tinyxml/ticpp.h" 37 38 #include "Executor.h" 38 #include "Debug.h"39 39 #include "CoreIncludes.h" 40 40 #include "BaseObject.h" … … 42 42 43 43 #define XMLPortParam(classname, paramname, loadfunction, savefunction, xmlelement, mode) \ 44 XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, paramname, orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), #loadfunction), orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction),#savefunction), xmlelement, mode)45 #define XMLPortParam _Template(classname, paramname, loadtemplate, loadfunction, savetemplate, savefunction, xmlelement, mode) \46 XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, paramname, orxonox::createExecutor(orxonox::createFunctor loadtemplate (&classname::loadfunction), #loadfunction), orxonox::createExecutor(orxonox::createFunctor savetemplate (&classname::savefunction),#savefunction), xmlelement, mode)44 XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, classname, this, paramname, orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction), orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction), xmlelement, mode) 45 #define XMLPortParamTemplate(classname, paramname, loadfunction, savefunction, xmlelement, mode, ...) \ 46 XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, classname, this, paramname, orxonox::createExecutor(orxonox::createFunctor< __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction), orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction), xmlelement, mode) 47 47 48 48 #define XMLPortParamLoadOnly(classname, paramname, loadfunction, xmlelement, mode) \ 49 XMLPortParamGeneric(xmlcontainer##loadfunction##0, classname, paramname, orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), #loadfunction), 0, xmlelement, mode) 50 #define XMLPortParamLoadOnly_Template(classname, paramname, loadtemplate, loadfunction, xmlelement, mode) \ 51 XMLPortParamGeneric(xmlcontainer##loadfunction##0, classname, paramname, orxonox::createExecutor(orxonox::createFunctor loadtemplate (&classname::loadfunction), #loadfunction), 0, xmlelement, mode) 52 53 #define XMLPortParamGeneric(containername, classname, paramname, loadexecutor, saveexecutor, xmlelement, mode) \ 54 orxonox::XMLPortClassParamContainer<classname>* containername = (orxonox::XMLPortClassParamContainer<classname>*)(this->getIdentifier()->getXMLPortParamContainer(paramname)); \ 49 XMLPortParamGeneric(xmlcontainer##loadfunction##0, classname, classname, this, paramname, orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction), 0, xmlelement, mode) 50 #define XMLPortParamLoadOnlyTemplate(classname, paramname, loadfunction, xmlelement, mode, ...) \ 51 XMLPortParamGeneric(xmlcontainer##loadfunction##0, classname, classname, this, paramname, orxonox::createExecutor(orxonox::createFunctor< __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction), 0, xmlelement, mode) 52 53 #define XMLPortParamExtern(classname, externclass, object, paramname, loadfunction, savefunction, xmlelement, mode) \ 54 XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, externclass, object, paramname, orxonox::createExecutor(orxonox::createFunctor(&externclass::loadfunction), std::string( #externclass ) + "::" + #loadfunction), orxonox::createExecutor(orxonox::createFunctor(&externclass::savefunction), std::string( #externclass ) + "::" + #savefunction), xmlelement, mode); 55 #define XMLPortParamExternTemplate(classname, externclass, object, paramname, loadfunction, savefunction, xmlelement, mode, ...) \ 56 XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, externclass, object, paramname, orxonox::createExecutor(orxonox::createFunctor< __VA_ARGS__ >(&externclass::loadfunction), std::string( #externclass ) + "::" + #loadfunction), orxonox::createExecutor(orxonox::createFunctor(&externclass::savefunction), std::string( #externclass ) + "::" + #savefunction), xmlelement, mode); 57 58 #define XMLPortParamGeneric(containername, classname, objectclass, object, paramname, loadexecutor, saveexecutor, xmlelement, mode) \ 59 orxonox::XMLPortClassParamContainer<objectclass>* containername = (orxonox::XMLPortClassParamContainer<objectclass>*)(ClassIdentifier<classname>::getIdentifier()->getXMLPortParamContainer(paramname)); \ 55 60 if (!containername) \ 56 61 { \ 57 containername = new orxonox::XMLPortClassParamContainer< classname>(std::string(paramname), loadexecutor, saveexecutor); \58 this->getIdentifier()->addXMLPortParamContainer(paramname, containername); \62 containername = new orxonox::XMLPortClassParamContainer<objectclass>(std::string(paramname), ClassIdentifier<classname>::getIdentifier(), loadexecutor, saveexecutor); \ 63 ClassIdentifier<classname>::getIdentifier()->addXMLPortParamContainer(paramname, containername); \ 59 64 } \ 60 containername->port( this, xmlelement, mode)65 containername->port((BaseObject*)this, object, xmlelement, mode) 61 66 62 67 63 68 #define XMLPortObject(classname, objectclass, sectionname, loadfunction, savefunction, xmlelement, mode, bApplyLoaderMask, bLoadBefore) \ 64 XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), #loadfunction), orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction),#savefunction), xmlelement, mode, bApplyLoaderMask, bLoadBefore)65 #define XMLPortObject _Template(classname, objectclass, sectionname, loadtemplate, loadfunction, savetemplate, savefunction, xmlelement, mode, bApplyLoaderMask, bLoadBefore) \66 XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, orxonox::createExecutor(orxonox::createFunctor loadtemplate (&classname::loadfunction), #loadfunction), orxonox::createExecutor(orxonox::createFunctor savetemplate (&classname::savefunction),#savefunction), xmlelement, mode, bApplyLoaderMask, bLoadBefore)69 XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction), orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction), xmlelement, mode, bApplyLoaderMask, bLoadBefore) 70 #define XMLPortObjectTemplate(classname, objectclass, sectionname, loadfunction, savefunction, xmlelement, mode, bApplyLoaderMask, bLoadBefore, ...) \ 71 XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, orxonox::createExecutor(orxonox::createFunctor< __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction), orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction), xmlelement, mode, bApplyLoaderMask, bLoadBefore) 67 72 68 73 #define XMLPortObjectGeneric(containername, classname, objectclass, sectionname, loadexecutor, saveexecutor, xmlelement, mode, bApplyLoaderMask, bLoadBefore) \ 69 orxonox::XMLPortClassObjectContainer<classname, objectclass>* containername = (orxonox::XMLPortClassObjectContainer<classname, objectclass>*)( this->getIdentifier()->getXMLPortObjectContainer(sectionname)); \74 orxonox::XMLPortClassObjectContainer<classname, objectclass>* containername = (orxonox::XMLPortClassObjectContainer<classname, objectclass>*)(ClassIdentifier<classname>::getIdentifier()->getXMLPortObjectContainer(sectionname)); \ 70 75 if (!containername) \ 71 76 { \ 72 containername = new orxonox::XMLPortClassObjectContainer<classname, objectclass>(std::string(sectionname), loadexecutor, saveexecutor, bApplyLoaderMask, bLoadBefore); \73 this->getIdentifier()->addXMLPortObjectContainer(sectionname, containername); \77 containername = new orxonox::XMLPortClassObjectContainer<classname, objectclass>(std::string(sectionname), ClassIdentifier<classname>::getIdentifier(), loadexecutor, saveexecutor, bApplyLoaderMask, bLoadBefore); \ 78 ClassIdentifier<classname>::getIdentifier()->addXMLPortObjectContainer(sectionname, containername); \ 74 79 } \ 75 80 containername->port(this, xmlelement, mode) … … 102 107 virtual const std::string& getDescription() = 0; 103 108 104 virtual XMLPortParamContainer& defaultValue(unsigned int index, const MultiType Math& param) = 0;105 virtual XMLPortParamContainer& defaultValues(const MultiType Math& param1) = 0;106 virtual XMLPortParamContainer& defaultValues(const MultiType Math& param1, const MultiTypeMath& param2) = 0;107 virtual XMLPortParamContainer& defaultValues(const MultiType Math& param1, const MultiTypeMath& param2, const MultiTypeMath& param3) = 0;108 virtual XMLPortParamContainer& defaultValues(const MultiType Math& param1, const MultiTypeMath& param2, const MultiTypeMath& param3, const MultiTypeMath& param4) = 0;109 virtual XMLPortParamContainer& defaultValues(const MultiType Math& param1, const MultiTypeMath& param2, const MultiTypeMath& param3, const MultiTypeMath& param4, const MultiTypeMath& param5) = 0;109 virtual XMLPortParamContainer& defaultValue(unsigned int index, const MultiType& param) = 0; 110 virtual XMLPortParamContainer& defaultValues(const MultiType& param1) = 0; 111 virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2) = 0; 112 virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3) = 0; 113 virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4) = 0; 114 virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) = 0; 110 115 111 116 protected: 112 117 std::string paramname_; 113 118 ParseResult parseResult_; 114 119 Identifier* identifier_; 120 BaseObject* owner_; 115 121 }; 116 122 … … 126 132 127 133 public: 128 XMLPortClassParamContainer(const std::string paramname, ExecutorMember<T>* loadexecutor, ExecutorMember<T>* saveexecutor)134 XMLPortClassParamContainer(const std::string paramname, Identifier* identifier, ExecutorMember<T>* loadexecutor, ExecutorMember<T>* saveexecutor) 129 135 { 130 136 this->paramname_ = paramname; 137 this->identifier_ = identifier; 131 138 this->loadexecutor_ = loadexecutor; 132 139 this->saveexecutor_ = saveexecutor; 133 140 } 134 141 135 XMLPortParamContainer& port(T* object, Element& xmlelement, XMLPort::Mode mode) 136 { 142 XMLPortParamContainer& port(BaseObject* owner, T* object, Element& xmlelement, XMLPort::Mode mode) 143 { 144 this->owner_ = owner; 137 145 this->parseParams_.object = object; 138 146 this->parseParams_.xmlelement = &xmlelement; … … 146 154 if ((attribute.size() > 0) || (this->loadexecutor_->allDefaultValuesSet())) 147 155 { 148 COUT(5) << ((BaseObject*)object)->getLoaderIndentation() << "Loading parameter " << this->paramname_ << " in " << object->getIdentifier()->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")." << std::endl << ((BaseObject*)object)->getLoaderIndentation();156 COUT(5) << this->owner_->getLoaderIndentation() << "Loading parameter " << this->paramname_ << " in " << this->identifier_->getName() << " (objectname " << this->owner_->getName() << ")." << std::endl << this->owner_->getLoaderIndentation(); 149 157 if (this->loadexecutor_->parse(object, attribute, ",")) 150 158 this->parseResult_ = PR_finished; … … 158 166 { 159 167 COUT(1) << std::endl; 160 COUT(1) << "An error occurred in XMLPort.h while loading attribute '" << this->paramname_ << "' of '" << object->getIdentifier()->getName() << "' (objectname: " << ((BaseObject*)object)->getName() << ") in " << ((BaseObject*)object)->getLevelfile() << ":" << std::endl;168 COUT(1) << "An error occurred in XMLPort.h while loading attribute '" << this->paramname_ << "' of '" << this->identifier_->getName() << "' (objectname: " << this->owner_->getName() << ") in " << this->owner_->getLevelfile() << ":" << std::endl; 161 169 COUT(1) << ex.what() << std::endl; 162 170 } … … 173 181 } 174 182 175 XMLPortParamContainer& port( const ParseParams& parseParams)176 { 177 return this->port( parseParams.object, *parseParams.xmlelement, parseParams.mode);183 XMLPortParamContainer& port(BaseObject* owner, const ParseParams& parseParams) 184 { 185 return this->port(owner, parseParams.object, *parseParams.xmlelement, parseParams.mode); 178 186 } 179 187 … … 181 189 { 182 190 if (result == PR_waiting_for_default_values) 183 return this->port( params);191 return this->port(this->owner_, params); 184 192 else 185 193 return (*this); … … 191 199 { return this->loadexecutor_->getDescription(); } 192 200 193 virtual XMLPortParamContainer& defaultValue(unsigned int index, const MultiType Math& param)201 virtual XMLPortParamContainer& defaultValue(unsigned int index, const MultiType& param) 194 202 { 195 203 if (!this->loadexecutor_->defaultValueSet(index)) … … 197 205 return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_); 198 206 } 199 virtual XMLPortParamContainer& defaultValues(const MultiType Math& param1)207 virtual XMLPortParamContainer& defaultValues(const MultiType& param1) 200 208 { 201 209 if (!this->loadexecutor_->defaultValueSet(0)) … … 203 211 return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_); 204 212 } 205 virtual XMLPortParamContainer& defaultValues(const MultiType Math& param1, const MultiTypeMath& param2)213 virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2) 206 214 { 207 215 if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1))) … … 209 217 return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_); 210 218 } 211 virtual XMLPortParamContainer& defaultValues(const MultiType Math& param1, const MultiTypeMath& param2, const MultiTypeMath& param3)219 virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3) 212 220 { 213 221 if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)) || (!this->loadexecutor_->defaultValueSet(2))) … … 215 223 return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_); 216 224 } 217 virtual XMLPortParamContainer& defaultValues(const MultiType Math& param1, const MultiTypeMath& param2, const MultiTypeMath& param3, const MultiTypeMath& param4)225 virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4) 218 226 { 219 227 if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)) || (!this->loadexecutor_->defaultValueSet(2)) || (!this->loadexecutor_->defaultValueSet(3))) … … 221 229 return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_); 222 230 } 223 virtual XMLPortParamContainer& defaultValues(const MultiType Math& param1, const MultiTypeMath& param2, const MultiTypeMath& param3, const MultiTypeMath& param4, const MultiTypeMath& param5)231 virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) 224 232 { 225 233 if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)) || (!this->loadexecutor_->defaultValueSet(2)) || (!this->loadexecutor_->defaultValueSet(3)) || (!this->loadexecutor_->defaultValueSet(4))) … … 257 265 bool bApplyLoaderMask_; 258 266 bool bLoadBefore_; 267 Identifier* identifier_; 259 268 }; 260 269 … … 263 272 { 264 273 public: 265 XMLPortClassObjectContainer(const std::string sectionname, ExecutorMember<T>* loadexecutor, ExecutorMember<T>* saveexecutor, bool bApplyLoaderMask, bool bLoadBefore)274 XMLPortClassObjectContainer(const std::string sectionname, Identifier* identifier, ExecutorMember<T>* loadexecutor, ExecutorMember<T>* saveexecutor, bool bApplyLoaderMask, bool bLoadBefore) 266 275 { 267 276 this->sectionname_ = sectionname; 277 this->identifier_ = identifier; 268 278 this->loadexecutor_ = loadexecutor; 269 279 this->saveexecutor_ = saveexecutor; … … 305 315 { 306 316 newObject->XMLPort(*child, XMLPort::LoadObject); 307 COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (objectname " << newObject->getName() << ") to " << object->getIdentifier()->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl;317 COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (objectname " << newObject->getName() << ") to " << this->identifier_->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl; 308 318 } 309 319 else 310 320 { 311 COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (object not yet loaded) to " << object->getIdentifier()->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl;321 COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (object not yet loaded) to " << this->identifier_->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl; 312 322 } 313 323 … … 336 346 { 337 347 COUT(1) << std::endl; 338 COUT(1) << "An error occurred in XMLPort.h while loading a '" << Class(O)->getName() << "' in '" << this->sectionname_ << "' of '" << object->getIdentifier()->getName() << "' (objectname: " << ((BaseObject*)object)->getName() << ") in " << object->getLevelfile() << ":" << std::endl;348 COUT(1) << "An error occurred in XMLPort.h while loading a '" << Class(O)->getName() << "' in '" << this->sectionname_ << "' of '" << this->identifier_->getName() << "' (objectname: " << ((BaseObject*)object)->getName() << ") in " << object->getLevelfile() << ":" << std::endl; 339 349 COUT(1) << ex.what() << std::endl; 340 350 }
Note: See TracChangeset
for help on using the changeset viewer.