00001 #ifndef INCLUDE_ORA_CLASSUTILS_H 00002 #define INCLUDE_ORA_CLASSUTILS_H 00003 00004 // externals 00005 #include "Reflex/Type.h" 00006 00007 namespace ora { 00008 00009 class RflxDeleter{ 00010 00011 public: 00012 RflxDeleter( const Reflex::Type& type ); 00013 00014 RflxDeleter( const RflxDeleter& rhs ); 00015 00016 ~RflxDeleter(); 00017 00018 void operator()( void* ptr ); 00019 00020 private: 00021 Reflex::Type m_type; 00022 00023 }; 00024 00025 namespace ClassUtils { 00026 00027 void loadDictionary( const std::string& className ); 00028 00029 void* upCast( const Reflex::Type& type, void* ptr, const Reflex::Type& asType ); 00030 00031 bool isType( const Reflex::Type& type, const Reflex::Type& baseType ); 00032 00033 bool checkMappedType( const Reflex::Type& type, const std::string& mappedTypeName ); 00034 00035 bool findBaseType( Reflex::Type& type, Reflex::Type& baseType, Reflex::OffsetFunction& func ); 00036 00037 std::string demangledName( const std::type_info& typeInfo ); 00038 00039 Reflex::Type lookupDictionary( const std::type_info& typeInfo, bool throwFlag = true ); 00040 00041 Reflex::Type lookupDictionary( const std::string& className, bool throwFlag = true ); 00042 00043 void* constructObject( const Reflex::Type& typ ); 00044 00045 bool isTypeString(const Reflex::Type& typ); 00046 00047 bool isTypePrimitive(const Reflex::Type& typ); 00048 00049 bool isTypeContainer(const Reflex::Type& typ); 00050 00051 bool isTypeKeyedContainer(const Reflex::Type& typ); 00052 00053 bool isTypeNonKeyedContainer(const Reflex::Type& typ); 00054 00055 bool isTypeAssociativeContainer(const Reflex::Type& typ); 00056 00057 bool isTypeNonAssociativeContainer(const Reflex::Type& typ); 00058 00059 Reflex::Type containerValueType(const Reflex::Type& typ); 00060 00061 Reflex::Type containerKeyType(const Reflex::Type& typ); 00062 00063 Reflex::Type containerDataType(const Reflex::Type& typ); 00064 00065 Reflex::Type containerSubType(const Reflex::Type& typ, const std::string& subTypeName); 00066 00067 Reflex::Type resolvedType(const Reflex::Type& typ); 00068 00069 bool isTypeOraReference( const Reflex::Type& typ); 00070 00071 bool isTypeNamedReference( const Reflex::Type& typ); 00072 00073 bool isTypeOraPointer( const Reflex::Type& typ); 00074 00075 bool isTypeUniqueReference( const Reflex::Type& typ); 00076 00077 bool isTypePVector( const Reflex::Type& typ); 00078 00079 bool isTypeQueryableVector( const Reflex::Type& typ); 00080 00081 bool isTypeOraVector( const Reflex::Type& typ); 00082 00083 bool isTypeNameOraVector( const std::string& typeName ); 00084 00085 bool isTypeObject( const Reflex::Type& typ); 00086 00087 00088 } 00089 00090 } 00091 00092 #endif