Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jan 20, 2010, 2:21:10 PM (14 years ago)
Author:
landauf
Message:

merged current state of the new cc system to the updated branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/consolecommands2/src/libraries/core/Functor.h

    r6417 r6452  
    3131#define _Functor_H__
    3232
     33#include <typeinfo>
     34
    3335#include "CorePrereqs.h"
    3436
     37#include "util/Convert.h"
    3538#include "util/Debug.h"
    3639#include "util/MultiType.h"
     40#include "BaseObject.h"
    3741
    3842namespace orxonox
     
    112116            virtual void evaluateParam(unsigned int index, MultiType& param) const = 0;
    113117
     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
    114127        protected:
    115128            unsigned int numParams_;
     
    182195            }
    183196
     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
    184231        private:
    185232            const T* constObject_;
     
    187234            bool bConstObject_;
    188235    };
     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    }
    189248
    190249
     
    294353
    295354
     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
    296369#define FUNCTOR_EVALUATE_PARAM(numparams) FUNCTOR_EVALUATE_PARAM##numparams
    297370#define FUNCTOR_EVALUATE_PARAM0
     
    320393
    321394
    322 
    323395#define CREATE_STATIC_FUNCTOR(returnvalue, numparams) \
    324396    FUNCTOR_TEMPLATE(0, returnvalue, numparams, 0) \
     
    342414            } \
    343415    \
    344             virtual void evaluateParam(unsigned int index, MultiType& param) const \
     416            void evaluateParam(unsigned int index, MultiType& param) const \
    345417            { \
    346418                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)); \
    347424            } \
    348425    \
     
    386463            } \
    387464    \
    388             virtual void evaluateParam(unsigned int index, MultiType& param) const \
     465            void evaluateParam(unsigned int index, MultiType& param) const \
    389466            { \
    390467                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)); \
    391473            } \
    392474    \
     
    418500            } \
    419501    \
    420             virtual void evaluateParam(unsigned int index, MultiType& param) const \
     502            void evaluateParam(unsigned int index, MultiType& param) const \
    421503            { \
    422504                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)); \
    423510            } \
    424511    \
     
    457544        return functor; \
    458545    }
     546
    459547
    460548
Note: See TracChangeset for help on using the changeset viewer.