[openrtm-commit:03100] r3184 - branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm

openrtm @ openrtm.org openrtm @ openrtm.org
2018年 1月 23日 (火) 09:15:43 JST


Author: miyamoto
Date: 2018-01-23 09:15:43 +0900 (Tue, 23 Jan 2018)
New Revision: 3184

Modified:
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/FactoryInit.cpp
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPort.h
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortBase.cpp
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortBase.h
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortConnector.cpp
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortConnector.h
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPort.h
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortBase.cpp
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortBase.h
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortConnector.cpp
   branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortConnector.h
Log:
[incompat,->RELENG_1_2] refs #4428

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/FactoryInit.cpp
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/FactoryInit.cpp	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/FactoryInit.cpp	2018-01-23 00:15:43 UTC (rev 3184)
@@ -37,6 +37,8 @@
 #include <rtm/OutPortCorbaCdrProvider.h>
 #include <rtm/InPortDirectProvider.h>
 #include <rtm/InPortDirectConsumer.h>
+#include <rtm/OutPortDirectProvider.h>
+#include <rtm/OutPortDirectConsumer.h>
 #include <rtm/InPortSHMProvider.h>
 #include <rtm/InPortSHMConsumer.h>
 #include <rtm/OutPortSHMProvider.h>
@@ -70,6 +72,8 @@
     OutPortCorbaCdrProviderInit();
     InPortDirectProviderInit();
     InPortDirectConsumerInit();
+	OutPortDirectProviderInit();
+	OutPortDirectConsumerInit();
     InPortSHMProviderInit();
     InPortSHMConsumerInit();
     OutPortSHMProviderInit();

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPort.h
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPort.h	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPort.h	2018-01-23 00:15:43 UTC (rev 3184)
@@ -435,35 +435,47 @@
             return false;
           }
 
-        // In single-buffer mode, all connectors share the same buffer. This
-        // means that we only need to read from the first connector to get data
-        // received by any connector.
-        ret = m_connectors[0]->read(cdr);
-        m_status[0] = ret;
+        
       }
-      if (ret == PORT_OK)
-        {
-          Guard guard(m_valueMutex);
-          RTC_DEBUG(("data read succeeded"));
-          m_value <<= cdr;
-          if (m_OnReadConvert != 0) 
-            {
-              m_value = (*m_OnReadConvert)(m_value);
-              RTC_DEBUG(("OnReadConvert called"));
-              return true;
-            }
-          return true;
-        }
-      else if (ret == BUFFER_EMPTY)
-        {
-          RTC_WARN(("buffer empty"));
-          return false;
-        }
-      else if (ret == BUFFER_TIMEOUT)
-        {
-          RTC_WARN(("buffer read timeout"));
-          return false;
-        }
+
+	  if (!m_connectors[0]->getDirectData(m_value))
+	  {
+		  {
+			  Guard guard(m_connectorsMutex);
+			  // In single-buffer mode, all connectors share the same buffer. This
+			  // means that we only need to read from the first connector to get data
+			  // received by any connector.
+			  ret = m_connectors[0]->read(cdr);
+		  }
+		  m_status[0] = ret;
+		  if (ret == PORT_OK)
+		  {
+			  Guard guard(m_valueMutex);
+			  RTC_DEBUG(("data read succeeded"));
+			  m_value <<= cdr;
+			  if (m_OnReadConvert != 0)
+			  {
+				  m_value = (*m_OnReadConvert)(m_value);
+				  RTC_DEBUG(("OnReadConvert called"));
+				  return true;
+			  }
+			  return true;
+		  }
+		  else if (ret == BUFFER_EMPTY)
+		  {
+			  RTC_WARN(("buffer empty"));
+			  return false;
+		  }
+		  else if (ret == BUFFER_TIMEOUT)
+		  {
+			  RTC_WARN(("buffer read timeout"));
+			  return false;
+		  }
+	  }
+	  else
+	  {
+		  return true;
+	  }
       RTC_ERROR(("unknown retern value from buffer.read()"));
       return false;
     }

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortBase.cpp
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortBase.cpp	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortBase.cpp	2018-01-23 00:15:43 UTC (rev 3184)
@@ -1015,6 +1015,25 @@
 
         // endian type set
         connector->setEndian(m_littleEndian);
