OpenRTM-aist 2.0.2
読み取り中…
検索中…
一致する文字列を見つけられません
RTC::InPort< DataType > クラステンプレート

InPort テンプレートクラス [詳解]

#include <InPort.h>

RTC::InPort< DataType > の継承関係図
RTC::InPort< DataType > 連携図

公開メンバ関数

 InPort (const char *name, DataType &value)
 コンストラクタ
 
 ~InPort () override
 デストラクタ
 
virtual const char * name ()
 ポート名称を取得する。
 
virtual bool isNew (std::string name)
 最新データが存在するか確認する
 
virtual bool isNew (coil::vstring &names)
 
bool isNew () override
 最新データが存在するか確認する
 
virtual bool isEmpty (std::string name)
 バッファが空かどうか確認する
 
virtual bool isEmpty (coil::vstring &names)
 
bool isEmpty () override
 バッファが空かどうか確認する
 
void write (DataType &data) override
 データの書き込み
 
bool read (std::string name="") override
 DataPort から値を読み出す
 
virtual void update ()
 バインドされた T 型の変数に InPort バッファの最新値を読み込む
 
void operator>> (DataType &rhs)
 T 型のデータへ InPort の最新値データを読み込む
 
DataPortStatus getStatus (int)
 特定のコネクタへの書き込みステータスを得る
 
DataPortStatusList getStatusList ()
 特定のコネクタへの書き込みステータスリストを得る
 
void setOnRead (OnRead< DataType > *on_read)
 InPort バッファへデータ読み込み時のコールバックの設定
 
void setOnReadConvert (OnReadConvert< DataType > *on_rconvert)
 InPort バッファへデータ読み出し時のコールバックの設定
 
- 基底クラス RTC::InPortBase に属する継承公開メンバ関数
 InPortBase (const char *name, const char *data_type)
 コンストラクタ
 
 ~InPortBase () override
 デストラクタ
 
virtual void init (coil::Properties &prop)
 プロパティの初期化
 
coil::Properties & properties ()
 プロパティを取得する
 
const std::vector< InPortConnector * > & connectors ()
 Connector を取得
 
ConnectorInfoList getConnectorProfiles ()
 ConnectorProfile を取得
 
coil::vstring getConnectorIds ()
 ConnectorId を取得
 
coil::vstring getConnectorNames ()
 Connectorの名前を取得
 
InPortConnectorgetConnectorById (const char *id)
 ConnectorProfileをIDで取得
 
InPortConnectorgetConnectorByName (const char *name)
 ConnectorProfileを名前で取得
 
bool getConnectorProfileById (const char *id, ConnectorInfo &prof)
 ConnectorProfileをIDで取得
 
bool getConnectorProfileByName (const char *name, ConnectorInfo &prof)
 ConnectorProfileを名前で取得
 
void activateInterfaces () override
 InPortを activates する
 
void deactivateInterfaces () override
 全ての Port のインターフェースを deactivates する
 
void addConnectorDataListener (ConnectorDataListenerType type, ConnectorDataListener *listener, bool autoclean=true)
 ConnectorDataListener リスナを追加する
 
void removeConnectorDataListener (ConnectorDataListenerType type, ConnectorDataListener *listener)
 ConnectorDataListener リスナを削除する
 
void addConnectorListener (ConnectorListenerType type, ConnectorListener *listener, bool autoclean=true)
 ConnectorListener リスナを追加する
 
void removeConnectorListener (ConnectorListenerType type, ConnectorListener *listener)
 ConnectorDataListener リスナを削除する
 
bool isLittleEndian ()
 endian 設定を返す
 
ReturnCode_t connect (ConnectorProfile &connector_profile) override
 [CORBA interface] Port の接続を行う
 
virtual ConnectorListenersBasegetListeners ()
 リスナホルダを取得する
 
ReturnCode_t notify_connect (ConnectorProfile &connector_profile) override
 
- 基底クラス RTC::PortBase に属する継承公開メンバ関数
 PortBase (const char *name="")
 コンストラクタ
 
 ~PortBase () override
 デストラクタ
 
