クラス テンプレート RTC::InPort< DataType >

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

#include <InPort.h>

RTC::InPort< DataType >に対する継承グラフ
RTC::InPortBase RTC::PortBase RTC::DataPortStatus

すべてのメンバ一覧

Public メソッド

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 ()
 バッファが空かどうか確認する
bool read ()
 DataPort から値を読み出す.
virtual void update ()
 バインドされた T 型の変数に InPort バッファの最新値を読み込む
void operator>> (DataType &rhs)
 T 型のデータへ InPort の最新値データを読み込む.
void setOnRead (OnRead< DataType > *on_read)
 InPort バッファへデータ読み込み時のコールバックの設定.
void setOnReadConvert (OnReadConvert< DataType > *on_rconvert)
 InPort バッファへデータ読み出し時のコールバックの設定.

説明

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 型の変数にバインドされる。

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

デストラクタ

デストラクタ。


関数

template<class DataType >
virtual bool RTC::InPort< DataType >::isEmpty ( void   )  [inline, virtual]

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

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

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

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

template<class DataType >
virtual bool RTC::InPort< DataType >::isNew (  )  [inline, virtual]

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

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

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

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

template<class DataType >
virtual const char* RTC::InPort< DataType >::name (  )  [inline, virtual]

ポート名称を取得する。

ポート名称を取得する。

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

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

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

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

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

template<class DataType >
bool RTC::InPort< DataType >::read (  )  [inline, virtual]

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_read OnRead<DataType>型のオブジェクト
template<class DataType >
void RTC::InPort< DataType >::setOnReadConvert ( OnReadConvert< DataType > *  on_rconvert  )  [inline]

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

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

引数:
on_rconvert OnReadConvert<DataType>型のオブジェクト
template<class DataType >
virtual void RTC::InPort< DataType >::update ( void   )  [inline, virtual]

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

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

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

OpenRTMに対してThu May 24 23:25:19 2012に生成されました。  doxygen 1.6.3