source: trunk/src/halSignaler.hpp @ 590

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

Supporting the new libtorrent interface to fast resume data. Not yet working!

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