00001 #ifndef CLEANUP_H_ 00002 #define CLEANUP_H_ 00003 00004 #include "mythmetaexp.h" 00005 00006 class META_PUBLIC CleanupProc 00007 { 00008 public: 00009 virtual void doClean() = 0; 00010 virtual ~CleanupProc(); 00011 }; 00012 00013 class META_PUBLIC CleanupHooks 00014 { 00015 public: 00016 static CleanupHooks *getInstance(); 00017 00018 public: 00019 void addHook(CleanupProc *clean_proc); 00020 void removeHook(CleanupProc *clean_proc); 00021 void cleanup(); 00022 00023 private: 00024 CleanupHooks(); 00025 ~CleanupHooks(); 00026 class CleanupHooksImp *m_imp; 00027 }; 00028 00029 template <typename T> 00030 class META_PUBLIC SimpleCleanup : public CleanupProc 00031 { 00032 public: 00033 SimpleCleanup(T *inst) : m_inst(inst) 00034 { 00035 CleanupHooks::getInstance()->addHook(this); 00036 } 00037 00038 ~SimpleCleanup() 00039 { 00040 CleanupHooks::getInstance()->removeHook(this); 00041 } 00042 00043 void doClean() 00044 { 00045 m_inst->cleanup(); 00046 } 00047 00048 private: 00049 T *m_inst; 00050 }; 00051 00052 #endif // CLEANUP_H_
1.6.3