23#include <coil/TimeMeasure.h>
77 template <
class DataType>
107 m_value(value), m_onWrite(nullptr), m_onWriteConvert(nullptr),
108 m_directNewData(false), m_directValue(value)
120 std::string marshaling_types{coil::eraseBlank(coil::flatten(
123 RTC_DEBUG((
"available marshaling_types: %s", marshaling_types.c_str()));
125 addProperty(
"dataport.marshaling_types", marshaling_types.c_str());
190 if (m_onWrite !=
nullptr)
198 std::vector<const char *> disconnect_ids;
203 if (!(conn_size > 0)) {
return false; }
205 m_status.resize(conn_size);
207 for (
size_t i(0), len(conn_size); i < len; ++i)
213 if (m_onWriteConvert !=
nullptr)
215 RTC_DEBUG((
"m_connectors.OnWriteConvert called"));
216 DataType tmp = (*m_onWriteConvert)(value);
221 RTC_DEBUG((
"m_connectors.write called"));
227 std::lock_guard<std::mutex> value_guard(m_valueMutex);
228 if (m_onWriteConvert !=
nullptr)
230 RTC_DEBUG((
"m_connectors.OnWriteConvert called"));
231 m_directValue = ((*m_onWriteConvert)(value));
237 m_directNewData =
true;
249 RTC_WARN((
"connection_lost id: %s",
id));
253 (*m_onConnectionLost)(prof);
255 disconnect_ids.emplace_back(
id);
259 std::for_each(disconnect_ids.begin(), disconnect_ids.end(),
260 [
this](
const char *
id){this->disconnect(id);});
287 return write(m_value);
354 return m_status[index];
422 m_onWrite = on_write;
463 m_onWriteConvert = on_wconvert;
481 void read(DataType& data)
override
483 std::lock_guard<std::mutex> guard(m_valueMutex);
484 m_directNewData =
false;
489 return !m_directNewData;
493 return m_directNewData;
517 std::string m_typename;
545 coil::TimeMeasure m_cdrtime;
549 CORBA::Long m_propValueIndex;
551 std::mutex m_valueMutex;
552 bool m_directNewData;
553 DataType m_directValue;
void CdrMemoryStreamInit()
CDRシリアライザの初期化関数
Definition CORBA_CdrMemoryStream.h:650
Data type utility function
#define RTC_WARN(fmt)
ワーニングログ出力マクロ。
Definition SystemLogger.h:621
#define RTC_TRACE(fmt)
トレースログ出力マクロ。
Definition SystemLogger.h:687
#define RTC_DEBUG(fmt)
デバッグログ出力マクロ。
Definition SystemLogger.h:665
ConnectorListenersT クラス
Definition ConnectorListener.h:2086
direct接続用OutPort基底クラス
Definition DirectOutPortBase.h:48
write() 時のコールバック抽象クラス
Definition PortCallback.h:193
OutPort 基底クラス
Definition OutPortBase.h:229
void addConnectorDataListener(ConnectorDataListenerType type, ConnectorDataListener *listener, bool autoclean=true)
ConnectorDataListener リスナを追加する
ConnectorListenersBase * m_listeners
ConnectorDataListener リスナ
Definition OutPortBase.h:1098
std::vector< OutPortConnector * > m_connectors
接続リスト
Definition OutPortBase.h:1066
OutPort テンプレートクラス
Definition OutPort.h:80
DataPortStatusList getStatusList()
特定のコネクタへの書き込みステータスリストを得る
Definition OutPort.h:386
DataPortStatus getStatus(int index)
特定のコネクタへの書き込みステータスを得る
Definition OutPort.h:352
bool isEmpty() override
新規データが無いことを確認
Definition OutPort.h:487
void initConnectorListeners() override
コネクタリスナの初期化
Definition OutPort.h:511
virtual bool write(DataType &value)
データ書き込み
Definition OutPort.h:186
void setOnWrite(OnWrite< DataType > *on_write)
OnWrite コールバックの設定
Definition OutPort.h:420
bool operator<<(DataType &value)
データ書き込み
Definition OutPort.h:315
void read(DataType &data) override
データをダイレクトに読み込む
Definition OutPort.h:481
~OutPort() override
デストラクタ
void setOnWriteConvert(OnWriteConvert< DataType > *on_wconvert)
OnWriteConvert コールバックの設定
Definition OutPort.h:461
bool isNew() override
新規データの存在確認
Definition OutPort.h:491
bool write() override
データ書き込み
Definition OutPort.h:285
OutPort(const char *name, DataType &value)
コンストラクタ
Definition OutPort.h:105
std::mutex m_connectorsMutex
Definition PortBase.h:2115
DirectPortBase * m_directport
Definition PortBase.h:2239
ConnectorProfile findConnProfile(const char *id)
id を持つ ConnectorProfile を探す
ConnectionCallback * m_onConnectionLost
Callback functor オブジェクト
Definition PortBase.h:2222
void addProperty(const char *key, ValueType value)
PortProfile の properties に NameValue 値を追加する
Definition PortBase.h:1877
Definition Timestamp.h:61
Definition DataTypeUtil.h:24
void copyData(T &data1, const T &data2)
CORBA型のデータを別変数にコピーする omniORBではSequence型のデータはコピーコンストラクタでfor文により各要素をコピーする処理を行うため、 Octet型の配列のデータのコピーにはme...
Definition DataTypeUtil.h:43
DataPortStatus
Definition DataPortStatus.h:114
std::vector< DataPortStatus > DataPortStatusList
Definition DataPortStatus.h:175
std::vector< std::string > getSerializerList()
使用可能なシリアライザの一覧を取得する
Definition ByteDataStreamBase.h:385
write() 時のデータ変換コールバック抽象クラス
Definition PortCallback.h:259