source: trunk/src/halSignaler.hpp @ 564

Revision 564, 1.4 KB checked in by Eoin, 12 years ago (diff)

Added win32_exception class.

Line 
1
2#pragma once
3
4#include <boost/signal.hpp>
5
6#include "halEvent.hpp"
7
8namespace hal
9{
10
11struct signaler_wrapper : public boost::signals::trackable
12{
13        signaler_wrapper(boost::function<bool ()> f) :
14                f_(f)
15        {
16                HAL_DEV_MSG(L"signaler_wrapper ctor");
17        }
18
19        void operator()() 
20        {
21                HAL_DEV_MSG(L"signaler_wrapper operator()");
22
23                if (f_())
24                {
25                //      HAL_DEV_MSG(L"Disconnecting");
26                //      delete this;
27                }
28        }
29
30private:
31        boost::function<bool ()> f_;
32};
33
34struct once
35{
36        template<typename S>
37        once(S& s, boost::function<void ()> f) :
38                f_(f)
39        {
40                c_ = s.connect(*this);
41                HAL_DEV_MSG(L"Once ctor");
42        }
43
44        void operator()() 
45        {
46                HAL_DEV_MSG(L"Once");
47
48                f_();
49               
50                HAL_DEV_MSG(L"Once disconnecting");
51
52                c_.disconnect();
53        }
54
55        boost::function<void ()> f_;
56        boost::signals::connection c_;
57};
58
59template<typename S=boost::signal<void()> >
60class signaler
61{
62public:
63
64        void connect_repeat(const typename S::slot_type& slot)
65        {
66                HAL_DEV_MSG(L"connect_repeat");
67                repeat_.connect(slot);
68        }
69
70        void connect_once(const typename S::slot_type& slot)
71        {
72                HAL_DEV_MSG(L"connect_once");
73                once_.connect(slot);
74        }
75
76        void operator()() 
77        {
78                HAL_DEV_MSG(L"operator()");
79                repeat_();
80
81                once_();
82                once_.disconnect_all_slots();
83                HAL_DEV_MSG(L"Once disconnected");
84        }       
85
86        void disconnect_all_once()
87        {
88                once_.disconnect_all_slots();
89                HAL_DEV_MSG(L"All disconnected");
90        }
91
92private:
93        S repeat_;
94        S once_;
95};
96
97}
Note: See TracBrowser for help on using the repository browser.