CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/CondCore/ORA/src/ClassUtils.h

Go to the documentation of this file.
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