Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

DataOutPort.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00020 /*
00021  * $Log: DataOutPort.h,v $
00022  * Revision 1.5  2007/01/14 22:57:54  n-ando
00023  * A bug fix about template argument for buffer-type in constructor.
00024  *
00025  * Revision 1.4  2007/01/12 14:30:01  n-ando
00026  * A trivial bug fix.
00027  *
00028  * Revision 1.3  2007/01/06 17:44:11  n-ando
00029  * The behavior on notify_connect() and notify_disconnect() are now
00030  * implemented in protected functions(ex. publisherInterfaces()).
00031  *
00032  * Revision 1.2  2006/12/02 18:29:15  n-ando
00033  * Now OutPortCorbaProvider and InPortCorbaConsumer are used.
00034  *
00035  * Revision 1.1  2006/11/27 09:44:37  n-ando
00036  * The first commitment.
00037  *
00038  *
00039  */
00040 
00041 #ifndef DataOutPort_h
00042 #define DataOutPort_h
00043 
00044 
00045 #include <rtm/PortBase.h>
00046 #include <rtm/BufferBase.h>
00047 #include <rtm/OutPortCorbaProvider.h>
00048 #include <rtm/InPortCorbaConsumer.h>
00049 #include <rtm/OutPort.h>
00050 #include <rtm/NVUtil.h>
00051 #include <rtm/PublisherFactory.h>
00052 
00053 namespace RTC
00054 {
00064   class DataOutPort
00065     : public PortBase
00066   {
00067   public:
00075     template <class DataType, template <class DataType> class Buffer>
00076     DataOutPort(const char* name, OutPort<DataType, Buffer>& outport)
00077       : PortBase(name), m_outport(outport)
00078     {
00079       // PortProfile::properties ¤òÀßÄê
00080       addProperty("port.port_type",             "DataOutPort");
00081       
00082       m_providers.push_back(new OutPortCorbaProvider<DataType>(outport));
00083 
00084       m_consumers.push_back(new InPortCorbaConsumer<DataType>(outport));
00085     }
00086 
00087 
00095     virtual ~DataOutPort();
00096 
00097     
00154   protected:
00199     virtual ReturnCode_t
00200     publishInterfaces(ConnectorProfile& connector_profile);
00201     
00202 
00239     virtual ReturnCode_t
00240     subscribeInterfaces(const ConnectorProfile& connector_profile);
00241     
00242 
00273     virtual void
00274     unsubscribeInterfaces(const ConnectorProfile& connector_profile);
00275 
00276 
00277     
00278     struct publish
00279     {
00280       publish(SDOPackage::NVList& prop) : m_prop(prop) {}
00281       void operator()(OutPortProvider* provider)
00282       {
00283         provider->publishInterface(m_prop);
00284       }
00285       SDOPackage::NVList& m_prop;
00286     };
00287 
00288     struct unsubscribe
00289     {
00290       unsubscribe(const SDOPackage::NVList& prop) : m_prop(prop) {}
00291       void operator()(InPortConsumer* consumer)
00292       {
00293         consumer->unsubscribeInterface(m_prop);
00294       }
00295       const SDOPackage::NVList& m_prop;
00296     };
00297 
00298   private:
00299     struct find_conn_id;
00300     std::vector<OutPortProvider*> m_providers;
00301     std::vector<InPortConsumer*> m_consumers;
00302     OutPortBase& m_outport;
00303 
00304     PublisherFactory m_pf;
00305 
00306     struct subscribe
00307     {
00308       subscribe(const ConnectorProfile& prof)
00309         : m_prof(&prof), _consumer(NULL) 
00310       {
00311       }
00312 
00313       subscribe(const subscribe& subs)
00314         : m_prof(subs.m_prof),
00315           _consumer(subs._consumer)
00316       {
00317       }
00318 
00319       subscribe& operator=(const subscribe& subs)
00320       {
00321         if (this == &subs) return *this;
00322         m_prof = subs.m_prof;
00323         _consumer = subs._consumer;
00324         return *this;
00325       }
00326 
00327       void operator()(InPortConsumer* cons)
00328       {
00329         if (cons->subscribeInterface(m_prof->properties))
00330           {
00331             _consumer = cons;
00332           }
00333       }
00334       const ConnectorProfile* m_prof;
00335       InPortConsumer* _consumer;
00336     };
00337 
00338 
00339   };
00340 }; // namespace RTC
00341 
00342 #endif // DataOutPort_h

Generated on Mon Jan 15 12:15:34 2007 for OpenRTM by  doxygen 1.4.1