|
|
1.1 root 1: /*
1.1.1.7 root 2: Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.
1.1 root 3:
1.1.1.8 ! root 4: Governed by the TrueCrypt License 3.0 the full text of which is contained in
1.1.1.7 root 5: the file License.txt included in TrueCrypt binary and source code distribution
6: packages.
1.1 root 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:
1.1.1.4 root 75: struct ExceptionEventArgs : public EventArgs
1.1 root 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 archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.