PortProfile * get_port_profile () override
 [CORBA interface] PortProfileを取得する
 
const PortProfile & getPortProfile () const
 PortProfile を取得する。
 
ConnectorProfileList * get_connector_profiles () override
 [CORBA interface] ConnectorProfileListを取得する
 
ConnectorProfile * get_connector_profile (const char *connector_id) override
 [CORBA interface] ConnectorProfile を取得する
 
ReturnCode_t connect (ConnectorProfile &connector_profile) override
 [CORBA interface] Port の接続を行う
 
ReturnCode_t notify_connect (ConnectorProfile &connector_profile) override
 [CORBA interface] Port の接続通知を行う
 
ReturnCode_t disconnect (const char *connector_id) override
 [CORBA interface] Port の接続を解除する
 
ReturnCode_t notify_disconnect (const char *connector_id) override
 [CORBA interface] Port の接続解除通知を行う
 
ReturnCode_t disconnect_all () override
 [CORBA interface] Port の全接続を解除する
 
void setName (const char *name)
 Port の名前を設定する
 
const char * getName () const
 Port の名前を取得する
 
const PortProfile & getProfile () const
 PortProfileを取得する
 
void setPortRef (PortService_ptr port_ref)
 Port のオブジェクト参照を設定する
 
PortService_ptr getPortRef () const
 Port のオブジェクト参照を取得する
 
void setOwner (RTObject_ptr owner)
 Port の owner の RTObject を指定する
 
void setOnPublishInterfaces (ConnectionCallback *on_publish)
 インターフェースを公開する際に呼ばれるコールバックをセットする
 
void setOnSubscribeInterfaces (ConnectionCallback *on_subscribe)
 インターフェースを取得する際に呼ばれるコールバックをセットする
 
void setOnConnected (ConnectionCallback *on_connected)
 接続完了時に呼ばれるコールバックをセットする
 
void setOnUnsubscribeInterfaces (ConnectionCallback *on_unsubscribe)
 インターフェースを解放する際に呼ばれるコールバックをセットする
 
void setOnDisconnected (ConnectionCallback *on_disconnected)
 接続解除に呼ばれるコールバックをセットする
 
void setOnConnectionLost (ConnectionCallback *on_connection_lost)
 ポートの接続がロストした場合に呼び出されるコールバックをセットする
 
void setPortConnectListenerHolder (PortConnectListeners *portconnListeners)
 PortConnectListeners のホルダをセットする
 
virtual DirectPortBasegetDirectPort ()
 direct通信用ポートオブジェクト取得
 

限定公開メンバ関数

void initConnectorListeners () override
 コネクタリスナの初期化
 
- 基底クラス RTC::InPortBase に属する継承限定公開メンバ関数
ReturnCode_t publishInterfaces (ConnectorProfile &cprof) override
 Interface情報を公開する
 
ReturnCode_t subscribeInterfaces (const ConnectorProfile &cprof) override
 Interfaceに接続する
 
void unsubscribeInterfaces (const ConnectorProfile &connector_profile) override
 Interfaceへの接続を解除する
 
void initProviders ()
 InPort provider の初期化
 
void initConsumers ()
 OutPort consumer の初期化
 
bool checkEndian (const coil::Properties &prop, bool &littleEndian)
 シリアライザのエンディアンをチェックする
 
InPortProvidercreateProvider (ConnectorProfile &cprof, coil::Properties &prop)
 InPort provider の生成
 
OutPortConsumercreateConsumer (const ConnectorProfile &cprof, coil::Properties &prop)
 OutPort consumer の生成
 
InPortConnectorcreateConnector (ConnectorProfile &cprof, coil::Properties &prop, InPortProvider *provider)
 InPortPushConnector の生成
 
InPortConnectorcreateConnector (const ConnectorProfile &cprof, coil::Properties &prop, OutPortConsumer *consumer)
 InPortPullConnector の生成
 
