A first pass at implementing thread stop and continue on FreeBSD.
[dyninst.git] / proccontrol / h / EventType.h
1 #if !defined(EVENTTYPE_H_)
2 #define EVENTTYPE_H_
3
4 namespace Dyninst {
5 namespace ProcControlAPI {
6
7 class EventType
8 {
9  public:
10    static const int Error               = -1;
11    static const int Unset               = 0;
12    static const int Exit                = 1;
13    static const int Crash               = 2;
14    static const int Fork                = 3;
15    static const int Exec                = 4;
16    static const int ThreadCreate        = 5;
17    static const int ThreadDestroy       = 6;
18    static const int Stop                = 7;
19    static const int Signal              = 8;
20    static const int LibraryLoad         = 9;
21    static const int LibraryUnload       = 10;
22    static const int Bootstrap           = 11;
23    static const int Breakpoint          = 12;
24    static const int RPC                 = 13;
25    static const int SingleStep          = 14;
26    static const int Library             = 15;
27
28    //Users do not recieve CBs for the below event types--ProcControlAPI internal
29    static const int InternalEvents      = 500;
30    static const int BreakpointClear     = 500;
31    static const int Continue            = 501;
32
33    //Users should define their own events at this value or higher.
34    static const int MaxProcCtrlEvent    = 1000;
35    typedef int Code;
36
37    typedef enum {
38       Pre = 0,
39       Post,
40       None,
41       Any
42    } Time;
43
44    Code code() const { return ecode; }
45    Time time() const { return etime; }
46
47    EventType(Code e) : ecode(e), etime(Any) {}
48    EventType(Time t, Code e) : ecode(e), etime(t) {}
49    EventType() : ecode(Unset), etime(None) {}
50    
51    std::string name() const;
52  protected:
53    Code ecode;
54    Time etime;
55 };
56
57 struct eventtype_cmp
58 {
59    bool operator()(const EventType &a, const EventType &b)
60    {
61       if (a.code() < b.code()) 
62          return true;
63       if (a.code() > b.code())
64          return false;
65       return ((int) a.time() < (int) b.time());
66    }
67 };
68
69 }
70 }
71
72 #endif