Nymph  v1.5.2
Flow-Based Data Processing Framework
KTSignal.hh
Go to the documentation of this file.
1 /*
2  * KTSignal.hh
3  *
4  * Created on: Jan 15, 2013
5  * Author: nsoblath
6  */
7 
8 #ifndef KTSIGNAL_HH_
9 #define KTSIGNAL_HH_
10 
11 #include "KTProcessor.hh"
12 
13 #include "KTData.hh"
14 
15 #include <boost/signals2.hpp>
16 
17 #include <string>
18 
19 namespace Nymph
20 {
38  template< class XSignalArgument >
40  {
41  public:
42  typedef void (signature)(XSignalArgument);
43  typedef boost::signals2::signal< signature > boost_signal;
44  typedef typename boost::signals2::signal< signature >::slot_type slot_type;
45 
46  public:
48  KTSignalOneArg(const std::string& name, KTProcessor* proc);
49  virtual ~KTSignalOneArg();
50 
51  protected:
53 
54  public:
55  void operator()(XSignalArgument arg);
56 
57  boost_signal* Signal();
58 
59  protected:
60  boost_signal fSignal;
61 
62  };
63 
64 
65  template<>
66  class KTSignalOneArg< void >
67  {
68  public:
69  typedef void (signature)(void);
70  typedef boost::signals2::signal< signature > boost_signal;
71  // the following line is, technically, not valid C++03 code because the 'typename' keyword
72  // is appearing outside of a template (since the template here is fully specified, this counts).
73  // It should compiler with most new-ish compilers, even when compiling under C++03 mode.
74  // It has been tested successfully with GCC 4.6 and Clang 3.1
75  typedef typename boost::signals2::signal< signature >::slot_type slot_type;
76 
77  public:
79  KTSignalOneArg(const std::string& name, KTProcessor* proc);
80  virtual ~KTSignalOneArg();
81 
82  protected:
84 
85  public:
86  void operator()();
87 
88  boost_signal* Signal();
89 
90  protected:
91  boost_signal fSignal;
92 
93  };
94 
95  // convenience typedef for KTSignalDone
97 
98 
99 
119  class KTSignalData : public KTSignalOneArg< KTDataPtr >
120  {
121  public:
122  typedef void (signature)(KTDataPtr);
123  typedef boost::signals2::signal< signature > boost_signal;
124  typedef boost::signals2::signal< signature >::slot_type slot_type;
125 
126  typedef void (ref_signature)(KTDataPtr&);
127  typedef boost::signals2::signal< ref_signature > ref_boost_signal;
128  typedef boost::signals2::signal< ref_signature >::slot_type ref_slot_type;
129 
130  public:
131  KTSignalData();
132  KTSignalData(const std::string& name, KTProcessor* proc);
133  virtual ~KTSignalData();
134 
135  protected:
136  KTSignalData(const KTSignalData&);
137 
138  public:
139  void operator()(KTDataPtr arg);
140 
141  ref_boost_signal* RefSignal();
142 
143  protected:
144  ref_boost_signal fRefSignal;
145  };
146 
147 
148 
149  template< class XSignalArgument >
151  fSignal()
152  {
153  proc->RegisterSignal(name, &fSignal);
154  }
155 
156  template< class XSignalArgument >
158  fSignal()
159  {}
160 
161  template< class XSignalArgument >
163  fSignal()
164  {}
165 
166  template< class XSignalArgument >
168  {
169  }
170 
171  template< class XSignalArgument >
172  inline void KTSignalOneArg< XSignalArgument >::operator()(XSignalArgument arg)
173  {
174  fSignal(arg);
175  }
176 
177  template< class XSignalArgument >
179  {
180  return &fSignal;
181  }
182 
183 
185  {
186  fSignal();
187  }
188 
190  {
191  return &fSignal;
192  }
193 
194 
195  inline void KTSignalData::operator()(KTDataPtr arg)
196  {
197  fSignal(arg);
198  fRefSignal(arg);
199  }
200 
201  inline typename KTSignalData::ref_boost_signal* KTSignalData::RefSignal()
202  {
203  return &fRefSignal;
204  }
205 
206 } /* namespace Nymph */
207 #endif /* KTSIGNAL_HH_ */
KTSignalOneArg< void > KTSignalDone
Definition: KTSignal.hh:96
ref_boost_signal fRefSignal
Definition: KTSignal.hh:144
boost::signals2::signal< signature > boost_signal
Definition: KTSignal.hh:123
boost_signal fSignal
Definition: KTSignal.hh:60
boost::signals2::signal< ref_signature > ref_boost_signal
Definition: KTSignal.hh:127
boost::signals2::signal< signature > boost_signal
Definition: KTSignal.hh:43
boost::signals2::signal< signature >::slot_type slot_type
Definition: KTSignal.hh:75
boost::signals2::signal< signature >::slot_type slot_type
Definition: KTSignal.hh:44
Contains KTProcessor.
boost_signal * Signal()
Definition: KTSignal.hh:178
Creates a signal that takes a KTDataPtr object as its argument.
Definition: KTSignal.hh:119
Creates a signal that takes a single argument.
Definition: KTSignal.hh:39
void operator()(XSignalArgument arg)
Definition: KTSignal.hh:172
void() signature(XSignalArgument)
Definition: KTSignal.hh:42
boost::signals2::signal< signature >::slot_type slot_type
Definition: KTSignal.hh:124
boost::shared_ptr< KTData > KTDataPtr
Definition: KTData.hh:67
void RegisterSignal(std::string name, XProcessor *signalPtr)
boost::signals2::signal< signature > boost_signal
Definition: KTSignal.hh:70
boost::signals2::signal< ref_signature >::slot_type ref_slot_type
Definition: KTSignal.hh:128
virtual ~KTSignalOneArg()
Definition: KTSignal.hh:167