OpenRTM-aist  1.2.1
公開メンバ関数 | 全メンバ一覧
RTC::InPort< DataType > クラステンプレート

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

#include <InPort.h>

RTC::InPort< DataType > の継承関係図
Inheritance graph
[凡例]
RTC::InPort< DataType > 連携図
Collaboration graph
[凡例]

公開メンバ関数

DATAPORTSTATUS_ENUM InPort (const char *name, DataType &value, int bufsize=64, bool read_block=false, bool write_block=false, int read_timeout=0, int write_timeout=0)
 コンストラクタ [詳解]
 
virtual ~InPort (void)
 デストラクタ [詳解]
 
virtual const char * name ()
 ポート名称を取得する。 [詳解]
 
virtual bool isNew ()
 最新データが存在するか確認する [詳解]
 
virtual bool isEmpty ()
 バッファが空かどうか確認する [詳解]
 
virtual void write (const DataType &data)
 データの書き込み [詳解]
 
bool read ()
 DataPort から値を読み出す [詳解]
 
virtual void update ()
 バインドされた T 型の変数に InPort バッファの最新値を読み込む [詳解]
 
void operator>> (DataType &rhs)
 T 型のデータへ InPort の最新値データを読み込む [詳解]
 
DataPortStatus::Enum getStatus (int index)
 特定のコネクタへの書き込みステータスを得る [詳解]
 
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)
 コンストラクタ [詳解]
 
virtual ~InPortBase (void)
 デストラクタ [詳解]
 
void init (coil::Properties &prop)
 プロパティの初期化 [詳解]
 
coil::Propertiesproperties ()
 プロパティを取得する [詳解]
 
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を名前で取得 [詳解]
 
virtual void activateInterfaces ()
 InPortを activates する [詳解]
 
virtual void deactivateInterfaces ()
 全ての Port のインターフェースを deactivates する [詳解]
 
void addConnectorDataListener (ConnectorDataListenerType listener_type, ConnectorDataListener *listener, bool autoclean=true)
 ConnectorDataListener リスナを追加する [詳解]
 
void removeConnectorDataListener (ConnectorDataListenerType listener_type, ConnectorDataListener *listener)
 ConnectorDataListener リスナを削除する [詳解]
 
void addConnectorListener (ConnectorListenerType callback_type, ConnectorListener *listener, bool autoclean=true)
 ConnectorListener リスナを追加する [詳解]
 
void removeConnectorListener (ConnectorListenerType callback_type, ConnectorListener *listener)
 ConnectorDataListener リスナを削除する [詳解]
 
bool isLittleEndian ()
 endian 設定を返す [詳解]
 
virtual ReturnCode_t connect (ConnectorProfile &connector_profile) throw (CORBA::SystemException)
 [CORBA interface] Port の接続を行う [詳解]
 
virtual ConnectorListenersgetListeners ()
 リスナホルダを取得する [詳解]
 
virtual ReturnCode_t notify_connect (ConnectorProfile &connector_profile) throw (CORBA::SystemException)
 [CORBA interface] Port の接続通知を行う [詳解]
 
- 基底クラス RTC::PortBase に属する継承公開メンバ関数
 PortBase (const char *name="")
 コンストラクタ [詳解]
 
virtual ~PortBase (void)
 デストラクタ [詳解]
 
virtual PortProfile * get_port_profile () throw (CORBA::SystemException)
 [CORBA interface] PortProfileを取得する [詳解]
 
const PortProfile & getPortProfile () const
 PortProfile を取得する。 [詳解]
 
virtual ConnectorProfileList * get_connector_profiles () throw (CORBA::SystemException)
 [CORBA interface] ConnectorProfileListを取得する [詳解]
 
virtual ConnectorProfile * get_connector_profile (const char *connector_id) throw (CORBA::SystemException)
 [CORBA interface] ConnectorProfile を取得する [詳解]
 
virtual ReturnCode_t disconnect (const char *connector_id) throw (CORBA::SystemException)
 [CORBA interface] Port の接続を解除する [詳解]
 
