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)
130 CdrMemoryStreamInit<DataType>();
132 std::string marshaling_types{coil::eraseBlank(coil::flatten(
133 getSerializerList<DataType>()))};
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
Data type utility function
RTC::Port implementation for InPort
InPortConnector base class
#define RTC_WARN(fmt)
ワーニングログ出力マクロ。
Definition SystemLogger.h:621
#define RTC_TRACE(fmt)
トレースログ出力マクロ。
Definition SystemLogger.h:687
#define RTC_DEBUG(fmt)
デバッグログ出力マクロ。
Definition SystemLogger.h:665
#define RTC_ERROR(fmt)
エラーログ出力マクロ。
Definition SystemLogger.h:599
ConnectorListenersT クラス
Definition ConnectorListener.h:2086
direct接続用InPort基底クラス
Definition DirectInPortBase.h:48
InPort 用 Port
Definition InPortBase.h:70
ConnectorList m_connectors
接続リスト
Definition InPortBase.h:884
ConnectorListenersBase * m_listeners
ConnectorDataListener リスナ
Definition InPortBase.h:901
void addConnectorDataListener(ConnectorDataListenerType type, ConnectorDataListener *listener, bool autoclean=true)
ConnectorDataListener リスナを追加する
InPortConnector 基底クラス
Definition InPortConnector.h:54
bool getDirectData(DataType &data)
ダイレクト接続時に変数渡しでデータを取得する
Definition InPortConnector.h:321
virtual DataPortStatus read(ByteDataStreamBase *data)=0
read 関数
InPort テンプレートクラス
Definition InPort.h:89
bool read(std::string name="") override
DataPort から値を読み出す
Definition InPort.h:504
void operator>>(DataType &rhs)
T 型のデータへ InPort の最新値データを読み込む
Definition InPort.h:656
virtual bool isEmpty(coil::vstring &names)
Definition InPort.h:359
DataPortStatusList getStatusList()
特定のコネクタへの書き込みステータスリストを得る
Definition InPort.h:729
virtual bool isNew(coil::vstring &names)
Definition InPort.h:236
virtual bool isNew(std::string name)
最新データが存在するか確認する
Definition InPort.h:206
void initConnectorListeners() override
コネクタリスナの初期化
Definition InPort.h:802
bool isEmpty() override
バッファが空かどうか確認する
Definition InPort.h:394
void setOnRead(OnRead< DataType > *on_read)
InPort バッファへデータ読み込み時のコールバックの設定
Definition InPort.h:755
void write(DataType &data) override
データの書き込み
Definition InPort.h:423
DataPortStatus getStatus(int)
特定のコネクタへの書き込みステータスを得る
Definition InPort.h:695
bool isNew() override
最新データが存在するか確認する
Definition InPort.h:270
virtual void update()
バインドされた T 型の変数に InPort バッファの最新値を読み込む
Definition InPort.h:631
virtual bool isEmpty(std::string name)
バッファが空かどうか確認する
Definition InPort.h:329
virtual const char * name()
ポート名称を取得する。
Definition InPort.h:176
InPort(const char *name, DataType &value)
コンストラクタ
Definition InPort.h:115
void setOnReadConvert(OnReadConvert< DataType > *on_rconvert)
InPort バッファへデータ読み出し時のコールバックの設定
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)
PortProfile の properties に NameValue 値を追加する
Definition PortBase.h:1877
Definition Timestamp.h:61
Definition DataTypeUtil.h:24
const char * toRepositoryId()
CORBA型のリポジトリIDを文字列で取得する
Definition Typename.h:233
std::vector< DataPortStatus > DataPortStatusList
Definition DataPortStatus.h:175
DataPortStatus
Definition DataPortStatus.h:114
read() 時のデータ変換コールバック抽象クラス
Definition PortCallback.h:386
read() 時のコールバック抽象クラス
Definition PortCallback.h:324