Update README.md
[nemesis.git] / Platform / Event.h
1 /*
2  Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.
3
4  Governed by the TrueCrypt License 3.0 the full text of which is contained in
5  the file License.txt included in TrueCrypt binary and source code distribution
6  packages.
7 */
8
9 #ifndef TC_HEADER_Platform_Event
10 #define TC_HEADER_Platform_Event
11
12 #include "PlatformBase.h"
13 #include "ForEach.h"
14 #include "Mutex.h"
15 #include "SharedPtr.h"
16
17 namespace TrueCrypt
18 {
19         struct EventArgs
20         {
21                 virtual ~EventArgs () { }
22         };
23
24         class EventConnectorBase
25         {
26         public:
27                 virtual ~EventConnectorBase () { }
28                 virtual void operator() (EventArgs &args) = 0;
29
30                 virtual EventConnectorBase *CloneNew () const = 0;
31                 virtual void *GetHandler () const = 0;
32         };
33
34         typedef list < shared_ptr <EventConnectorBase> > EventHandlerList;
35
36         template <class T>
37         class EventConnector : public EventConnectorBase
38         {
39         public:
40                 typedef void (T::*EventHandlerFunction) (EventArgs &);
41
42                 EventConnector (T *handler, EventHandlerFunction function)
43                         : Handler (handler), Function (function) { }
44
45                 virtual void operator() (EventArgs &args) { (Handler->*Function) (args); }
46
47                 virtual EventConnectorBase *CloneNew () const { return new EventConnector <T> (*this); }
48                 virtual void *GetHandler () const { return Handler; }
49
50         protected:
51                 T *Handler;
52                 EventHandlerFunction Function;
53         };
54
55         class Event
56         {
57         public:
58                 Event () { }
59                 virtual ~Event () { }
60
61                 void Connect (const EventConnectorBase &connector);
62                 void Disconnect (void *handler);
63                 void Raise ();
64                 void Raise (EventArgs &args);
65
66         protected:
67                 EventHandlerList ConnectedHandlers;
68                 Mutex HandlersMutex;
69
70         private:
71                 Event (const Event &);
72                 Event &operator= (const Event &);
73         };
74
75         struct ExceptionEventArgs : public EventArgs
76         {
77                 ExceptionEventArgs (exception &ex) : mException (ex) { }
78                 exception &mException;
79
80         private:
81                 ExceptionEventArgs (const ExceptionEventArgs &);
82                 ExceptionEventArgs &operator= (const ExceptionEventArgs &);
83         };
84 }
85
86 #endif // TC_HEADER_Platform_Event
This page took 0.039504 seconds and 3 git commands to generate. Download a nemesis OSX (sierra+high sierra, tested/working) binary, with fuse-ext3 via e2fsprogs, at this link. application and installer are signed by screwjack, llc. must install fuse with macFUSE layer first.