OpenRTM-aist  2.1.0
PortConnectListener.h
[詳解]
1 // -*- C++ -*-
19 #ifndef RTC_PORTCONNECTLISTENER_H
20 #define RTC_PORTCONNECTLISTENER_H
21 
22 #include <mutex>
23 #include <rtm/RTC.h>
24 #include <rtm/idl/RTCSkel.h>
25 
26 #include <vector>
27 #include <utility>
28 #include <array>
29 
30 namespace RTC
31 {
32  //============================================================
50  enum class PortConnectListenerType : uint8_t
51  {
56  };
57 
84  {
85  public:
109  static const char* toString(PortConnectListenerType type);
110 
119 
135  virtual void operator()(const char* portname,
136  RTC::ConnectorProfile& profile) = 0;
137  };
138 
139 
140  //============================================================
162  enum class PortConnectRetListenerType : uint8_t
163  {
167  ON_CONNECTED,
171  };
172 
204  {
205  public:
229  static const char* toString(PortConnectRetListenerType type);
230 
239 
255  virtual void operator()(const char* portname,
256  RTC::ConnectorProfile& profile,
257  ReturnCode_t ret) = 0;
258  };
259 
260  //============================================================
278  {
279  using Entry = std::pair<PortConnectListener*, bool>;
280  public:
289 
298 
320  void addListener(PortConnectListener* listener, bool autoclean);
321 
340 
358  void notify(const char* portname, RTC::ConnectorProfile& profile);
359 
360  private:
361  std::vector<Entry> m_listeners;
362  std::mutex m_mutex;
363  };
364 
365 
383  {
384  using Entry = std::pair<PortConnectRetListener*, bool>;
385  public:
394 
403 
425  void addListener(PortConnectRetListener* listener, bool autoclean);
426 
445 
465  void notify(const char* portname, RTC::ConnectorProfile& profile,
466  ReturnCode_t ret);
467 
468  private:
469  std::vector<Entry> m_listeners;
470  std::mutex m_mutex;
471  };
472 
487  {
488  public:
530  bool addListener(PortConnectListenerType type, PortConnectListener* listener, bool autoclean=true);
579  bool addListener(PortConnectRetListenerType type, PortConnectRetListener* listener, bool autoclean=true);
625  inline bool notify(PortConnectListenerType type, const char* portname, RTC::ConnectorProfile& profile)
626  {
627  if (static_cast<uint8_t>(type) < portconnect_.size())
628  {
629  portconnect_[static_cast<uint8_t>(type)].notify(portname, profile);
630  return true;
631  }
632  return false;
633  }
658  inline bool notify(PortConnectRetListenerType type, const char* portname, RTC::ConnectorProfile& profile,
659  ReturnCode_t ret)
660  {
661  if (static_cast<uint8_t>(type) < portconnret_.size())
662  {
663  portconnret_[static_cast<uint8_t>(type)].notify(portname, profile, ret);
664  return true;
665  }
666  return false;
667  }
668 
669  private:
679  std::array<PortConnectListenerHolder,
680  static_cast<uint8_t>
682  portconnect_;
692  std::array<PortConnectRetListenerHolder,
693  static_cast<uint8_t>
695  portconnret_;
696  };
697 
698 
699 } // namespace RTC
700 
701 #endif // RTC_PORTCONNECTLISTENER_H
RTComponent header
PortConnectListener ホルダクラス
Definition: PortConnectListener.h:278
PortConnectListenerHolder()
コンストラクタ
void notify(const char *portname, RTC::ConnectorProfile &profile)
リスナーへ通知する
void removeListener(PortConnectListener *listener)
リスナーの削除
virtual ~PortConnectListenerHolder()
デストラクタ
void addListener(PortConnectListener *listener, bool autoclean)
リスナーの追加
PortConnectListener クラス
Definition: PortConnectListener.h:84
virtual ~PortConnectListener()
デストラクタ
virtual void operator()(const char *portname, RTC::ConnectorProfile &profile)=0
仮想コールバック関数
static const char * toString(PortConnectListenerType type)
PortConnectListenerType を文字列に変換
PortConnectListeners クラス
Definition: PortConnectListener.h:487
~PortConnectListeners()
デストラクタ
bool removeListener(PortConnectListenerType type, PortConnectListener *listener)
リスナーの削除
PortConnectListeners()
コンストラクタ
bool removeListener(PortConnectRetListenerType type, PortConnectRetListener *listener)
リスナーの削除
bool notify(PortConnectListenerType type, const char *portname, RTC::ConnectorProfile &profile)
リスナーへ通知する
Definition: PortConnectListener.h:625
bool notify(PortConnectRetListenerType type, const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
リスナーへ通知する
Definition: PortConnectListener.h:658
bool addListener(PortConnectRetListenerType type, PortConnectRetListener *listener, bool autoclean=true)
リスナーの追加
bool addListener(PortConnectListenerType type, PortConnectListener *listener, bool autoclean=true)
リスナーの追加
PortConnectRetListener ホルダクラス
Definition: PortConnectListener.h:383
void notify(const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
リスナーへ通知する
void addListener(PortConnectRetListener *listener, bool autoclean)
リスナーの追加
virtual ~PortConnectRetListenerHolder()
デストラクタ
void removeListener(PortConnectRetListener *listener)
リスナーの削除
PortConnectRetListenerHolder()
コンストラクタ
PortConnectRetListener クラス
Definition: PortConnectListener.h:204
virtual ~PortConnectRetListener()
デストラクタ
virtual void operator()(const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)=0
仮想コールバック関数
static const char * toString(PortConnectRetListenerType type)
PortConnectRetListenerType を文字列に変換
RTコンポーネント
PortConnectListenerType
PortConnectListener のタイプ
Definition: PortConnectListener.h:51
PortConnectRetListenerType
PortConnectRetListenerType のタイプ
Definition: PortConnectListener.h:163