source: Revenant/marslib/include/mars_events.h

port/mars-tycoon
Last change on this file was 80a6a52, checked in by Jonathan Neufeld <support@…>, 3 years ago

Get to a compile state for terrain procedural generation

  • Property mode set to 100755
File size: 1.5 KB
Line 
1#ifndef __MARSEVENTS_H__
2#define __MARSEVENTS_H__
3
4#include <set>
5
6namespace mars
7{
8 template< class L >
9 class Observable
10 {
11 public:
12 inline void addListener (L * const pListener) { _listeners.insert(pListener); }
13 inline void removeListener (L * const pListener) { _listeners.erase(pListener); }
14
15 protected:
16#define WALK_LISTENERS(fn) \
17 for (typename std::set< L * >::iterator i = _listeners.begin(); i != _listeners.end(); ++i) \
18 ((*i)->*fn)
19
20 template< typename Fn, typename A1 >
21 void fire (Fn fn, A1 a1)
22 {
23 WALK_LISTENERS(fn)(a1);
24 }
25 template< typename Fn, typename A1, typename A2 >
26 void fire (Fn fn, A1 a1, A2 a2)
27 {
28 WALK_LISTENERS(fn)(a1, a2);
29 }
30 template< typename Fn, typename A1, typename A2, typename A3 >
31 void fire (Fn fn, A1 a1, A2 a2, A3 a3)
32 {
33 WALK_LISTENERS(fn)(a1, a2, a3);
34 }
35 template< typename Fn, typename A1, typename A2, typename A3, typename A4 >
36 void fire (Fn fn, A1 a1, A2 a2, A3 a3, A4 a4)
37 {
38 WALK_LISTENERS(fn)(a1, a2, a3, a4);
39 }
40 template< typename Fn, typename A1, typename A2, typename A3, typename A4, typename A5 >
41 void fire (Fn fn, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
42 {
43 WALK_LISTENERS(fn)(a1, a2, a3, a4, a5);
44 }
45 template< typename Fn, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
46 void fire (Fn fn, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
47 {
48 WALK_LISTENERS(fn)(a1, a2, a3, a4, a5, a6);
49 }
50
51 private:
52 std::set< L * > _listeners;
53 };
54}
55
56#endif // __MARSEVENTS_H__
Note: See TracBrowser for help on using the repository browser.