00001
00002
00003 #ifndef XAODROOTACCESS_TOOLS_TDESTRUCTORREGISTRY_H
00004 #define XAODROOTACCESS_TOOLS_TDESTRUCTORREGISTRY_H
00005
00006
00007 #include <map>
00008
00009
00010 namespace std {
00011 class type_info;
00012 }
00013
00014 namespace xAOD {
00015
00016
00017 class TVirtualDestructor;
00018
00030 class TDestructorRegistry {
00031
00032 public:
00034 static TDestructorRegistry& instance();
00035
00037 const TVirtualDestructor* get( const std::type_info& ti ) const;
00039 template< class T >
00040 void add();
00041
00042 private:
00044 class TDestructorHolder {
00045 public:
00047 TDestructorHolder( TVirtualDestructor* d = 0 );
00049 ~TDestructorHolder();
00050
00052 TVirtualDestructor* m_destructor;
00053 };
00054
00056 typedef std::map< const std::type_info*, TDestructorHolder > Map_t;
00058 Map_t m_types;
00059
00060 };
00061
00062 }
00063
00064
00065 #include "TDestructorRegistry.icc"
00066
00067 #endif // XAODROOTACCESS_TOOLS_TDESTRUCTORREGISTRY_H