Back to index

im-sdk  12.3.91
IMSignal.hh
Go to the documentation of this file.
00001 #ifndef IMSIGNAL_HH_
00002 #define IMSIGNAL_HH_
00003 
00004 #include <config.h>
00005 #include <map>
00006 #include "basictype.hh"
00007 
00008 class IMSvr;
00009 
00010 class IMSignal;
00011 
00012 typedef RETSIGTYPE (IMSignal::*IMSignal_handler)();
00013 
00014 extern "C" RETSIGTYPE signal_handler(int);
00015 
00016 typedef map<int, IMSignal_handler> IMSignalHandlerMap;
00017 
00018 /* singlton class */
00019 class IMSignal
00020 {
00021     static IMSignal *psinst;
00022     IMSvr *psvr;
00023     IMSignalHandlerMap hmap;
00024 
00025     RETSIGTYPE sighup();
00026     RETSIGTYPE term();
00027     RETSIGTYPE segv();
00028     RETSIGTYPE abrt();
00029     RETSIGTYPE trap();
00030     RETSIGTYPE fpe();
00031     RETSIGTYPE bus();
00032     RETSIGTYPE _segv(int num);
00033 
00034     IMSignal_handler getfunc(int);
00035 
00036     void add(
00037        int signum,
00038        IMSignal_handler h
00039     );
00040     void ignore(
00041        int signum
00042     );
00043     IMSignal(
00044        IMSvr *pimsvr
00045     );
00046   public:
00047     static IMSignal* get_instance()
00048     { return psinst; }
00049     static IMSignal* construct(
00050        IMSvr *pimsvr
00051     );
00052     static void cleanup()
00053     {
00054        if (psinst) delete psinst;
00055        psinst = NULL;
00056     }
00057 
00058   friend void signal_handler(int);
00059 };
00060 
00061 #endif /* not IMSIGNAL_HH_ */
00062 
00063 /* Local Variables: */
00064 /* c-file-style: "iiim-project" */
00065 /* End: */
00066