+
+
+		if (coil::normalize(prop["interface_type"]) == "direct")
+		{
+			OutPortBase* outport = getLocalOutPort(profile);
+			if (outport == NULL)
+			{
+				RTC_DEBUG(("interface_type is direct, "
+					"but a peer InPort servant could not be obtained."));
+				delete connector;
+				return 0;
+			}
+			
+
+			connector->setOutPort(outport);
+
+			
+		}
+
         m_connectors.push_back(connector);
         RTC_PARANOID(("connector push backed: %d", m_connectors.size()));
         return connector;
@@ -1033,6 +1052,43 @@
    return m_listeners; 
   }
 
+  /*!
+  * @if jp
+  * @brief ¥í¡¼¥«¥ë¤Î¥Ô¥¢OutPort¤ò¼èÆÀ
+  * @else
+  * @brief Getting local peer OutPort if available
+  * @endif
+  */
+  OutPortBase*
+	  InPortBase::getLocalOutPort(const ConnectorInfo& profile)
+  {
+	  RTC_DEBUG(("Trying direct port connection."));
+	  CORBA::ORB_var orb = ::RTC::Manager::instance().getORB();
+	  RTC_DEBUG(("Current connector profile: name=%s, id=%s",
+		  profile.name.c_str(), profile.id.c_str()));
+	  // finding peer port object
+	  for (size_t i = 0; i < profile.ports.size(); ++i)
+	  {
+		  CORBA::Object_var obj;
+		  obj = orb->string_to_object(profile.ports[i].c_str());
+		  if (getPortRef()->_is_equivalent(obj)) { continue; }
+		  RTC_DEBUG(("Peer port found: %s.", profile.ports[i].c_str()));
+		  try
+		  {
+			  PortableServer::POA_var poa = ::RTC::Manager::instance().getPOA();
+			  OutPortBase* outport = dynamic_cast<OutPortBase*>
+				  (poa->reference_to_servant(obj));
+			  RTC_DEBUG(("OutPortBase servant pointer is obtained."));
+			  return outport;
+		  }
+		  catch (...)
+		  {
+			  RTC_DEBUG(("Peer port might be a remote port"));
+		  }
+	  }
+	  return NULL;
+  }
+
   ReturnCode_t InPortBase::notify_connect(ConnectorProfile& connector_profile)
 	  throw (CORBA::SystemException)
   {

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortBase.h
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortBase.h	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortBase.h	2018-01-23 00:15:43 UTC (rev 3184)
@@ -24,6 +24,7 @@
 #include <rtm/DataPortStatus.h>
 #include <rtm/CdrBufferBase.h>
 #include <rtm/ConnectorListener.h>
+#include <rtm/OutPortBase.h>
 
 #ifdef WIN32
 #pragma warning( push ) 
@@ -821,6 +822,14 @@
     createConnector(const ConnectorProfile& cprof, coil::Properties& prop,
                     OutPortConsumer* consumer);
   protected:
+	  /*!
+	  * @if jp
+	  * @brief ¥í¡¼¥«¥ë¤Î¥Ô¥¢OutPort¤ò¼èÆÀ
+	  * @else
+	  * @brief Getting local peer OutPort if available
+	  * @endif
+	  */
+	  OutPortBase* getLocalOutPort(const ConnectorInfo& profile);
     /*!
      * @if jp
      * @brief ¥Ð¥Ã¥Õ¥¡¥â¡¼¥É

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortConnector.cpp
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortConnector.cpp	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortConnector.cpp	2018-01-23 00:15:43 UTC (rev 3184)
@@ -18,6 +18,7 @@
  */
 
 #include <rtm/InPortConnector.h>
+#include <rtm/OutPort.h>
 
 namespace RTC
 {
@@ -32,7 +33,7 @@
                                    ConnectorListeners& listeners,
                                    CdrBufferBase* buffer)
     : rtclog("InPortConnector"), m_profile(info),
-      m_listeners(listeners), m_buffer(buffer), m_littleEndian(true)
+	m_listeners(listeners), m_buffer(buffer), m_littleEndian(true), m_directOutPort(NULL), m_outPortListeners(NULL)
   {
   }
 
@@ -153,4 +154,19 @@
     return m_littleEndian;
   }
 
+  bool InPortConnector::setOutPort(OutPortBase* directOutPort)
+  {
+	  {
+		  if (directOutPort == NULL)
+		  {
+			  return false;
+		  }
+		  m_directOutPort = directOutPort;
+		  
+		  m_outPortListeners = &(m_directOutPort->getListeners());
+		  m_directOutPort->getListeners();
+		  return true;
+	  }
+  };
+
 }; // namespace RTC

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortConnector.h
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortConnector.h	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/InPortConnector.h	2018-01-23 00:15:43 UTC (rev 3184)
@@ -23,8 +23,10 @@
 #include <rtm/ConnectorListener.h>
 #include <rtm/ConnectorBase.h>
 
