OpenRTM-aist  2.1.0
PeriodicECSharedComposite.h
Go to the documentation of this file.
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 class.
Definition: SystemLogger.h:101
Manager class.
Definition: Manager.h:91
PeriodicECSharedComposite class.
Definition: PeriodicECSharedComposite.h:462
void deactivateChildComp(const RTC::RTObject_ptr rtobj)
~PeriodicECSharedComposite() override
Destructor.
void activateChildComp(const RTC::RTObject_ptr rtobj)
ReturnCode_t onReset(RTC::UniqueId exec_handle) override
Callback function to reset.
ReturnCode_t onInitialize() override
Initialization.
SDOPackage::PeriodicECOrganization * m_org
Reference of Organization.
Definition: PeriodicECSharedComposite.h:666
OpenRTM::DataFlowComponent_var m_ref
Reference of object.
Definition: PeriodicECSharedComposite.h:658
ReturnCode_t onActivated(RTC::UniqueId exec_handle) override
Callback function to activate.
std::vector< std::string > m_members
Components.
Definition: PeriodicECSharedComposite.h:649
ReturnCode_t onDeactivated(RTC::UniqueId exec_handle) override
Callback function to deactivate.
ReturnCode_t exit() override
void resetChildComp(const RTC::RTObject_ptr rtobj)
PeriodicECSharedComposite(Manager *manager)
Constructor.
ReturnCode_t onFinalize() override
[ComponentAction CORBA interface] Finalize RTC
RT-Component class.
Definition: RTObject.h:93
Organization implementation class.
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 class.
Definition: PeriodicECSharedComposite.h:68
void removeParticipantFromEC(Member &member)
Remove participant DFC from CompositeRTC's ExecutionContext.
void removePort(Member &member, PortList &portlist)
Remove delegated participatns's ports from the composite.
::CORBA::Boolean remove_member(const char *id) override
[CORBA interface] Remove a member of Organization
::RTC::RTObject_impl * m_rtobj
RT Object.
Definition: PeriodicECSharedComposite.h:304
PortList m_expPorts
Port List.
Definition: PeriodicECSharedComposite.h:400
static void startOwnedEC(Member &member)
Start Owned ExecutionContexts.
void addParticipantToEC(Member &member)
Set CompositeRTC's ExecutionContext to the given DFC.
::CORBA::Boolean add_members(const SDOList &sdo_list) override
[CORBA interface] Add Organization member
std::vector< Member > m_rtcMembers
Member list.
Definition: PeriodicECSharedComposite.h:390
void removeOrganizationFromTarget(Member &member)
Remove Organization object from a target DFC.
::RTC::ExecutionContext_var m_ec
ExecutionContext Object reference.
Definition: PeriodicECSharedComposite.h:313
void removeAllMembers()
Remove a member of Organization.
std::vector< Member >::iterator MemIt
Definition: PeriodicECSharedComposite.h:391
static bool sdoToDFC(SDO_ptr sdo, ::OpenRTM::DataFlowComponent_ptr &dfc)
Conversion from SDO to DFC.
RTC::Logger rtclog
Logger stream.
Definition: PeriodicECSharedComposite.h:295
static void print(const PortList &p)
Output PortList to StandardOutput.
Definition: PeriodicECSharedComposite.h:409
PeriodicECOrganization(::RTC::RTObject_impl *rtobj, SDOSystemElement_ptr sdo)
Constructor.
void addOrganizationToTarget(Member &member)
Set Organization object to target DFC.
void addPort(Member &member, PortList &portlist)
Delegate given RTC's ports to the Composite.
void updateDelegatedPorts()
Update/Remove a member of Organization.
~PeriodicECOrganization() override
Destructor.
void addRTCToEC(RTC::RTObject_ptr rtobj)
::CORBA::Boolean set_members(const SDOList &sdo_list) override
[CORBA interface] Set Organization member
static void stopOwnedEC(Member &member)
Stop Owned ExecutionContexts.
void updateExportedPortsList()
PortsList is updated.
RT-Component.
ExecutionContextHandle_t UniqueId
Definition: ComponentActionListener.h:34
SDO Package.
Definition: InPortConsumer.h:35