virtual ReturnCode_t notify_disconnect (const char *connector_id) throw (CORBA::SystemException)
 [CORBA interface] Port の接続解除通知を行う [詳解]
 
virtual ReturnCode_t disconnect_all () throw (CORBA::SystemException)
 [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_subscribe)
 インターフェースを解放する際に呼ばれるコールバックをセットする [詳解]
 
void setOnDisconnected (ConnectionCallback *on_disconnected)
 接続解除に呼ばれるコールバックをセットする [詳解]
 
void setOnConnectionLost (ConnectionCallback *on_connection_lost)
 ポートの接続がロストした場合に呼び出されるコールバックをセットする [詳解]
 
void setPortConnectListenerHolder (PortConnectListeners *portconnListeners)
 PortConnectListeners のホルダをセットする [詳解]
 
virtual DirectPortBasegetDirectPort ()
 direct通信用ポートオブジェクト取得 [詳解]
 

その他の継承メンバ

- 基底クラス RTC::DataPortStatus に属する継承公開型
enum  Enum {
  PORT_OK = 0, PORT_ERROR, BUFFER_ERROR, BUFFER_FULL,
  BUFFER_EMPTY, BUFFER_TIMEOUT, SEND_FULL, SEND_TIMEOUT,
  RECV_EMPTY, RECV_TIMEOUT, INVALID_ARGS, PRECONDITION_NOT_MET,
  CONNECTION_LOST, UNKNOWN_ERROR
}
 
- 基底クラス RTC::DataPortStatus に属する継承静的公開メンバ関数
static const char * toString (DataPortStatus::Enum status)
 DataPortStatus リターンコードを文字列に変換 [詳解]
 
- 基底クラス RTC::InPortBase に属する継承公開変数類
DATAPORTSTATUS_ENUM typedef std::vector< InPortConnector * > ConnectorList
 
- 基底クラス RTC::PortBase に属する継承限定公開型
typedef coil::Guard< coil::MutexGuard
 
- 基底クラス RTC::InPortBase に属する継承限定公開メンバ関数
virtual ReturnCode_t publishInterfaces (ConnectorProfile &connector_profile)
 Interface情報を公開する [詳解]
 
virtual ReturnCode_t subscribeInterfaces (const ConnectorProfile &connector_profile)
 Interfaceに接続する [詳解]
 
virtual void unsubscribeInterfaces (const ConnectorProfile &connector_profile)
 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 &connector_profile)
 次の Port に対して notify_disconnect() をコールする [詳解]
 
virtual void setConnectionLimit (int limit_value)
 接続の最大数を設定する。 [詳解]
 
virtual ReturnCode_t _publishInterfaces (void)
 Interface情報を公開する [詳解]
 
bool isEmptyId (const ConnectorProfile &connector_profile) const
 ConnectorProfile の connector_id フィールドが空かどうか判定 [詳解]
 
const std::string getUUID () const
 UUIDを生成する [詳解]
 
void setUUID (ConnectorProfile &connector_profile) const
 UUIDを生成し ConnectorProfile にセットする [詳解]
 
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 *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)
 
- 基底クラス RTC::InPortBase に属する継承限定公開変数類
bool m_singlebuffer
 バッファモード [詳解]
 
CdrBufferBasem_thebuffer
 バッファ [詳解]
 
coil::vstring m_providerTypes
 利用可能provider [詳解]
 
coil::vstring m_consumerTypes
 利用可能consumer [詳解]
 
ConnectorList m_connectors
 接続リスト [詳解]
 
bool m_littleEndian
 接続エンディアン [詳解]
 
ConnectorListeners m_listeners
 ConnectorDataListener リスナ [詳解]
 
- 基底クラス RTC::PortBase に属する継承限定公開変数類
coil::Properties m_properties
 プロパティ [詳解]
 
Logger rtclog
 ロガーストリーム [詳解]
 
PortProfile m_profile
 Port の PortProfile. [詳解]
 
RTC::PortService_var m_objref
 Port の オブジェクト参照 [詳解]
 
coil::Mutex m_profile_mutex
 PortProfile の mutex. [詳解]
 
