00001 #ifndef RFL_POINTERTYPE_HH
00002 #define RFL_POINTERTYPE_HH
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "Type.hh"
00025
00026 namespace rfl {
00027
00028 class PointerType : public Type {
00029 public:
00030
00031 PointerType( const Type& pointeeType );
00032
00033 virtual void avStartCall( av_alist& avList,
00034 void* fnPtr,
00035 void *retVal ) const;
00036
00037 virtual void avPutArg( av_alist& avList, void* arg ) const;
00038
00039 virtual const Type& getElmType( std::size_t idx ) const;
00040 virtual void* getElmAddr( void* obj, std::size_t idx ) const;
00041
00042 virtual unsigned long hash( void ) const;
00043 virtual bool operator==( const Type& type ) const;
00044
00045 private:
00046
00047 const Type* pointee_;
00048
00049 static void fCreate( const Type*, void* addr );
00050 static void fCCreate( const Type*, void* addr, const void* obj );
00051 static void fDestroy( const Type*, void* obj );
00052 static void fAssign( const Type*, void* dst, const void* src );
00053
00054 static void* fNewObj( const Type* );
00055 static void* fNewCopy( const Type*, const void* obj );
00056 static void fDelObj( const Type*, void* obj );
00057 };
00058
00059 }
00060 #endif // RFL_POINTERTYPE_HH