]> icculus.org git repositories - divverent/netradiant.git/blob - libs/signal/signalfwd.h
initial
[divverent/netradiant.git] / libs / signal / signalfwd.h
1
2 #if !defined(INCLUDED_SIGNALFWD_H)
3 #define INCLUDED_SIGNALFWD_H
4
5 class SignalHandler;
6 template<typename FirstArgument>
7 class SignalHandler1;
8 template<typename FirstArgument, typename SecondArgument>
9 class SignalHandler2;
10 template<typename FirstArgument, typename SecondArgument, typename ThirdArgument>
11 class SignalHandler3;
12
13 template<typename Context>
14 class Opaque;
15
16 ///\brief A pointer that always has a well-defined value.
17 /// If no value is specified, the appropriate null value is used.
18 template<typename Type>
19 class Handle
20 {
21   Type* p;
22 public:
23   Handle() : p(0)
24   {
25   }
26   explicit Handle(Type* p) : p(p)
27   {
28   }
29   Type* get() const
30   {
31     return p;
32   }
33   bool isNull() const
34   {
35     return p == 0;
36   }
37 };
38
39 template<typename Handler>
40 class SignalFwd
41 {
42 public:
43   typedef Handle< Opaque<Handler> > handler_id_type;
44 };
45
46 typedef SignalFwd<SignalHandler>::handler_id_type SignalHandlerId;
47
48 #endif