coil::Mutex m_connectorsMutex
 
std::string m_ownerInstanceName
 インスタンス名 [詳解]
 
int m_connectionLimit
 Port の接続の最大数 [詳解]
 
ConnectionCallbackm_onPublishInterfaces
 Callback functor オブジェクト [詳解]
 
ConnectionCallbackm_onSubscribeInterfaces
 Callback functor オブジェクト [詳解]
 
ConnectionCallbackm_onConnected
 Callback functor オブジェクト [詳解]
 
ConnectionCallbackm_onUnsubscribeInterfaces
 Callback functor オブジェクト [詳解]
 
ConnectionCallbackm_onDisconnected
 Callback functor オブジェクト [詳解]
 
ConnectionCallbackm_onConnectionLost
 Callback functor オブジェクト [詳解]
 
PortConnectListenersm_portconnListeners
 PortConnectListenerホルダ [詳解]
 
DirectPortBasem_directport
 

詳解

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

InPort テンプレートクラス

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

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

から
0.2.0

構築子と解体子

template<class DataType >
DATAPORTSTATUS_ENUM RTC::InPort< DataType >::InPort ( const char *  name,
DataType &  value,
int  bufsize = 64,
bool  read_block = false,
bool  write_block = false,
int  read_timeout = 0,
int  write_timeout = 0 
)
inline

コンストラクタ

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

引数
nameInPort 名。InPortBase:name() により参照される。
valueこの InPort にバインドされる T 型の変数
bufsizeInPort 内部のリングバッファのバッファ長(デフォルト値:64)
read_block読込ブロックフラグ。 データ読込時に未読データがない場合、次のデータ受信までブロックする かどうかを設定(デフォルト値:false)
write_block書込ブロックフラグ。 データ書込時にバッファがフルであった場合、バッファに空きができる までブロックするかどうかを設定(デフォルト値:false)
read_timeout読込ブロックを指定していない場合の、データ読取タイム アウト時間(ミリ秒)(デフォルト値:0)
write_timeout書込ブロックを指定していない場合の、データ書込タイム アウト時間(ミリ秒)(デフォルト値:0)

参照先 RTC::InPortBase::addConnectorDataListener(), RTC::PortBase::m_directport, RTC::ON_BUFFER_READ, RTC::ON_RECEIVED.

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

デストラクタ

デストラクタ。

関数詳解

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

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

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

引数
indexConnector の index
戻り値
ステータス
template<class DataType >
DataPortStatusList RTC::InPort< DataType >::getStatusList ( )
inline

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

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

戻り値
ステータスリスト
template<class DataType >
virtual bool RTC::InPort< DataType >::isEmpty ( void  )
inlinevirtual

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

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

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

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

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

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

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

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

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

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

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

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

ポート名称を取得する。

ポート名称を取得する。

戻り値
ポート名称
template<class DataType >
void RTC::InPort< DataType >::operator>> ( DataType &  rhs)
inline

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

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

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

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

template<class DataType >
bool RTC::InPort< DataType >::read ( )
inlinevirtual

DataPort から値を読み出す

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

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

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

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

ことが望ましい。

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

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

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

参照先 RTC::DataPortStatus::BUFFER_EMPTY, RTC::DataPortStatus::BUFFER_TIMEOUT, RTC::InPortBase::m_connectors, RTC::PortBase::m_connectorsMutex, RTC::DataPortStatus::PORT_OK, RTC_DEBUG, RTC_ERROR, RTC_TRACE, RTC_WARN.

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

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

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

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

引数
on_readOnRead<DataType>型のオブジェクト
template<class DataType >
void RTC::InPort< DataType >::setOnReadConvert ( OnReadConvert< DataType > *  on_rconvert)
inline

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

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

引数
on_rconvertOnReadConvert<DataType>型のオブジェクト
template<class DataType >
virtual void RTC::InPort< DataType >::update ( void  )
inlinevirtual

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

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

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

template<class DataType >
virtual void RTC::InPort< DataType >::write ( const DataType &  data)
inlinevirtual

データの書き込み

引数
dataデータ

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


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