OutPortCorbaProvider.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00020 #ifndef OutPortCorbaProvider_h
00021 #define OutPortCorbaProvider_h
00022 
00023 #include <rtm/idl/DataPortSkel.h>
00024 #include <rtm/BufferBase.h>
00025 #include <rtm/OutPortProvider.h>
00026 
00027 namespace RTC
00028 {
00054   template <class DataType>
00055   class OutPortCorbaProvider
00056     : public OutPortProvider,
00057       public virtual POA_RTC::OutPortAny,
00058       public virtual PortableServer::RefCountServantBase
00059   {
00060   public:
00078     OutPortCorbaProvider(BufferBase<DataType>& buffer)
00079       : m_buffer(buffer)
00080     {
00081       CORBA::Any any_var;
00082       DataType   tmp_var;
00083       any_var <<= tmp_var;
00084       
00085       // PortProfile setting
00086       setDataType(any_var.type()->name());
00087       setInterfaceType("CORBA_Any");
00088       setDataFlowType("Push, Pull");
00089       setSubscriptionType("Flush, New, Periodic");
00090       
00091       // ConnectorProfile setting
00092       m_objref = this->_this();
00093       CORBA_SeqUtil::push_back(m_properties,
00094                                NVUtil::newNV("dataport.corba_any.outport_ref",
00095                                              m_objref));
00096     }
00097     
00111     virtual ~OutPortCorbaProvider()
00112     {}
00113     
00131     CORBA::Any* get()
00132       throw (CORBA::SystemException)
00133     {
00134       DataType data;
00135       m_buffer.read(data);
00136       m_tmp <<= data;
00137       return new CORBA::Any(m_tmp);
00138     }
00139     
00140   private:
00141     BufferBase<DataType>& m_buffer;
00142     OutPortAny_var m_objref;
00143     CORBA::Any m_tmp;
00144   };
00145 };     // namespace RTC
00146 #endif // OutPortCorbaProvider_h

Generated on Thu May 29 15:03:33 2008 for OpenRTM by  doxygen 1.5.3