OpenRTM-aist  2.1.0
PeriodicECSharedComposite.h
[詳解]
1 // -*- C++ -*-
20 #ifndef RTC_PERIODICECSHAREDCOMPOSITE_H
21 #define RTC_PERIODICECSHAREDCOMPOSITE_H
22 
23 #include <rtm/idl/RTCSkel.h>
24 #include <rtm/idl/OpenRTMSkel.h>
25 #include <rtm/RTObject.h>
27 #include <rtm/SdoOrganization.h>
28 #include <coil/stringutil.h>
29 
30 #include <string>
31 #include <utility>
32 #include <vector>
33 
49 namespace SDOPackage
50 {
67  : public Organization_impl
68  {
69  using PortList = std::vector<std::string>;
70 
71  public:
89  explicit PeriodicECOrganization(::RTC::RTObject_impl* rtobj, SDOSystemElement_ptr sdo);
104 
127  ::CORBA::Boolean add_members(const SDOList& sdo_list) override;
128 
152  ::CORBA::Boolean set_members(const SDOList& sdo_list) override;
153 
175  ::CORBA::Boolean remove_member(const char* id) override;
176 
193 
194  protected:
195  class Member;
203  static bool sdoToDFC(SDO_ptr sdo, ::OpenRTM::DataFlowComponent_ptr& dfc);
204 
212  static void stopOwnedEC(Member& member);
213 
221  static void startOwnedEC(Member& member);
222 
231 
240  void addRTCToEC(RTC::RTObject_ptr rtobj);
241 
249  void addParticipantToEC(Member& member);
250 
259 
267  void addPort(Member& member, PortList& portlist);
268 
276  void removePort(Member& member, PortList& portlist);
277 
286 
287  protected:
296 
305 
313  ::RTC::ExecutionContext_var m_ec;
314 
315  class Member
316  {
317  public:
318  explicit Member(RTC::RTObject_ptr rtobj)
319  // : rtobj_(rtobj),
320  // profile_(rtobj->get_component_profile()),
321  // eclist_(rtobj->get_owned_contexts()),
322  // config_(rtobj->get_configuration())
323  {
324  rtobj_ = RTC::RTObject::_duplicate(rtobj);
325  profile_ = rtobj->get_component_profile();
326  eclist_ = rtobj->get_owned_contexts();
327  config_ = rtobj->get_configuration();
328  }
329 
330  virtual ~Member()
331  {
332  /*
333  rtobj_.out();
334  profile_.out();
335  eclist_.out();
336  config_.out();
337  */
338  }
339 
340  Member(const Member& x)
341  // : rtobj_(x.rtobj_),
342  // profile_(x.profile_),
343  // eclist_(x.eclist_),
344  // config_(x.config_)
345  {
346  rtobj_ = x.rtobj_;
347  profile_ = x.profile_;
348  eclist_ = x.eclist_;
349  config_ = x.config_;
350  }
351 
353  {
354  Member tmp(x);
355  tmp.swap(*this);
356  return *this;
357  }
358 //
359  void swap(Member& x)
360  {
361  RTC::RTObject_var rtobj(x.rtobj_);
362  RTC::ComponentProfile_var profile(x.profile_);
363  RTC::ExecutionContextList_var eclist(x.eclist_);
364  SDOPackage::Configuration_var config(x.config_);
365 
366  x.rtobj_ = this->rtobj_;
367  x.profile_ = this->profile_;
368  x.eclist_ = this->eclist_;
369  x.config_ = this->config_;
370 
371  this->rtobj_ = rtobj;
372  this->profile_ = profile;
373  this->eclist_ = eclist;
374  this->config_ = config;
375  }
376 
377  RTC::RTObject_var rtobj_;
378  RTC::ComponentProfile_var profile_;
379  RTC::ExecutionContextList_var eclist_;
380  SDOPackage::Configuration_var config_;
381  };
382 
390  std::vector<Member> m_rtcMembers;
391  using MemIt = std::vector<Member>::iterator;
392 
400  PortList m_expPorts;
401 
409  static void print(const PortList& p)
410  {
411  for (auto & i : p)
412  {
413  std::cout << i << std::endl;
414  }
415  }
416  };
417 } // namespace SDOPackage
418 
419 
434 namespace RTC
435 {
436  class Manager;
437 
461  : public RTObject_impl
462  {
463  public:
481  explicit PeriodicECSharedComposite(Manager* manager);
482 
497 
513  ReturnCode_t onInitialize() override;
545  ReturnCode_t onActivated(RTC::UniqueId exec_handle) override;
546  void activateChildComp(const RTC::RTObject_ptr rtobj);
578  ReturnCode_t onDeactivated(RTC::UniqueId exec_handle) override;
579  void deactivateChildComp(const RTC::RTObject_ptr rtobj);
580 
611  ReturnCode_t onReset(RTC::UniqueId exec_handle) override;
612  void resetChildComp(const RTC::RTObject_ptr rtobj);
637  ReturnCode_t onFinalize() override;
638 
639  ReturnCode_t exit() override;
640 
641  protected:
649  std::vector<std::string> m_members;
650 
658  OpenRTM::DataFlowComponent_var m_ref;
667  }; // class PeriodicECOrganization
668 } // namespace RTC
669 
670 
671 extern "C"
672 {
674 }
675 
676 #endif // RTC_PERIODICECSHAREDCOMPOSITE_H
void PeriodicECSharedCompositeInit(RTC::Manager *manager)
PeriodicExecutionContext class
RT component base class
SDO Organization implementation class
Logger クラス
Definition: SystemLogger.h:101
Manager クラス
Definition: Manager.h:91
PeriodicECSharedComposite クラス
Definition: PeriodicECSharedComposite.h:462
void deactivateChildComp(const RTC::RTObject_ptr rtobj)
~PeriodicECSharedComposite() override
デストラクタ
void activateChildComp(const RTC::RTObject_ptr rtobj)
ReturnCode_t onReset(RTC::UniqueId exec_handle) override
リセット処理用コールバック関数
ReturnCode_t onInitialize() override
初期化
SDOPackage::PeriodicECOrganization * m_org
Organizationのリファレンス
Definition: PeriodicECSharedComposite.h:666
OpenRTM::DataFlowComponent_var m_ref
オブジェクトのリファレンス
Definition: PeriodicECSharedComposite.h:658
ReturnCode_t onActivated(RTC::UniqueId exec_handle) override
活性化処理用コールバック関数
std::vector< std::string > m_members
コンポーネント
Definition: PeriodicECSharedComposite.h:649
ReturnCode_t onDeactivated(RTC::UniqueId exec_handle) override
非活性化処理用コールバック関数
ReturnCode_t exit() override
void resetChildComp(const RTC::RTObject_ptr rtobj)
PeriodicECSharedComposite(Manager *manager)
コンストラクタ
ReturnCode_t onFinalize() override
[ComponentAction CORBA interface] RTC の終了
RTコンポーネントクラス
Definition: RTObject.h:93
SDO Organization 実装クラス
Definition: SdoOrganization.h:74
Definition: PeriodicECSharedComposite.h:316
SDOPackage::Configuration_var config_
Definition: PeriodicECSharedComposite.h:380
RTC::ExecutionContextList_var eclist_
Definition: PeriodicECSharedComposite.h:379
Member & operator=(const Member &x)
Definition: PeriodicECSharedComposite.h:352
RTC::ComponentProfile_var profile_
Definition: PeriodicECSharedComposite.h:378
RTC::RTObject_var rtobj_
Definition: PeriodicECSharedComposite.h:377
virtual ~Member()
Definition: PeriodicECSharedComposite.h:330
Member(RTC::RTObject_ptr rtobj)
Definition: PeriodicECSharedComposite.h:318
void swap(Member &x)
Definition: PeriodicECSharedComposite.h:359
Member(const Member &x)
Definition: PeriodicECSharedComposite.h:340
PeriodicECOrganization クラス
Definition: PeriodicECSharedComposite.h:68
void removeParticipantFromEC(Member &member)
Composite の ExecutionContext から DFC を削除する
void removePort(Member &member, PortList &portlist)
委譲していたポートを削除する
::CORBA::Boolean remove_member(const char *id) override
[CORBA interface] Organizationメンバーを削除する
::RTC::RTObject_impl * m_rtobj
RT オブジェクト
Definition: PeriodicECSharedComposite.h:304
PortList m_expPorts
Port List
Definition: PeriodicECSharedComposite.h:400
static void startOwnedEC(Member &member)
Owned ExecutionContext を起動する
void addParticipantToEC(Member &member)
Composite の ExecutionContext を DFC にセットする
::CORBA::Boolean add_members(const SDOList &sdo_list) override
[CORBA interface] Organizationメンバーを追加する
std::vector< Member > m_rtcMembers
RTCメンバーリスト
Definition: PeriodicECSharedComposite.h:390
void removeOrganizationFromTarget(Member &member)
Organization オブジェクトを DFCから削除する
::RTC::ExecutionContext_var m_ec
ExecutionContext オブジェクトリファレンス
Definition: PeriodicECSharedComposite.h:313
void removeAllMembers()
Organizationメンバーを削除する
std::vector< Member >::iterator MemIt
Definition: PeriodicECSharedComposite.h:391
static bool sdoToDFC(SDO_ptr sdo, ::OpenRTM::DataFlowComponent_ptr &dfc)
SDOからDFCへの変換
RTC::Logger rtclog
ロガーストリーム
Definition: PeriodicECSharedComposite.h:295
static void print(const PortList &p)
PortListを標準出力する。
Definition: PeriodicECSharedComposite.h:409
PeriodicECOrganization(::RTC::RTObject_impl *rtobj, SDOSystemElement_ptr sdo)
コンストラクタ
void addOrganizationToTarget(Member &member)
DFC に Organization オブジェクトを与える
void addPort(Member &member, PortList &portlist)
ポートを委譲する
void updateDelegatedPorts()
Organizationメンバーを更新/削除する
~PeriodicECOrganization() override
デストラクタ
void addRTCToEC(RTC::RTObject_ptr rtobj)
::CORBA::Boolean set_members(const SDOList &sdo_list) override
[CORBA interface] Organizationメンバーをセットする
static void stopOwnedEC(Member &member)
Owned ExecutionContext を停止させる
void updateExportedPortsList()
PortsListを更新する
RTコンポーネント
ExecutionContextHandle_t UniqueId
Definition: ComponentActionListener.h:34
SDO パッケージ
Definition: InPortConsumer.h:35