00001 #ifndef RFL_STDMETHODS_HH
00002 #define RFL_STDMETHODS_HH
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 namespace rfl {
00025
00026 template<typename T>
00027 struct Create {
00028 static void fn( const Type*, void* addr )
00029 { new( addr ) T(); }
00030 };
00031
00032 template<typename T>
00033 struct CCreate {
00034 static void fn( const Type*, void* addr, const void* obj )
00035 { new( addr ) T( *static_cast<const T*>(obj) ); }
00036 };
00037
00038 template<typename T>
00039 struct Destroy {
00040 static void fn( const Type*, void* obj )
00041 { static_cast<T*>(obj)->~T(); }
00042 };
00043
00044 template<typename T>
00045 struct Assign {
00046 static void fn( const Type*, void* dst, const void* src )
00047 { *static_cast<T*>(dst) = *static_cast<const T*>(src); }
00048 };
00049
00050 template<typename T>
00051 struct NewObj {
00052 static void* fn( const Type* ) { return new T; }
00053 };
00054
00055 template<typename T>
00056 struct NewCopy {
00057 static void* fn( const Type*, const void* obj )
00058 { return new T( *static_cast<const T*>(obj) ); }
00059 };
00060
00061 template<typename T>
00062 struct DelObj {
00063 static void fn( const Type*, void* obj )
00064 { delete static_cast<T*>(obj); }
00065 };
00066
00067 }
00068 #endif // RFL_STDMETHODS_HH