86 template <
class DataType>
117 m_name(
name), m_value(value),
118 m_OnRead(nullptr), m_OnReadConvert(nullptr),
119 m_status(1), m_directNewData(false)
132 std::string marshaling_types{coil::eraseBlank(coil::flatten(
135 RTC_DEBUG((
"available marshaling_types: %s", marshaling_types.c_str()));
137 addProperty(
"dataport.marshaling_types", marshaling_types.c_str());
178 return m_name.c_str();
221 if (std::string(con->name()) ==
name)
223 size_t r = con->getBuffer()->readable();
226 RTC_DEBUG((
"isNew() = true, readable data: %d", r));
233 RTC_DEBUG((
"isNew() = false, no readable data"));
236 virtual bool isNew(coil::vstring &names)
252 size_t r = con->getBuffer()->readable();
255 names.emplace_back(con->name());
263 RTC_DEBUG((
"isNew() = true, buffer is not empty"));
267 RTC_DEBUG((
"isNew() = false, no readable data"));
278 std::lock_guard<std::mutex> guard(m_valueMutex);
279 if (m_directNewData ==
true)
281 RTC_DEBUG((
"isNew() returns true because of direct write."));
298 RTC_DEBUG((
"isNew() = true, readable data: %d", r));
302 RTC_DEBUG((
"isNew() = false, no readable data"));
344 if (std::string(con->name()) ==
name)
346 size_t r = con->getBuffer()->readable();
349 RTC_DEBUG((
"isEmpty() = true, buffer is empty"));
356 RTC_DEBUG((
"isEmpty() = false, no readable data"));
376 size_t r = con->getBuffer()->readable();
379 names.emplace_back(con->name());
387 RTC_DEBUG((
"isEmpty() = true, buffer is empty"));
391 RTC_DEBUG((
"isEmpty() = false, no readable data"));
397 if (m_directNewData ==
true) {
return false; }
415 RTC_DEBUG((
"isEmpty() = true, buffer is empty"));
419 RTC_DEBUG((
"isEmpty() = false, data exists in the buffer"));
425 std::lock_guard<std::mutex> guard(m_valueMutex);
427 m_directNewData =
true;
508 if (m_OnRead !=
nullptr)
515 std::lock_guard<std::mutex> guard(m_valueMutex);
516 if (m_directNewData ==
true)
519 if (m_OnReadConvert !=
nullptr)
521 m_value = (*m_OnReadConvert)(m_value);
522 RTC_DEBUG((
"OnReadConvert for direct data called"));
525 m_directNewData =
false;
553 if (std::string(con->name()) ==
name)
560 if (connector ==
nullptr)
573 ret = connector->
read(m_value);
578 std::lock_guard<std::mutex> guard(m_valueMutex);
581 if (m_OnReadConvert !=
nullptr)
583 m_value = (*m_OnReadConvert)(m_value);
604 RTC_ERROR((
"unknown retern value from buffer.read()"));
785 m_OnReadConvert = on_rconvert;
808 std::string m_typename;
826 mutable std::mutex m_valueMutex;
862 bool m_directNewData;
CORBA CDR Stream Buffer class.
void CdrMemoryStreamInit()
Definition CORBA_CdrMemoryStream.h:650
Data type utility function.
RTC::Port implementation for InPort.
InPortConnector base class.
#define RTC_WARN(fmt)
Warning log output macro.
Definition SystemLogger.h:621
#define RTC_TRACE(fmt)
Trace level log output macro.
Definition SystemLogger.h:687
#define RTC_DEBUG(fmt)
Debug level log output macro.
Definition SystemLogger.h:665
#define RTC_ERROR(fmt)
Error log output macro.
Definition SystemLogger.h:599
Timestamp listener class.
DataPortStatus mixin class.
ConnectorListenersT class.
Definition ConnectorListener.h:2086
Definition DirectInPortBase.h:48
Port for InPort.
Definition InPortBase.h:70
ConnectorList m_connectors
Connection list .
Definition InPortBase.h:884
ConnectorListenersBase * m_listeners
ConnectorDataListener listener .
Definition InPortBase.h:901
void addConnectorDataListener(ConnectorDataListenerType type, ConnectorDataListener *listener, bool autoclean=true)
Adding BufferDataListener type listener.
InPortConnector base class.
Definition InPortConnector.h:54
bool getDirectData(DataType &data)
Definition InPortConnector.h:321
virtual DataPortStatus read(ByteDataStreamBase *data)=0
Destructor.
InPort template class.
Definition InPort.h:89
bool read(std::string name="") override
Readout the value from DataPort.
Definition InPort.h:504
void operator>>(DataType &rhs)
Read the newly value data in InPort to type-T variable.
Definition InPort.h:656
virtual bool isEmpty(coil::vstring &names)
Definition InPort.h:359
DataPortStatusList getStatusList()
Getting specified connector's writing status list.
Definition InPort.h:729
virtual bool isNew(coil::vstring &names)
Definition InPort.h:236
virtual bool isNew(std::string name)
Check whether the data is newest.
Definition InPort.h:206
void initConnectorListeners() override
Definition InPort.h:802
bool isEmpty() override
Check whether the data is newest.
Definition InPort.h:394
void setOnRead(OnRead< DataType > *on_read)
Set callback when data is read from the InPort buffer.
Definition InPort.h:755
void write(DataType &data) override
Definition InPort.h:423
DataPortStatus getStatus(int)
Getting specified connector's writing status.
Definition InPort.h:695
bool isNew() override
Check whether the data is newest.
Definition InPort.h:270
virtual void update()
Read the newly value to type-T variable which is bound to InPort's buffer.
Definition InPort.h:631
virtual bool isEmpty(std::string name)
Check whether the data is newest.
Definition InPort.h:329
virtual const char * name()
Get port name.
Definition InPort.h:176
~InPort() override
Destructor.
InPort(const char *name, DataType &value)
A constructor.
Definition InPort.h:115
void setOnReadConvert(OnReadConvert< DataType > *on_rconvert)
Set callback when data is readout to the InPort buffer.
Definition InPort.h:783
std::mutex m_connectorsMutex
Definition PortBase.h:2115
DirectPortBase * m_directport
Definition PortBase.h:2239
void addProperty(const char *key, ValueType value)
Add NameValue data to PortProfile's properties.
Definition PortBase.h:1877
Definition Timestamp.h:61
Definition DataTypeUtil.h:24
void copyData(T &data1, const T &data2)
Definition DataTypeUtil.h:43
std::vector< DataPortStatus > DataPortStatusList
Definition DataPortStatus.h:175
std::vector< std::string > getSerializerList()
Definition ByteDataStreamBase.h:385
Data convert callback abstract class on read()
Definition PortCallback.h:386
Callback abstract class on read()
Definition PortCallback.h:324