OutPortBasegetLocalOutPort (const ConnectorInfo &profile)
 ローカルのピアOutPortを取得
 
- 基底クラス RTC::PortBase に属する継承限定公開メンバ関数
virtual ReturnCode_t connectNext (ConnectorProfile &connector_profile)
 次の Port に対して notify_connect() をコールする
 
virtual ReturnCode_t disconnectNext (ConnectorProfile &cprof)
 次の Port に対して notify_disconnect() をコールする
 
virtual void setConnectionLimit (int limit_value)
 接続の最大数を設定する。
 
virtual ReturnCode_t _publishInterfaces ()
 Interface情報を公開する
 
bool isExistingConnId (const char *id)
 id が既存の ConnectorProfile のものかどうか判定する
 
ConnectorProfile findConnProfile (const char *id)
 id を持つ ConnectorProfile を探す
 
CORBA::Long findConnProfileIndex (const char *id)
 id を持つ ConnectorProfile を探す
 
void updateConnectorProfile (const ConnectorProfile &connector_profile)
 ConnectorProfile の追加もしくは更新
 
bool eraseConnectorProfile (const char *id)
 ConnectorProfile を削除する
 
bool appendInterface (const char *instance_name, const char *type_name, PortInterfacePolarity pol)
 PortInterfaceProfile に インターフェースを登録する
 
bool deleteInterface (const char *name, PortInterfacePolarity pol)
 PortInterfaceProfile からインターフェース登録を削除する
 
template<class ValueType >
void addProperty (const char *key, ValueType value)
 PortProfile の properties に NameValue 値を追加する
 
void appendProperty (const char *key, const char *value)
 PortProfile の properties に NameValue 値を要素に追加する
 
void updateConnectors ()
 存在しないポートをdisconnectする。
 
bool checkPorts (::RTC::PortServiceList &ports)
 ポートの存在を確認する。
 
void onNotifyConnect (const char *portname, RTC::ConnectorProfile &profile)
 
void onNotifyDisconnect (const char *portname, RTC::ConnectorProfile &profile)
 
void onUnsubscribeInterfaces (const char *portname, RTC::ConnectorProfile &profile)
 
