File indexing completed on 2025-04-19 09:09:54
0001 #ifndef ATOOLS_Org_Terminator_Objects_H
0002 #define ATOOLS_Org_Terminator_Objects_H
0003
0004 #include <vector>
0005 #include <string>
0006
0007 namespace ATOOLS {
0008
0009 class Exception;
0010
0011 class Terminator_Object {
0012
0013 protected:
0014
0015 virtual bool ReadInStatus(const std::string &path)
0016 {return true;}
0017
0018 virtual void PrepareTerminate() {}
0019
0020 friend class Terminator_Object_Handler;
0021
0022 public:
0023
0024 virtual ~Terminator_Object() {}
0025
0026 };
0027
0028 class Terminator_Object_Handler {
0029
0030 private:
0031
0032 bool m_noremove;
0033
0034 unsigned int m_nbus, m_nsegv, m_stacktraces;
0035
0036 typedef void (*Terminator_Function)(void);
0037
0038 std::vector<Terminator_Function> m_terminatorfunctions;
0039 std::vector<Terminator_Object*> m_terminatorobjects;
0040
0041 friend class Exception;
0042
0043 public:
0044
0045 Terminator_Object_Handler();
0046
0047 ~Terminator_Object_Handler();
0048
0049 bool ReadInStatus(const std::string &path);
0050 void PrepareTerminate();
0051
0052 void HandleSignal(int signal);
0053 void Terminate(unsigned int excode);
0054
0055 void AddTerminatorFunction(void (*function)(void));
0056 void AddTerminatorObject(Terminator_Object *const object);
0057
0058 void RemoveTerminatorFunction(void (*function)(void));
0059 void RemoveTerminatorObject(Terminator_Object *const object);
0060
0061 };
0062
0063 extern Terminator_Object_Handler *exh;
0064
0065 void HandleSignal(int signal);
0066 void Terminate();
0067
0068 }
0069
0070 #endif