libqi-api  2.4.3.28
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
signalspy.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #ifndef _QI_SIGNALHELPER_HPP_
4 #define _QI_SIGNALHELPER_HPP_
5 
6 #include <qi/signal.hpp>
7 #include <qi/anyobject.hpp>
8 #include <qi/trackable.hpp>
9 
10 namespace qi
11 {
12 
13 class SignalSpy: public qi::Trackable<SignalSpy>
14 {
15 public:
16  template <typename T>
18  : qi::Trackable<SignalSpy>(this)
19  , counter(0)
20  {
21  signal.connect(&SignalSpy::counterCallback, this);
22  }
23 
24  SignalSpy(qi::AnyObject& object, const std::string& signalName)
25  : qi::Trackable<SignalSpy>(this)
26  , counter(0)
27  {
28  object.connect(signalName,
29  qi::AnyFunction::fromDynamicFunction(qi::bind<qi::AnyReference(const qi::AnyReferenceVector&)>(&SignalSpy::counterCallback, this)));
30  }
31 
33  {
34  destroy();
35  }
36 
37  int getCounter() const
38  {
39  return *counter;
40  }
41 
42 private:
43  qi::Atomic<int> counter;
44 
45  qi::AnyReference counterCallback()
46  {
47  ++counter;
48  return qi::AnyReference(qi::typeOf<void>());
49  }
50 };
51 }
52 
53 #endif
int getCounter() const
Definition: signalspy.hpp:37
boost::function< RF > bind(const AF &fun,...)
SignalSpy(SignalF< T > &signal)
Definition: signalspy.hpp:17
SignalSubscriber & connect(...)
Definition: signal.hxx:69
std::vector< AnyReference > AnyReferenceVector
SignalSpy(qi::AnyObject &object, const std::string &signalName)
Definition: signalspy.hpp:24
static AnyFunction fromDynamicFunction(DynamicFunction f)
Object tracking by blocking destruction while shared pointers are present.
Definition: trackable.hpp:42