00001 #ifndef RFL_ARRAYTYPE_HH
00002 #define RFL_ARRAYTYPE_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 ArrayType : public Type {
00029 public:
00030
00031 ArrayType( const Type& elementType, std::size_t elementNum );
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 static void fCreate( const Type* at, void* addr );
00048 static void fCCreate( const Type* at, void* addr, const void* obj );
00049 static void fDestroy( const Type* at, void* obj );
00050 static void fAssign( const Type* at, void* dst, const void* src );
00051
00052 static void* fNewObj( const Type* at );
00053 static void* fNewCopy( const Type* at, const void* obj );
00054 static void fDelObj( const Type* at, void* obj );
00055
00056 const Type* elmType_;
00057 };
00058
00059 }
00060 #endif // RFL_ARRAYTYPE_HH