/usr/include/root/TSysEvtHandler.h is in libroot-core-dev 5.34.19+dfsg-1.2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | // @(#)root/base:$Id$
// Author: Fons Rademakers 16/09/95
/*************************************************************************
* Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TSysEvtHandler
#define ROOT_TSysEvtHandler
//////////////////////////////////////////////////////////////////////////
// //
// TSysEvtHandler //
// //
// Abstract base class for handling system events. //
// //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TObject
#include "TObject.h"
#endif
#ifndef ROOT_TQObject
#include "TQObject.h"
#endif
class TSysEvtHandler : public TObject, public TQObject {
private:
Bool_t fIsActive; // kTRUE if handler is active, kFALSE if not active
void *GetSender() { return this; } //used to set gTQSender
public:
TSysEvtHandler() : fIsActive(kTRUE) { }
virtual ~TSysEvtHandler() { }
void Activate();
void DeActivate();
Bool_t IsActive() const { return fIsActive; }
virtual void Add() = 0;
virtual void Remove() = 0;
virtual Bool_t Notify() = 0;
virtual void Activated() { Emit("Activated()"); } //*SIGNAL*
virtual void DeActivated() { Emit("DeActivated()"); } //*SIGNAL*
virtual void Notified() { Emit("Notified()"); } //*SIGNAL*
virtual void Added() { Emit("Added()"); } //*SIGNAL*
virtual void Removed() { Emit("Removed()"); } //*SIGNAL*
ClassDef(TSysEvtHandler,0) //ABC for handling system events
};
//////////////////////////////////////////////////////////////////////////
// //
// TFileHandler //
// //
// Handles events on file descriptors. //
// //
//////////////////////////////////////////////////////////////////////////
class TFileHandler : public TSysEvtHandler {
protected:
int fFileNum; //File descriptor
int fMask; //Event interest mask, either bit 1 (read), 2 (write) or both can be set
int fReadyMask; //Readiness mask, either bit 1 (read), 2 (write) or both can be set
TFileHandler(): fFileNum(-1), fMask(0), fReadyMask(0) { }
public:
enum { kRead = 1, kWrite = 2 };
TFileHandler(int fd, int mask);
virtual ~TFileHandler() { Remove(); }
int GetFd() const { return fFileNum; }
void SetFd(int fd) { fFileNum = fd; }
virtual Bool_t Notify();
virtual Bool_t ReadNotify();
virtual Bool_t WriteNotify();
virtual Bool_t HasReadInterest();
virtual Bool_t HasWriteInterest();
virtual void SetInterest(Int_t mask);
virtual void ResetReadyMask() { fReadyMask = 0; }
virtual void SetReadReady() { fReadyMask |= 0x1; }
virtual void SetWriteReady() { fReadyMask |= 0x2; }
virtual Bool_t IsReadReady() const { return (fReadyMask & 0x1) == 0x1; }
virtual Bool_t IsWriteReady() const { return (fReadyMask & 0x2) == 0x2; }
virtual void Add();
virtual void Remove();
ClassDef(TFileHandler,0) //Handles events on file descriptors
};
//////////////////////////////////////////////////////////////////////////
// //
// TSignalHandler //
// //
// Handles signals. //
// //
//////////////////////////////////////////////////////////////////////////
enum ESignals {
kSigBus,
kSigSegmentationViolation,
kSigSystem,
kSigPipe,
kSigIllegalInstruction,
kSigQuit,
kSigInterrupt,
kSigWindowChanged,
kSigAlarm,
kSigChild,
kSigUrgent,
kSigFloatingException,
kSigTermination,
kSigUser1,
kSigUser2
};
class TSignalHandler : public TSysEvtHandler {
protected:
ESignals fSignal; //Signal to be handled
Bool_t fSync; //Synchronous or a-synchronous signal
Int_t fDelay; //Delay handling of signal (use fDelay in Notify())
TSignalHandler(): fSignal((ESignals)-1), fSync(kTRUE), fDelay(0) { }
public:
TSignalHandler(ESignals sig, Bool_t sync = kTRUE);
virtual ~TSignalHandler() { Remove(); }
void Delay() { fDelay = 1; }
void HandleDelayedSignal();
ESignals GetSignal() const { return fSignal; }
void SetSignal(ESignals sig) { fSignal = sig; }
Bool_t IsSync() const { return fSync; }
Bool_t IsAsync() const { return !fSync; }
virtual Bool_t Notify();
virtual void Add();
virtual void Remove();
ClassDef(TSignalHandler,0) //Signal event handler
};
inline void TSignalHandler::HandleDelayedSignal()
{
if (fDelay > 1) {
fDelay = 0;
Notify();
} else
fDelay = 0;
}
//////////////////////////////////////////////////////////////////////////
// //
// TStdExceptionHandler //
// //
// Handles standard C++ exceptions. //
// //
//////////////////////////////////////////////////////////////////////////
namespace std { class exception; }
class TStdExceptionHandler : public TSysEvtHandler {
public:
enum EStatus { kSEProceed, kSEHandled, kSEAbort };
TStdExceptionHandler();
virtual ~TStdExceptionHandler() { }
virtual void Add();
virtual void Remove();
virtual Bool_t Notify();
virtual EStatus Handle(std::exception& exc) = 0;
ClassDef(TStdExceptionHandler,0) //C++ exception handler
};
#endif
|