+
 namespace RTC
 {
+	class OutPortBase;
   /*!
    * @if jp
    * @class InPortConnector
@@ -232,6 +234,66 @@
      */
     virtual bool isLittleEndian();
 
+
+	/*!
+	* @if jp
+	* @brief ¥Ç¡¼¥¿¤ò¥À¥¤¥ì¥¯¥È¤Ë½ñ¤­¹þ¤à¤¿¤á¤ÎOutPort¤Î¥µ¡¼¥Ð¥ó¥È¤òÀßÄꤹ¤ë
+	*
+	* @param directOutPort OutPort¤Î¥µ¡¼¥Ð¥ó¥È
+	*
+	* @return True: ÀßÄê¤ËÀ®¸ù False: ´û¤ËÀßÄêºÑ¤ß¤Î¤¿¤á¼ºÇÔ
+	*
+	* @else
+	* @brief 
+	*
+	* @param directOutPort
+	*
+	* @return true: little endian, false: big endian
+	*
+	* @endif
+	*/
+	bool setOutPort(OutPortBase* directOutPort);
+
+	template <typename DataType>
+	bool getDirectData(DataType &data)
+	{
+		if (m_directOutPort == NULL)
+		{
+			return false;
+		}
+		OutPort<DataType>* outport;
+		outport = static_cast<OutPort<DataType>*>(m_directOutPort);
+		
+		
+		if (outport->isEmpty())
+		{
+			m_listeners.
+				connector_[ON_BUFFER_EMPTY].notify(m_profile);
+			m_outPortListeners->
+				connector_[ON_SENDER_EMPTY].notify(m_profile);
+			RTC_PARANOID(("ON_BUFFER_EMPTY(InPort,OutPort), "
+				"ON_SENDER_EMPTY(InPort,OutPort) "
+				"callback called in direct mode."));
+		}
+		outport->read(data);
+		m_outPortListeners->connectorData_[ON_BUFFER_READ].notify(m_profile, data);
+		RTC_TRACE(("ON_BUFFER_READ(OutPort), "));
+		RTC_TRACE(("callback called in direct mode."));
+		m_outPortListeners->connectorData_[ON_SEND].notify(m_profile, data);
+		RTC_TRACE(("ON_SEND(OutPort), "));
+		RTC_TRACE(("callback called in direct mode."));
+		m_listeners.connectorData_[ON_RECEIVED].notify(m_profile, data);
+		RTC_TRACE(("ON_RECEIVED(InPort), "));
+		RTC_TRACE(("callback called in direct mode."));
+		m_listeners.connectorData_[ON_SEND].notify(m_profile, data);
+		RTC_TRACE(("ON_BUFFER_WRITE(InPort), "));
+		RTC_TRACE(("callback called in direct mode."));
+		
+
+		return true;
+
+	};
+
   protected:
     /*!
      * @if jp
@@ -281,6 +343,14 @@
      * @endif
      */
     ConnectorListeners* m_outPortListeners;
+	/*!
+	* @if jp
+	* @brief Ʊ°ì¥×¥í¥»¥¹¾å¤Î¥Ô¥¢OutPort¤Î¥Ý¥¤¥ó¥¿
+	* @else
+	* @brief OutProt pointer to the peer in the same process
+	* @endif
+	*/
+	OutPortBase* m_directOutPort;
 
   };
 }; // namespace RTC

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPort.h
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPort.h	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPort.h	2018-01-23 00:15:43 UTC (rev 3184)
@@ -106,6 +106,7 @@
   class OutPort
     : public OutPortBase
   {
+	  typedef coil::Guard<coil::Mutex> Guard;
   public:
     /*!
      * @if jp
@@ -136,7 +137,7 @@
 #else
       : OutPortBase(name, ::CORBA_Util::toRepositoryId<DataType>()),
 #endif
-        m_value(value), m_onWrite(0), m_onWriteConvert(0)
+	  m_value(value), m_onWrite(0), m_onWriteConvert(0), m_directNewData(false)
     {
 
       this->addConnectorDataListener(ON_BUFFER_WRITE,
@@ -216,6 +217,7 @@
           RTC_TRACE(("OnWrite called"));
         }
 
+
       bool result(true);
       std::vector<const char *> disconnect_ids;
       {
@@ -228,18 +230,27 @@
 
         for (size_t i(0), len(conn_size); i < len; ++i)
           {
+
             ReturnCode ret;
-            if (m_onWriteConvert != NULL)
-              {
-                RTC_DEBUG(("m_connectors.OnWriteConvert called"));
-                ret = m_connectors[i]->write(((*m_onWriteConvert)(value)));
-              }
-            else
-              {
-                RTC_DEBUG(("m_connectors.write called"));
-                ret = m_connectors[i]->write(value);
-              }
+			if (!m_connectors[i]->directMode())
+			{
+				if (m_onWriteConvert != NULL)
+				{
+					RTC_DEBUG(("m_connectors.OnWriteConvert called"));
+					ret = m_connectors[i]->write(((*m_onWriteConvert)(value)));
+				}
+				else
+				{
+					RTC_DEBUG(("m_connectors.write called"));
+					ret = m_connectors[i]->write(value);
+				}
+			}
+			else
+			{
+				ret = PORT_OK;
+			}
             m_status[i] = ret;
+
             if (ret == PORT_OK) { continue; }
       
             result = false;
@@ -285,6 +296,7 @@
      */
     bool write()
     {
+		Guard guard(m_valueMutex);
       return write(m_value);
     }
     
@@ -463,6 +475,40 @@
     {
       m_onWriteConvert = on_wconvert;
     }
+
+
+	/*!
+	* @if jp
+	*
+	* @brief ¥Ç¡¼¥¿¤ò¥À¥¤¥ì¥¯¥È¤ËÆɤ߹þ¤à
+	*
+	* @param data Æɤ߹þ¤à¥Ç¡¼¥¿
+	*
+	* @else
+	*
+	* @brief 
+	*
+	* @param data
+	*
+	* @endif
+	*/
+	void read(DataType& data)
+	{
+		Guard guard(m_valueMutex);
+		m_directNewData = false;
+		if (m_onWriteConvert != NULL)
+		{
+			data = (*m_onWriteConvert)(m_value);
+		}
+		else
+		{
+			data = m_value;
+		}
+	}
+	bool isEmpty()
+	{
+		return false;
+	}
     
   private:
     std::string m_typename;
@@ -498,6 +544,9 @@
     DataPortStatusList m_status;
 
     CORBA::Long m_propValueIndex;
+
+	coil::Mutex m_valueMutex;
+	bool m_directNewData;
   };
 }; // namespace RTC
 

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortBase.cpp
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortBase.cpp	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortBase.cpp	2018-01-23 00:15:43 UTC (rev 3184)
@@ -29,6 +29,8 @@
 #include <rtm/OutPortBase.h>
 #include <rtm/PublisherBase.h>
 
+#include <rtm/InPortBase.h>
+
 namespace RTC
 {
   /*!
@@ -1047,6 +1049,12 @@
           }
         RTC_TRACE(("OutPortPullConnector created"));
 
+
+		if (coil::normalize(prop["interface_type"]) == "direct")
+		{
+			connector->setDirectMode();
+		}
+
         m_connectors.push_back(connector);
         RTC_PARANOID(("connector pushback done: size = %d", m_connectors.size()));
         return connector;
@@ -1130,4 +1138,9 @@
 	  return PortBase::notify_connect(connector_profile);
   }
 
+  ConnectorListeners& OutPortBase::getListeners()
+  {
+	  return m_listeners;
+  }
+
 }; // end of namespace RTM

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortBase.h
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortBase.h	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortBase.h	2018-01-23 00:15:43 UTC (rev 3184)
@@ -781,7 +781,26 @@
     connect(ConnectorProfile& connector_profile)
       throw (CORBA::SystemException);
 
+	/*!
+	* @if jp
+	* @brief ¥ê¥¹¥Ê¥Û¥ë¥À¤ò¼èÆÀ¤¹¤ë
+	*
+	* InPortBase¤¬ÊÝ»ý¤¹¤ë¥ê¥¹¥Ê¥Û¥ë¥À¤òÊÖ¤¹¡£
+	*
+	* @return ConnectorListeners
+	*
+	* @else
+	* @brief Getting listeners holder
+	*
+	* This operation returns listeners holder.
+	*
+	* @return ConnectorListeners
+	*
+	* @endif
+	*/
+	virtual ConnectorListeners& getListeners();
 
+
   protected:
     /*!
      * @if jp
@@ -1021,6 +1040,7 @@
     virtual ReturnCode_t notify_connect(ConnectorProfile& connector_profile)
 		throw (CORBA::SystemException);
 
+
   protected:
     /*!
      * @if jp
@@ -1030,6 +1050,8 @@
      * @endif
      */
     InPortBase* getLocalInPort(const ConnectorInfo& profile);
+
+
     
 
     /*!

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortConnector.cpp
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortConnector.cpp	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortConnector.cpp	2018-01-23 00:15:43 UTC (rev 3184)
@@ -18,6 +18,7 @@
  */
 
 #include <rtm/OutPortConnector.h>
+#include <rtm/InPortBase.h>
 
 namespace RTC
 {
@@ -31,7 +32,7 @@
   OutPortConnector::OutPortConnector(ConnectorInfo& info,
                                      ConnectorListeners& listeners)
     : rtclog("OutPortConnector"), m_profile(info), m_littleEndian(true),
-      m_directInPort(NULL), m_listeners(listeners)
+	m_directInPort(NULL), m_listeners(listeners), m_directMode(false)
   {
   }
 
@@ -133,4 +134,47 @@
     return m_littleEndian;
   }
 
+  /*!
+  * @if jp
+  * @brief ¥À¥¤¥ì¥¯¥ÈÀܳ¥â¡¼¥É¤ËÀßÄê
+  *
+  *
+  * @else
+  * @brief
+  *
+  *
+  * @endif
+  */
+  void OutPortConnector::setDirectMode()
+  {
+	  m_directMode = true;
+  }
+
+  /*!
+  * @if jp
+  * @brief ¥À¥¤¥ì¥¯¥ÈÀܳ¥â¡¼¥É¤«¤ÎȽÄê
+  *
+  * @return True¡§¥À¥¤¥ì¥¯¥ÈÀܳ¥â¡¼¥É,false¡§¤½¤ì°Ê³°
+  *
+  * @else
+  * @brief
+  *
+  *
+  * @endif
+  */
+  bool OutPortConnector::directMode()
+  {
+	  return m_directMode;
+  }
+
+  bool OutPortConnector::setInPort(InPortBase* directInPort)
+  {
+	  if (directInPort == NULL)
+	  {
+		  return false;
+	  }
+	  m_directInPort = directInPort;
+	  m_inPortListeners = &(m_directInPort->getListeners());
+	  return true;
+  }
 }; // namespace RTC

Modified: branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortConnector.h
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortConnector.h	2018-01-22 23:46:55 UTC (rev 3183)
+++ branches/RELENG_1_2/OpenRTM-aist/src/lib/rtm/OutPortConnector.h	2018-01-23 00:15:43 UTC (rev 3184)
@@ -22,12 +22,13 @@
 
 #include <rtm/SystemLogger.h>
 #include <rtm/ConnectorBase.h>
-#include <rtm/InPortBase.h>
-#include <rtm/InPort.h>
+#include <rtm/ConnectorListener.h>
 
 
+
 namespace RTC
 {
+	class InPortBase;
   /*!
    * @if jp
    * @class OutPortConnector
@@ -255,16 +256,32 @@
       return write(m_cdr);
     }
 
-    bool setInPort(InPortBase* directInPort)
-    {
-      if (directInPort == NULL)
-        {
-          return false;
-        }
-      m_directInPort = directInPort;
-      m_inPortListeners = &(m_directInPort->getListeners());
-      return true;
-    }
+	bool setInPort(InPortBase* directInPort);
+	/*!
+	* @if jp
+	* @brief ¥À¥¤¥ì¥¯¥ÈÀܳ¥â¡¼¥É¤ËÀßÄê
+	*
+	*
+	* @else
+	* @brief
+	*
+	*
+	* @endif
+	*/
+	virtual void setDirectMode();
+	/*!
+	* @if jp
+	* @brief ¥À¥¤¥ì¥¯¥ÈÀܳ¥â¡¼¥É¤«¤ÎȽÄê
+	*
+	* @return True¡§¥À¥¤¥ì¥¯¥ÈÀܳ¥â¡¼¥É,false¡§¤½¤ì°Ê³°
+	*
+	* @else
+	* @brief
+	*
+	*
+	* @endif
+	*/
+	virtual bool directMode();
   protected:
     /*!
      * @if jp
@@ -326,6 +343,8 @@
      */
     ConnectorListeners* m_inPortListeners;
 
+	bool m_directMode;
+
   };
 }; // namespace RTC
 



More information about the openrtm-commit mailing list