vcfrttiimpl.h
来自「这是VCF框架的代码」· C头文件 代码 · 共 2,696 行 · 第 1/5 页
H
2,696 行
deleteFunc1_ = prop.deleteFunc1_; deleteFunc2_ = prop.deleteFunc2_; }; virtual ~TypedObjectCollectionProperty(){}; void init(){ getFunction_ = NULL; isCollection_ = true; enumeration_ = NULL; isReadOnly_ = true; addFunc_ = NULL; insertFunc_ = NULL; deleteFunc1_ = NULL; deleteFunc2_ = NULL; setType( pdObject ); }; virtual String getTypeClassName() { return StringUtils::getClassNameFromTypeInfo( typeid(ITEM_TYPE) ); } virtual VariantData* get( Object* source ){ return NULL; }; virtual void set( Object* source, VariantData* value ){ //no-op }; virtual bool hasMoreElements( Object* source ){ _typename_ std::map<Object*,Enumerator<ITEM_TYPE>*>::iterator it = enumerationMap_.find( source ); if ( it != enumerationMap_.end() ){ Enumerator<ITEM_TYPE>* enumeration = it->second; bool result = false; if ( NULL != enumeration ){ result = enumeration->hasMoreElements(); if ( false == result ){ enumerationMap_.erase( source ); } } return result; } else { return false; } }; virtual VariantData* nextElement( Object* source ){ VariantData* element = NULL; _typename_ std::map<Object*,Enumerator<ITEM_TYPE>*>::iterator it = enumerationMap_.find( source ); if ( it != enumerationMap_.end() ){ Enumerator<ITEM_TYPE>* enumeration = it->second; if ( NULL != enumeration ){ if ( true == enumeration->hasMoreElements() ){ value_ = enumeration->nextElement(); element = &value_; } } } return element; }; virtual void startCollection( Object* source ){ enumeration_ = NULL; if ( NULL != source ) { enumeration_ = (source->*getFunction_)(); enumerationMap_[ source ] = enumeration_; } }; virtual Property* clone(){ return new TypedObjectCollectionProperty<ITEM_TYPE>(*this); }; virtual void add( Object* source, VariantData* value ){ if ( (NULL != value) && (NULL != addFunc_) ){ if ( pdObject == value->type ){ ITEM_TYPE valToAdd = (ITEM_TYPE)(Object*)(*value); (source->*addFunc_)( valToAdd ); } } }; virtual void insert( Object* source, const unsigned long& index, VariantData* value ){ if ( (NULL != value) && (NULL != insertFunc_) ){ if ( pdObject == value->type ){ ITEM_TYPE valToInsert = (ITEM_TYPE)(Object*)(*value); (source->*insertFunc_)( index, valToInsert ); } } }; virtual void remove( Object* source, VariantData* value ){ if ( (NULL != value) && (NULL != deleteFunc1_) ){ ITEM_TYPE valToRemove = (ITEM_TYPE)(Object*)(*value); (source->*deleteFunc1_)( valToRemove ); } }; virtual void remove( Object* source, const unsigned long& index ){ if ( NULL != deleteFunc2_ ){ (source->*deleteFunc2_)( index ); } }; virtual bool collectionSupportsEditing(){ if ( NULL != enumeration_ ){ return enumeration_->supportsEditing(); } else{ return false; } };private: GetFunction getFunction_; AddFunction addFunc_; InsertFunction insertFunc_; DeleteFunction1 deleteFunc1_; DeleteFunction2 deleteFunc2_; Enumerator<ITEM_TYPE>* enumeration_; std::map<Object*, Enumerator<ITEM_TYPE>*> enumerationMap_;};/**\class TypedMethod VCFRTTIImpl.h "vcf/FoundationKit/VCFRTTIImpl.h"*Base template class for methods that do NOT return values*/template <typename SOURCE_TYPE>class TypedMethod : public Method {public: typedef SOURCE_TYPE SrcType; TypedMethod( const String& argTypes="", SOURCE_TYPE* source=NULL ){ source_ = source; argTypes_ = argTypes; objSource_ = NULL; } TypedMethod( const TypedMethod<SOURCE_TYPE>& method ) : Method() { *this = method; } TypedMethod<SOURCE_TYPE>& operator=( const TypedMethod<SOURCE_TYPE>& rhs ) { source_ = rhs.source_; argTypes_ = rhs.argTypes_; objSource_ = rhs.objSource_; argCount_ = rhs.argCount_; name_ = rhs.name_; hasReturnValue_ = rhs.hasReturnValue_; return *this; } virtual ~TypedMethod(){ } virtual Object* getSource(){ return objSource_; } virtual void setSource( Object* source ){ //does the source actually support this interface/class ? source_ = dynamic_cast<SOURCE_TYPE*>( source ); objSource_ = NULL; if ( NULL != source_ ){ objSource_ = source; } }protected: SOURCE_TYPE* source_; Object* objSource_;};/**\class TypedMethodReturn VCFRTTIImpl.h "vcf/FoundationKit/VCFRTTIImpl.h"*Base template class for methodsthat DO return values*/template <typename SOURCE_TYPE, typename RETURN_TYPE>class TypedMethodReturn : public TypedMethod<SOURCE_TYPE> {public: #if defined(VCF_MINGW) || defined(VCF_GCC) using TypedMethod<SOURCE_TYPE>::hasReturnValue_; using TypedMethod<SOURCE_TYPE>::argCount_; using TypedMethod<SOURCE_TYPE>::objSource_; using TypedMethod<SOURCE_TYPE>::source_; #endif typedef RETURN_TYPE ReturnType; TypedMethodReturn( const String& argTypes="", SOURCE_TYPE* source=NULL ): TypedMethod<SOURCE_TYPE>( argTypes, source ) { hasReturnValue_ = true; } TypedMethodReturn( const TypedMethodReturn<SOURCE_TYPE,RETURN_TYPE>& rhs ) { hasReturnValue_ = true; *this = rhs; } TypedMethodReturn<SOURCE_TYPE,RETURN_TYPE>& operator=( const TypedMethodReturn<SOURCE_TYPE,RETURN_TYPE>& rhs ) { TypedMethod<SOURCE_TYPE>::operator =(rhs); returnVal_ = rhs.returnVal_; return *this; } virtual ~TypedMethodReturn(){}protected: VariantData returnVal_;};/**\class TypedMethodArg0 VCFRTTIImpl.h "vcf/FoundationKit/VCFRTTIImpl.h"*Method template class for methods have 0 arguments*/template <class SOURCE_TYPE>class TypedMethodArg0 : public TypedMethod<SOURCE_TYPE> {public: #if defined(VCF_MINGW) || defined(VCF_GCC) using TypedMethod<SOURCE_TYPE>::hasReturnValue_; using TypedMethod<SOURCE_TYPE>::argCount_; using TypedMethod<SOURCE_TYPE>::objSource_; using TypedMethod<SOURCE_TYPE>::source_; #endif typedef void (SOURCE_TYPE::*MemberFunc)(); TypedMethodArg0( MemberFunc methodPtr=NULL, const String& argTypes="", SOURCE_TYPE* source=NULL ): TypedMethod<SOURCE_TYPE>( argTypes, source ){ argCount_ = 0; methodPtr_=methodPtr; } TypedMethodArg0( const TypedMethodArg0<SOURCE_TYPE>& method ) : TypedMethod<SOURCE_TYPE>( method ) { *this = method; } TypedMethodArg0<SOURCE_TYPE>& operator=( const TypedMethodArg0<SOURCE_TYPE>& rhs ) { TypedMethod<SOURCE_TYPE>::operator =(rhs); methodPtr_ = rhs.methodPtr_; return *this; } virtual ~TypedMethodArg0(){ } virtual VariantData* invoke( VariantData** arguments, Object* source=NULL ){ if ( NULL != source ) { source_ = dynamic_cast<SOURCE_TYPE*>( source ); } if ( (NULL != source_) && (NULL != methodPtr_) ){ if ( 0 == argCount_ ) { (source_->*methodPtr_)(); } } return NULL; } virtual Method* clone() { return new TypedMethodArg0<SOURCE_TYPE>(*this); }protected: MemberFunc methodPtr_;};/**\class TypedMethodArg1 VCFRTTIImpl.h "vcf/FoundationKit/VCFRTTIImpl.h"*Method template class for methods have 1 argument*/template <typename SOURCE_TYPE, typename ARG1_TYPE>class TypedMethodArg1 : public TypedMethod<SOURCE_TYPE> {public: #if defined(VCF_MINGW) || defined(VCF_GCC) using TypedMethod<SOURCE_TYPE>::hasReturnValue_; using TypedMethod<SOURCE_TYPE>::argCount_; using TypedMethod<SOURCE_TYPE>::objSource_; using TypedMethod<SOURCE_TYPE>::source_; #endif typedef ARG1_TYPE Argument1; typedef void (SOURCE_TYPE::*MemberFunc)(ARG1_TYPE arg1); TypedMethodArg1( MemberFunc methodPtr=NULL, const String& argTypes="", SOURCE_TYPE* source=NULL ): TypedMethod<SOURCE_TYPE>( argTypes, source ){ argCount_ = 1; methodPtr_ = methodPtr; } TypedMethodArg1( const TypedMethodArg1<SOURCE_TYPE,ARG1_TYPE>& method ) { *this = method; } TypedMethodArg1<SOURCE_TYPE,ARG1_TYPE>& operator=( const TypedMethodArg1<SOURCE_TYPE,ARG1_TYPE>& rhs ) { TypedMethod<SOURCE_TYPE>::operator =(rhs); methodPtr_ = rhs.methodPtr_; return *this; } virtual Method* clone() { return new TypedMethodArg1<SOURCE_TYPE,ARG1_TYPE>(*this); } virtual ~TypedMethodArg1(){ } virtual VariantData* invoke( VariantData** arguments, Object* source=NULL ){ if ( NULL != source ) { source_ = dynamic_cast<SOURCE_TYPE*>( source ); } if ( (NULL != source_) && (NULL != methodPtr_) ){ if ( 1 == argCount_ ) { (source_->*methodPtr_)( (Argument1) *(arguments[0]) ); } } return NULL; }protected: MemberFunc methodPtr_;};/**\class TypedMethodArg2 VCFRTTIImpl.h "vcf/FoundationKit/VCFRTTIImpl.h"*Accepts methds with 2 arguments - no return value*/template <typename SOURCE_TYPE, typename ARG1_TYPE, typename ARG2_TYPE >class TypedMethodArg2 : public TypedMethod<SOURCE_TYPE> {public: #if defined(VCF_MINGW) || defined(VCF_GCC) using TypedMethod<SOURCE_TYPE>::hasReturnValue_; using TypedMethod<SOURCE_TYPE>::argCount_; using TypedMethod<SOURCE_TYPE>::objSource_; using TypedMethod<SOURCE_TYPE>::source_; #endif typedef ARG1_TYPE Argument1; typedef ARG2_TYPE Argument2; typedef void (SOURCE_TYPE::*MemberFunc)(ARG1_TYPE arg1, ARG2_TYPE arg2); TypedMethodArg2( MemberFunc methodPtr=NULL, const String& argTypes="", SOURCE_TYPE* source=NULL ): TypedMethod<SOURCE_TYPE>( argTypes, source ){ argCount_ = 2; methodPtr_ = methodPtr; } TypedMethodArg2( const TypedMethodArg2<SOURCE_TYPE,ARG1_TYPE,ARG2_TYPE>& method ) : TypedMethod<SOURCE_TYPE>( method ) { *this = method; } TypedMethodArg2<SOURCE_TYPE,ARG1_TYPE,ARG2_TYPE>& operator=( const TypedMethodArg2<SOURCE_TYPE,ARG1_TYPE,ARG2_TYPE>& rhs ) { TypedMethod<SOURCE_TYPE>::operator =(rhs); methodPtr_ = rhs.methodPtr_; return *this; } virtual Method* clone() { return new TypedMethodArg2<SOURCE_TYPE,ARG1_TYPE,ARG2_TYPE>(*this); } virtual ~TypedMethodArg2(){ } virtual VariantData* invoke( VariantData** arguments, Object* source=NULL ){ if ( NULL != source ) { source_ = dynamic_cast<SOURCE_TYPE*>( source ); } if ( (NULL != source_) && (NULL != methodPtr_) ){ if ( 2 == argCount_ ) { (source_->*methodPtr_)( (Argument1)*(arguments[0]), (Argument2)*(arguments[1]) ); } } return NULL; }protected: MemberFunc methodPtr_;};/**\class TypedMethodArg3 VCFRTTIImpl.h "vcf/FoundationKit/VCFRTTIImpl.h"*Accepts methds with 3 arguments - no return value*/template <typename SOURCE_TYPE, typename ARG1_TYPE, typename ARG2_TYPE, typename ARG3_TYPE>class TypedMethodArg3 : public TypedMethod<SOURCE_TYPE> {public: #if defined(VCF_MINGW) || defined(VCF_GCC) using TypedMethod<SOURCE_TYPE>::hasReturnValue_; using TypedMethod<SOURCE_TYPE>::argCount_; using TypedMethod<SOURCE_TYPE>::objSource_; using TypedMethod<SOURCE_TYPE>::source_; #endif typedef ARG1_TYPE Argument1; typedef ARG2_TYPE Argument2; typedef ARG3_TYPE Argument3; typedef void (SOURCE_TYPE::*MemberFunc)(ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); TypedMethodArg3( MemberFunc methodPtr=NULL, const String& argTypes="", SOURCE_TYPE* source=NULL ): TypedMethod<SOURCE_TYPE>( argTypes, source ){ argCount_ = 3; methodPtr_ = methodPtr; } TypedMethodArg3( const TypedMethodArg3<SOURCE_TYPE,ARG1_TYPE,ARG2_TYPE,ARG3_TYPE>& method ) { *this = method; } TypedMethodArg3<SOURCE_TYPE,ARG1_TYPE,ARG2_TYPE,ARG3_TYPE>& operator=( const TypedMethodArg3<SOURCE_TYPE,ARG1_TYPE,ARG2_TYPE,ARG3_TYPE>& rhs ) { TypedMethod<SOURCE_TYPE>::operator =(rhs); methodPtr_ = rhs.methodPtr_; return *this; } virtual Method* clone() { return new TypedMethodArg3<SOURCE_TYPE,ARG1_TYPE,ARG2_TYPE,ARG3_TYPE>(*this); } virtual ~TypedMethodArg3(){ } virtual VariantData* invoke( VariantData** arguments, Object* source=NULL ){ if ( NULL != source ) { source_ = dynamic_cast<SOURCE_TYPE*>( source ); } if ( (NULL != source_) && (NULL != methodPtr_) ){ if ( 3 == argCount_ ) { (source_->*methodPtr_)( (Argument1)*(arguments[0]), (Argument2)*(arguments[1]), (Argument3)*(arguments[2]) ); } } return NULL; }protected: MemberFunc methodPtr_;};/**\class TypedMethodArg4 VCFRTTIImpl.h "vcf/FoundationKit/VCFRTTIImpl.h"*Accepts methds with 4 arguments - no return value*/template <typename SOURCE_TYPE, typename ARG1_TYPE, typename ARG2_TYPE, typename ARG3_TYPE, typename ARG4_TYPE>class TypedMethodArg4 : public TypedMethod<SOURCE_TYPE> {public: #if defined(VCF_MINGW) || defined(VCF_GCC) using TypedMethod<SOURCE_TYPE>::hasReturnValue_; using TypedMethod<SOURCE_TYPE>::argCount_; using TypedMethod<SOURCE_TYPE>::objSource_; using TypedMethod<SOURCE_TYPE>::source_; #endif typedef ARG1_TYPE Argument1; typedef ARG2_TYPE Argument2; typedef ARG3_TYPE Argument3; typedef ARG4_TYPE Argument4; typedef void (SOURCE_TYPE::*MemberFunc)(ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); typedef TypedMethodArg4<SOURCE_TYPE,ARG1_TYPE,ARG2_TYPE,ARG3_TYPE,ARG4_TYPE> TypedMethodArg4Type; TypedMethodArg4( MemberFunc methodPtr=NULL, const String& argTypes="", SOURCE_TYPE* source=NULL ): TypedMethod<SOURCE_TYPE>( argTypes, source ){ argCount_ = 4; methodPtr_ = methodPtr; } TypedMethodArg4( const TypedMethodArg4Type& method ) { *this = method; } TypedMethodArg4Type& operator=( const TypedMethodArg4Type& rhs ) { TypedMethod<SOURCE_TYPE>::operator =(rhs); methodPtr_ = rhs.methodPtr_; return *this; } virtual Method* clone() { return new TypedMethodArg4Type(*this); } virtual ~TypedMethodArg4(){ }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?