void onPublishInterfaces (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
void onConnectNextport (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
void onSubscribeInterfaces (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
void onConnected (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
void onDisconnectNextport (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
void onDisconnected (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
bool isExistingMarshalingType (coil::Properties &con_prop)
 指定のシリアライザが使用可能かを判定する
 

その他の継承メンバ

- 基底クラス RTC::InPortBase に属する継承公開型
using ConnectorList = std::vector<InPortConnector*>
 
- 基底クラス RTC::PortBase に属する継承静的限定公開メンバ関数
static bool isEmptyId (const ConnectorProfile &connector_profile)
 ConnectorProfile の connector_id フィールドが空かどうか判定
 
static std::string getUUID ()
 UUIDを生成する
 
static void setUUID (ConnectorProfile &connector_profile)
 UUIDを生成し ConnectorProfile にセットする
 
- 基底クラス RTC::InPortBase に属する継承限定公開変数類
bool m_singlebuffer
 バッファモード
 
CdrBufferBasem_thebuffer
 バッファ
 
coil::vstring m_providerTypes
 利用可能provider
 
coil::vstring m_consumerTypes
 利用可能consumer
 
ConnectorList m_connectors
 接続リスト
 
bool m_littleEndian
 接続エンディアン
 
ConnectorListenersBasem_listeners
 ConnectorDataListener リスナ
 
- 基底クラス RTC::PortBase に属する継承限定公開変数類
coil::Properties m_properties
 プロパティ
 
Logger rtclog
 ロガーストリーム
 
PortProfile m_profile
 Port の PortProfile
 
RTC::PortService_var m_objref
 Port の オブジェクト参照
 
std::mutex m_profile_mutex
 PortProfile の mutex
 
std::mutex m_connectorsMutex
 
std::string m_ownerInstanceName = "unknown"
 インスタンス名
 
int m_connectionLimit {-1}
 Port の接続の最大数
 
ConnectionCallbackm_onPublishInterfaces {nullptr}
 Callback functor オブジェクト
 
ConnectionCallbackm_onSubscribeInterfaces {nullptr}
 Callback functor オブジェクト
 
ConnectionCallbackm_onConnected {nullptr}
 Callback functor オブジェクト
 
ConnectionCallbackm_onUnsubscribeInterfaces {nullptr}
 Callback functor オブジェクト
 
ConnectionCallbackm_onDisconnected {nullptr}
 Callback functor オブジェクト
 
ConnectionCallbackm_onConnectionLost {nullptr}
 Callback functor オブジェクト
 
PortConnectListenersm_portconnListeners {nullptr}
 PortConnectListenerホルダ
 
DirectPortBasem_directport {nullptr}
 

詳解

template<class DataType>
class RTC::InPort< DataType >

InPort テンプレートクラス

InPort の実装である InPort<T> のテンプレートクラス。 <T> はBasicDataType.idl にて定義されている型で、メンバとして Time 型の tm , および T型の data を持つ構造体でなくてはならない。 InPort は内部にリングバッファを持ち、外部から送信されたデータを順次 このリングバッファに格納する。 データはフラグによって未読、既読状態が管理され、isNew(), write(), read(), isFull(), isEmpty() 等のメソッドによりハンドリングすることができる。

OnRead系コールバック (読み出しに起因するイベントによりコールされる)

  • void OnRead::operator(): InPort::read() を呼び出し読み出しを行う際にコールされる。
  • DataType OnReadConvert::operator(DataType): InPort::read() を呼び出し、データをバッファから読みだす際に呼ばれ データの変換を行う。引数にはバッファから読み出された値が与えられ、 変換後のデータを戻り値として返す。この値がread()の返す値となる。
から
0.2.0

構築子と解体子

◆ InPort()

template<class DataType >
RTC::InPort< DataType >::InPort ( const char * name,
DataType & value )
inline

コンストラクタ

コンストラクタ。 パラメータとして与えられる T 型の変数にバインドされる。

引数
nameInPort 名。InPortBase:name() により参照される。
valueこの InPort にバインドされる T 型の変数

参照先 RTC::InPortBase::addConnectorDataListener(), RTC::PortBase::addProperty(), CdrMemoryStreamInit(), RTC::getSerializerList(), RTC::InPort< DataType >::initConnectorListeners(), RTC::PortBase::m_directport, RTC::ON_BUFFER_READ, RTC::ON_RECEIVED, RTC_DEBUG.

◆ ~InPort()

template<class T >
RTC::InPort< T >::~InPort ( )
overridedefault

デストラクタ

デストラクタ。

関数詳解

◆ getStatus()

template<class DataType >
DataPortStatus RTC::InPort< DataType >::getStatus ( int )
inline

特定のコネクタへの書き込みステータスを得る

InPort は接続ごとに Connector と呼ばれる仮想データチャネルを持 つ。write() 関数はこれら Connector に対してデータを書き込むが、 各 Connector は書き込みごとにステータスを返す。write() 関数では、 すべての Connector が正常終了したときのみ true を返し、それ以外 では false を返却する。この関数は write() が false の場合ステー タスを調べるのに使用することができる。

引数
indexConnector の index
戻り値
ステータス

◆ getStatusList()

template<class DataType >
DataPortStatusList RTC::InPort< DataType >::getStatusList ( )
inline

特定のコネクタへの書き込みステータスリストを得る

InPort は接続ごとに Connector と呼ばれる仮想データチャネルを持 つ。write() 関数はこれら Connector に対してデータを書き込むが、 各 Connector は書き込みごとにステータスを返す。write() 関数では、 すべての Connector が正常終了したときのみ true を返し、それ以外 では false を返却する。この関数は write() が false の場合ステー タスを調べるのに使用することができる。

戻り値
ステータスリスト

◆ initConnectorListeners()

template<class DataType >
void RTC::InPort< DataType >::initConnectorListeners ( )
inlineoverrideprotectedvirtual

コネクタリスナの初期化

RTC::InPortBaseを再実装しています。

参照先 RTC::InPortBase::m_listeners.

参照元 RTC::InPort< DataType >::InPort().

◆ isEmpty() [1/3]

template<class DataType >
bool RTC::InPort< DataType >::isEmpty ( )
inlineoverridevirtual

バッファが空かどうか確認する

InPortのバッファが空かどうかを bool 値で返す。 空の場合は true, 未読データがある場合は false を返す。

戻り値
true バッファは空 false バッファに未読データがある

RTC::DirectInPortBase< DataType >を実装しています。

参照先 RTC::InPortBase::m_connectors, RTC::PortBase::m_connectorsMutex, RTC_DEBUG, RTC_TRACE.

◆ isEmpty() [2/3]

template<class DataType >
virtual bool RTC::InPort< DataType >::isEmpty ( coil::vstring & names)
inlinevirtual

◆ isEmpty() [3/3]

template<class DataType >
virtual bool RTC::InPort< DataType >::isEmpty ( std::string name)
inlinevirtual

バッファが空かどうか確認する

InPortのバッファが空かどうかを bool 値で返す。 空の場合は true, 未読データがある場合は false を返す。

戻り値
true バッファは空 false バッファに未読データがある

参照先 RTC::InPortBase::m_connectors, RTC::PortBase::m_connectorsMutex, RTC::InPort< DataType >::name(), RTC_DEBUG, RTC_TRACE.

◆ isNew() [1/3]

template<class DataType >
bool RTC::InPort< DataType >::isNew ( )
inlineoverridevirtual

最新データが存在するか確認する

InPortに未読の最新データが到着しているかをbool値で返す。 InPortが未接続の場合、および接続コネクタのバッファがEmpty の場合にはfalseを返す。

戻り値
true 未読の最新データが存在する false 未接続またはバッファにデータが存在しない。

RTC::DirectInPortBase< DataType >を実装しています。

参照先 RTC::InPortBase::m_connectors, RTC::PortBase::m_connectorsMutex, RTC_DEBUG, RTC_TRACE.

◆ isNew() [2/3]

template<class DataType >
virtual bool RTC::InPort< DataType >::isNew ( coil::vstring & names)
inlinevirtual

◆ isNew() [3/3]

template<class DataType >
virtual bool RTC::InPort< DataType >::isNew ( std::string name)
inlinevirtual

最新データが存在するか確認する

InPortに未読の最新データが到着しているかをbool値で返す。 InPortが未接続の場合、および接続コネクタのバッファがEmpty の場合にはfalseを返す。

戻り値
true 未読の最新データが存在する false 未接続またはバッファにデータが存在しない。

参照先 RTC::InPortBase::m_connectors, RTC::PortBase::m_connectorsMutex, RTC::InPort< DataType >::name(), RTC_DEBUG, RTC_TRACE.

◆ name()

template<class DataType >
virtual const char * RTC::InPort< DataType >::name ( )
inlinevirtual

ポート名称を取得する。

ポート名称を取得する。

戻り値
ポート名称

参照元 RTC::InPort< DataType >::isEmpty(), RTC::InPort< DataType >::isNew(), RTC::InPort< DataType >::read().

◆ operator>>()

template<class DataType >
void RTC::InPort< DataType >::operator>> ( DataType & rhs)
inline

T 型のデータへ InPort の最新値データを読み込む

InPort に設定されている最新データを読み込み、 指定されたデータ変数に設定する。

引数
rhsInPort バッファから値を読み込む T 型変数

参照先 CORBA_Util::copyData(), RTC::InPort< DataType >::read().

◆ read()

template<class DataType >
bool RTC::InPort< DataType >::read ( std::string name = "")
inlineoverridevirtual

DataPort から値を読み出す

InPortに書き込まれたデータを読みだす。接続数が0、またはバッファに データが書き込まれていない状態で読みだした場合の戻り値は不定である。 バッファが空の状態のとき、 事前に設定されたモード (readback, do_nothing, block) に応じて、 以下のような動作をする。

  • readback: 最後の値を読みなおす。
  • do_nothing: 何もしない
  • block: ブロックする。タイムアウトが設定されている場合は、 タイムアウトするまで待つ。

バッファが空の状態では、InPortにバインドされた変数の値が返される。 したがって、初回読み出し時には不定値を返す可能性がある。 この関数を利用する際には、

  • isNew(), isEmpty() と併用し、事前にバッファ状態をチェックする。
  • 初回読み出し時に不定値を返さないようにバインド変数を事前に初期化する
  • DataPortStatus read(DataType& data) 関数の利用を検討する。

ことが望ましい。

各コールバック関数は以下のように呼び出される。

  • OnRead: read() 関数が呼ばれる際に必ず呼ばれる。
  • OnReadConvert: データの読み出しが成功した場合、読みだしたデータを 引数としてOnReadConvertが呼び出され、戻り値をread()が戻り値 として返す。
  • OnEmpty: バッファが空のためデータの読み出しに失敗した場合呼び出される。 OnEmpty の戻り値を read() の戻り値として返す。
  • OnBufferTimeout: データフロー型がPush型の場合に、読み出し タイムアウトのためにデータの読み出しに失敗した場合に呼ばれる。
  • OnRecvTimeout: データフロー型がPull型の場合に、読み出しタイムアウト のためにデータ読み出しに失敗した場合に呼ばれる。
  • OnReadError: 上記以外の理由で読みだしに失敗した場合に呼ばれる。 理由としては、バッファ設定の不整合、例外の発生などが考えられる が通常は起こりえないためバグの可能性がある。
戻り値
読み出し結果(読み出し成功:true, 読み出し失敗:false)

RTC::InPortBaseを実装しています。

参照先 RTC::BUFFER_EMPTY, RTC::BUFFER_TIMEOUT, RTC::InPortConnector::getDirectData(), RTC::InPortBase::m_connectors, RTC::PortBase::m_connectorsMutex, RTC::InPort< DataType >::name(), RTC::PORT_OK, RTC::InPortConnector::read(), RTC_DEBUG, RTC_ERROR, RTC_TRACE, RTC_WARN.

参照元 RTC::InPort< DataType >::operator>>(), RTC::InPort< DataType >::update().

◆ setOnRead()

template<class DataType >
void RTC::InPort< DataType >::setOnRead ( OnRead< DataType > * on_read)
inline

InPort バッファへデータ読み込み時のコールバックの設定

InPort が持つバッファからデータが読み込まれる直前に呼ばれるコールバック オブジェクトを設定する。

引数
on_readOnRead<DataType>型のオブジェクト

◆ setOnReadConvert()

template<class DataType >
void RTC::InPort< DataType >::setOnReadConvert ( OnReadConvert< DataType > * on_rconvert)
inline

InPort バッファへデータ読み出し時のコールバックの設定

InPort が持つバッファからデータが読み出される際に呼ばれるコールバック オブジェクトを設定する。コールバックオブジェクトの戻り値がread()メソッド の呼出結果となる。

引数
on_rconvertOnReadConvert<DataType>型のオブジェクト

◆ update()

template<class DataType >
virtual void RTC::InPort< DataType >::update ( )
inlinevirtual

バインドされた T 型の変数に InPort バッファの最新値を読み込む

バインドされた T 型のデータに InPort の最新値を読み込む。 コンストラクタで T 型の変数と InPort がバインドされていなければならない。 このメソッドはポリモーフィックに使用される事を前提としているため、 型に依存しない引数、戻り値となっている。

参照先 RTC::InPort< DataType >::read().

◆ write()

template<class DataType >
void RTC::InPort< DataType >::write ( DataType & data)
inlineoverridevirtual

データの書き込み

引数
dataデータ

RTC::DirectInPortBase< DataType >を実装しています。

参照先 CORBA_Util::copyData().


このクラス詳解は次のファイルから抽出されました: