OpenRTM-aist  1.2.1
OutPortConnector.h
Go to the documentation of this file.
1 // -*- C++ -*-
20 #ifndef RTC_OUTPORTCONNECTOR_H
21 #define RTC_OUTPORTCONNECTOR_H
22 
23 #include <rtm/SystemLogger.h>
24 #include <rtm/ConnectorBase.h>
25 #include <rtm/ConnectorListener.h>
26 #include <rtm/DirectInPortBase.h>
27 #include <rtm/PortBase.h>
28 
29 
30 
31 namespace RTC
32 {
33  class InPortBase;
55  : public ConnectorBase
56  {
57  public:
59 
68 
76  virtual ~OutPortConnector();
90  const ConnectorInfo& profile();
91 
105  const char* id();
106 
120  const char* name();
121 
135  virtual ReturnCode disconnect() = 0;
136 
150  virtual CdrBufferBase* getBuffer() = 0;
151 
165  virtual ReturnCode write(cdrMemoryStream& data) = 0;
166 
180  virtual void setEndian(const bool endian_type);
181 
199  virtual bool isLittleEndian();
200 
214  template <class DataType>
215  ReturnCode write(DataType& data)
216  {
217  if (m_directInPort != NULL)
218  {
220  if(inport)
221  {
222  if (inport->isNew())
223  {
224  // ON_BUFFER_OVERWRITE(In,Out), ON_RECEIVER_FULL(In,Out) callback
225  m_listeners.
226  connectorData_[ON_BUFFER_OVERWRITE].notify(m_profile, data);
228  connectorData_[ON_BUFFER_OVERWRITE].notify(m_profile, data);
229  m_listeners.
230  connectorData_[ON_RECEIVER_FULL].notify(m_profile, data);
232  connectorData_[ON_RECEIVER_FULL].notify(m_profile, data);
233  RTC_PARANOID(("ON_BUFFER_OVERWRITE(InPort,OutPort), "
234  "ON_RECEIVER_FULL(InPort,OutPort) "
235  "callback called in direct mode."));
236  }
237  // ON_BUFFER_WRITE(In,Out) callback
238  m_listeners.
239  connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
241  connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
242  RTC_PARANOID(("ON_BUFFER_WRITE(InPort,OutPort), "
243  "callback called in direct mode."));
244  inport->write(data); // write to InPort variable!!
245  // ON_RECEIVED(In,Out) callback
246  m_listeners.
247  connectorData_[ON_RECEIVED].notify(m_profile, data);
249  connectorData_[ON_RECEIVED].notify(m_profile, data);
250  RTC_PARANOID(("ON_RECEIVED(InPort,OutPort), "
251  "callback called in direct mode."));
252  return PORT_OK;
253  }
254  // ON_BUFFER_WRITE(In,Out) callback
255  m_listeners.
256  connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
258  connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
259  RTC_PARANOID(("ON_BUFFER_WRITE(InPort,OutPort), "
260  "callback called in direct mode."));
261  inport->write(data); // write to InPort variable!!
262  // ON_RECEIVED(In,Out) callback
263  m_listeners.
264  connectorData_[ON_RECEIVED].notify(m_profile, data);
266  connectorData_[ON_RECEIVED].notify(m_profile, data);
267  RTC_PARANOID(("ON_RECEIVED(InPort,OutPort), "
268  "callback called in direct mode."));
269  return PORT_OK;
270  }
271  // normal case
272  m_cdr.rewindPtrs();
273  RTC_TRACE(("connector endian: %s", isLittleEndian() ? "little":"big"));
274  m_cdr.setByteSwapFlag(isLittleEndian());
275  data >>= m_cdr;
276  return write(m_cdr);
277  }
278 
279  bool setInPort(InPortBase* directInPort);
291  virtual void setPullDirectMode();
304  virtual bool pullDirectMode();
305  protected:
337  cdrMemoryStream m_cdr;
338 
347 
356 
365 
367 
368  };
369 }; // namespace RTC
370 
371 #endif // RTC_CONNECTORBASE_H
RTC&#39;s Port base class.
ConnectorListeners class.
Definition: ConnectorListener.h:1217
virtual bool isNew()
Check whether the data is newest.
Definition: DirectInPortBase.h:108
Definition: ConnectorListener.h:147
virtual ReturnCode write(cdrMemoryStream &data)=0
Destructor.
#define DATAPORTSTATUS_ENUM
Importing RTC::DataPortStatus macro.
Definition: DataPortStatus.h:233
OutPortConnector base class.
Definition: OutPortConnector.h:54
RT-Component.
#define RTC_TRACE(fmt)
Trace level log output macro.
Definition: SystemLogger.h:588
virtual DirectPortBase * getDirectPort()
ConnectorListeners & m_listeners
A reference to a ConnectorListener.
Definition: OutPortConnector.h:355
RT component logger class.
Definition: ConnectorListener.h:146
Connector Base class.
Definition: ConnectorBase.h:156
Definition: ConnectorBase.h:43
virtual CdrBufferBase * getBuffer()=0
Getting Buffer.
PortBase * m_directInPort
InProt pointer to the peer in the same process.
Definition: OutPortConnector.h:346
bool setInPort(InPortBase *directInPort)
Definition: ConnectorListener.h:140
ConnectorInfo m_profile
PortProfile of the Port.
Definition: OutPortConnector.h:321
#define RTC_PARANOID(fmt)
Paranoid level log output macro.
Definition: SystemLogger.h:633
Connector base class.
Definition: DirectInPortBase.h:48
ConnectorListeners * m_inPortListeners
A pointer to a InPort&#39;s ConnectorListener.
Definition: OutPortConnector.h:364
const char * id()
Getting Connector ID.
virtual bool isLittleEndian()
return it whether endian setting.
Port base class.
Definition: PortBase.h:135
cdrMemoryStream m_cdr
CDR stream.
Definition: OutPortConnector.h:337
DATAPORTSTATUS_ENUM OutPortConnector(ConnectorInfo &info, ConnectorListeners &listeners)
Constructor.
ReturnCode write(DataType &data)
The conversion template of the data type.
Definition: OutPortConnector.h:215
virtual ReturnCode disconnect()=0
Disconnect connection.
virtual void setEndian(const bool endian_type)
Setting an endian type.
Logger class.
Definition: SystemLogger.h:99
Port for InPort.
Definition: InPortBase.h:74
Definition: ConnectorListener.h:143
Definition: DataPortStatus.h:145
Logger rtclog
Logger streamf.
Definition: OutPortConnector.h:313
DirectInPortBase class.
virtual void setPullDirectMode()
const char * name()
Getting Connector name.
virtual void write(const DataType &data)
Definition: DirectInPortBase.h:154
BufferBase abstract class.
Definition: BufferBase.h:104
connector listener class
bool m_directMode
Definition: OutPortConnector.h:366
virtual ~OutPortConnector()
Destructor.
virtual bool pullDirectMode()
const ConnectorInfo & profile()
Getting Profile.
bool m_littleEndian
Connected Endian.
Definition: OutPortConnector.h:329