00001 #ifndef RFL_FUNDAMENTALTYPE_HH
00002 #define RFL_FUNDAMENTALTYPE_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
00042 class FundamentalType : public Type {
00043 public:
00044
00045 FundamentalType( Id id,
00046 const mpu::String& name,
00047 std::size_t size,
00048 std::size_t alignment,
00049 std::size_t elementNum,
00050 const std::type_info* typeId,
00051 void(*create)(const Type*,void*),
00052 void(*cCreate)(const Type*,void*,const void*),
00053 void(*destroy)(const Type*,void*),
00054 void(*assign)(const Type*,void*,const void*),
00055 void*(*newObj)(const Type*),
00056 void*(*newCopy)(const Type*,const void*),
00057 void(*delObj)(const Type*,void*) ) :
00058 Type( id, name, size, alignment, elementNum, typeId,
00059 create, cCreate, destroy, assign, newObj, newCopy, delObj )
00060 {}
00061
00062 virtual const Type& getElmType( std::size_t idx ) const;
00063 virtual void* getElmAddr( void* obj, std::size_t idx ) const;
00064 };
00065
00066 extern const FundamentalType& TypeBool;
00067 extern const FundamentalType& TypeChar;
00068 extern const FundamentalType& TypeUChar;
00069 extern const FundamentalType& TypeShort;
00070 extern const FundamentalType& TypeUShort;
00071 extern const FundamentalType& TypeInt;
00072 extern const FundamentalType& TypeUInt;
00073 extern const FundamentalType& TypeLong;
00074 extern const FundamentalType& TypeULong;
00075 extern const FundamentalType& TypeFloat;
00076 extern const FundamentalType& TypeDouble;
00077
00078 }
00079 #endif // RFL_FUNDAMENTALTYPE_HH