- Timestamp:
- Jan 20, 2010, 2:21:10 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/consolecommands2/src/libraries/core/Functor.h
r6417 r6452 31 31 #define _Functor_H__ 32 32 33 #include <typeinfo> 34 33 35 #include "CorePrereqs.h" 34 36 37 #include "util/Convert.h" 35 38 #include "util/Debug.h" 36 39 #include "util/MultiType.h" 40 #include "BaseObject.h" 37 41 38 42 namespace orxonox … … 112 116 virtual void evaluateParam(unsigned int index, MultiType& param) const = 0; 113 117 118 virtual void setBaseObject(BaseObject* object) {} 119 virtual void setBaseObject(const BaseObject* object) {} 120 virtual BaseObject* getBaseObject() const { return 0; } 121 122 virtual void setRawObjectPointer(void* object) {} 123 virtual void* getRawObjectPointer() const { return 0; } 124 125 virtual const std::type_info& getHeaderIdentifier() const = 0; 126 114 127 protected: 115 128 unsigned int numParams_; … … 182 195 } 183 196 197 void setBaseObject(BaseObject* object) 198 { 199 this->bConstObject_ = false; 200 this->object_ = dynamic_cast<T*>(object); 201 } 202 203 void setBaseObject(const BaseObject* object) 204 { 205 this->bConstObject_ = true; 206 this->constObject_ = dynamic_cast<const T*>(object); 207 } 208 209 BaseObject* getBaseObject() const 210 { 211 if (this->bConstObject_) 212 return const_cast<BaseObject*>(upcast<const BaseObject*>(this->constObject_)); 213 else 214 return upcast<BaseObject*>(this->object_); 215 } 216 217 void setRawObjectPointer(void* object) 218 { 219 this->bConstObject_ = false; 220 this->object_ = (T*)object; 221 } 222 223 void* getRawObjectPointer() const 224 { 225 if (this->bConstObject_) 226 return (void*)this->constObject_; 227 else 228 return (void*)this->object_; 229 } 230 184 231 private: 185 232 const T* constObject_; … … 187 234 bool bConstObject_; 188 235 }; 236 237 238 239 template <int r, class R, class P1, class P2, class P3, class P4, class P5> 240 struct FunctorHeaderIdentifier {}; 241 242 243 244 inline Functor* createFunctor(Functor* functor) 245 { 246 return functor; 247 } 189 248 190 249 … … 294 353 295 354 355 #define FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES(returnvalue, numparams) FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES##numparams(returnvalue) 356 #define FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES0(returnvalue) <returnvalue, FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES_RETURNVALUE(returnvalue), void, void, void, void, void> 357 #define FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES1(returnvalue) <returnvalue, FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES_RETURNVALUE(returnvalue), P1, void, void, void, void> 358 #define FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES2(returnvalue) <returnvalue, FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES_RETURNVALUE(returnvalue), P1, P2, void, void, void> 359 #define FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES3(returnvalue) <returnvalue, FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES_RETURNVALUE(returnvalue), P1, P2, P3, void, void> 360 #define FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES4(returnvalue) <returnvalue, FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES_RETURNVALUE(returnvalue), P1, P2, P3, P4, void> 361 #define FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES5(returnvalue) <returnvalue, FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES_RETURNVALUE(returnvalue), P1, P2, P3, P4, P5> 362 363 #define FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES_RETURNVALUE(returnvalue) FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES_RETURNVALUE##returnvalue 364 #define FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES_RETURNVALUE0 void 365 #define FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES_RETURNVALUE1 R 366 367 368 296 369 #define FUNCTOR_EVALUATE_PARAM(numparams) FUNCTOR_EVALUATE_PARAM##numparams 297 370 #define FUNCTOR_EVALUATE_PARAM0 … … 320 393 321 394 322 323 395 #define CREATE_STATIC_FUNCTOR(returnvalue, numparams) \ 324 396 FUNCTOR_TEMPLATE(0, returnvalue, numparams, 0) \ … … 342 414 } \ 343 415 \ 344 v irtual void evaluateParam(unsigned int index, MultiType& param) const \416 void evaluateParam(unsigned int index, MultiType& param) const \ 345 417 { \ 346 418 FUNCTOR_EVALUATE_PARAM(numparams); \ 419 } \ 420 \ 421 const std::type_info& getHeaderIdentifier() const \ 422 { \ 423 return typeid(FunctorHeaderIdentifier FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES(returnvalue, numparams)); \ 347 424 } \ 348 425 \ … … 386 463 } \ 387 464 \ 388 v irtual void evaluateParam(unsigned int index, MultiType& param) const \465 void evaluateParam(unsigned int index, MultiType& param) const \ 389 466 { \ 390 467 FUNCTOR_EVALUATE_PARAM(numparams); \ 468 } \ 469 \ 470 const std::type_info& getHeaderIdentifier() const \ 471 { \ 472 return typeid(FunctorHeaderIdentifier FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES(returnvalue, numparams)); \ 391 473 } \ 392 474 \ … … 418 500 } \ 419 501 \ 420 v irtual void evaluateParam(unsigned int index, MultiType& param) const \502 void evaluateParam(unsigned int index, MultiType& param) const \ 421 503 { \ 422 504 FUNCTOR_EVALUATE_PARAM(numparams); \ 505 } \ 506 \ 507 const std::type_info& getHeaderIdentifier() const \ 508 { \ 509 return typeid(FunctorHeaderIdentifier FUNCTOR_HEADER_IDENTIFIER_TEMPLATE_CLASSES(returnvalue, numparams)); \ 423 510 } \ 424 511 \ … … 457 544 return functor; \ 458 545 } 546 459 547 460 548
Note: See TracChangeset
for help on using the changeset viewer.