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

リングバッファ実装クラス [詳解]

#include <RingBuffer.h>

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

公開メンバ関数

 RingBuffer (long int length=RINGBUFFER_DEFAULT_LENGTH)
 コンストラクタ [詳解]
 
virtual ~RingBuffer (void)
 仮想デストラクタ [詳解]
 
virtual void init (const coil::Properties &prop)
 バッファの設定 [詳解]
 
virtual size_t length (void) const
 バッファ長を取得する [詳解]
 
virtual ReturnCode length (size_t n)
 バッファの長さをセットする [詳解]
 
virtual ReturnCode reset ()
 バッファの状態をリセットする [詳解]
 
virtual DataType * wptr (long int n=0)
 バッファの現在の書込み要素のポインタ [詳解]
 
virtual ReturnCode advanceWptr (long int n=1, bool unlock_enable=true)
 書込みポインタを進める [詳解]
 
virtual ReturnCode put (const DataType &value)
 バッファにデータを書き込む [詳解]
 
virtual ReturnCode write (const DataType &value, long int sec=-1, long int nsec=0)
 バッファに書き込む [詳解]
 
virtual size_t writable () const
 バッファに書込み可能な要素数 [詳解]
 
virtual bool full (void) const
 バッファfullチェック [詳解]
 
virtual DataType * rptr (long int n=0)
 バッファの現在の読み出し要素のポインタ [詳解]
 
virtual ReturnCode advanceRptr (long int n=1, bool unlock_enable=true)
 読み出しポインタを進める [詳解]
 
virtual ReturnCode get (DataType &value)
 バッファからデータを読み出す [詳解]
 
virtual DataType & get ()
 バッファからデータを読み出す [詳解]
 
virtual ReturnCode read (DataType &value, long int sec=-1, long int nsec=0)
 バッファから読み出す [詳解]
 
virtual size_t readable () const
 バッファから読み出し可能な要素数 [詳解]
 
virtual bool empty (void) const
 バッファemptyチェック [詳解]
 
- 基底クラス RTC::BufferBase< DataType > に属する継承公開メンバ関数
virtual BUFFERSTATUS_ENUM ~BufferBase (void)
 仮想デストラクタ [詳解]
 

公開変数類

BUFFERSTATUS_ENUM typedef coil::Guard< coil::MutexGuard
 

その他の継承メンバ

- 基底クラス RTC::BufferStatus に属する継承公開型
enum  Enum {
  BUFFER_OK = 0, BUFFER_ERROR, BUFFER_FULL, BUFFER_EMPTY,
  NOT_SUPPORTED, TIMEOUT, PRECONDITION_NOT_MET
}
 BufferStatus リターンコード [詳解]
 
- 基底クラス RTC::BufferStatus に属する継承静的公開メンバ関数
static const char * toString (Enum status)
 BufferStatus リターンコードを文字列に変換 [詳解]
 

詳解

template<class DataType>
class RTC::RingBuffer< DataType >

リングバッファ実装クラス

指定した長さのリング状バッファを持つバッファ実装クラス。 バッファ全体にデータが格納された場合、以降のデータは古いデータから 順次上書きされる。 従って、バッファ内には直近のバッファ長分のデータのみ保持される。

注)現在の実装では、一番最後に格納したデータのみバッファから読み出し可能

引数
DataTypeバッファに格納するデータ型
から
0.4.0

構築子と解体子

template<class DataType >
RTC::RingBuffer< DataType >::RingBuffer ( long int  length = RINGBUFFER_DEFAULT_LENGTH)
inline

コンストラクタ

コンストラクタ 指定されたバッファ長でバッファを初期化する。

引数
lengthバッファ長

参照先 RTC::RingBuffer< DataType >::reset().

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

仮想デストラクタ

仮想デストラクタ。

関数詳解

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::advanceRptr ( long int  n = 1,
bool  unlock_enable = true 
)
inlinevirtual

読み出しポインタを進める

現在の読み出し位置のポインタを n 個進める。

引数
n読み出しポインタ + n の位置のポインタ
unlock_enabletrueの場合にバッファフルのブロックを解除する
戻り値
BUFFER_OK: 正常終了 BUFFER_ERROR: 異常終了

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

参照先 RTC::RingBuffer< DataType >::full().

参照元 RTC::RingBuffer< DataType >::read(), RTC::RingBuffer< DataType >::write().

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::advanceWptr ( long int  n = 1,
bool  unlock_enable = true 
)
inlinevirtual

書込みポインタを進める

現在の書き込み位置のポインタを n 個進める。 書き込み可能な要素数以上の数値を指定した場合、PRECONDITION_NOT_MET を返す。

引数
n書込みポインタ + n の位置のポインタ
unlock_enabletrueの場合にバッファエンプティのブロックを解除する
戻り値
BUFFER_OK: 正常終了 PRECONDITION_NOT_MET: n > writable()

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

参照先 RTC::RingBuffer< DataType >::empty().

参照元 RTC::RingBuffer< DataType >::write().

template<class DataType >
virtual bool RTC::RingBuffer< DataType >::empty ( void  ) const
inlinevirtual

バッファemptyチェック

バッファemptyチェック用純粋仮想関数

戻り値
emptyチェック結果(true:バッファempty,false:バッファデータあり)

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

参照先 RTC::RingBuffer< DataType >::length(), coil::normalize(), coil::stringTo().

参照元 RTC::RingBuffer< DataType >::advanceWptr(), RTC::RingBuffer< DataType >::read().

template<class DataType >
virtual bool RTC::RingBuffer< DataType >::full ( void  ) const
inlinevirtual

バッファfullチェック

バッファfullチェック用純粋仮想関数

戻り値
fullチェック結果(true:バッファfull,false:バッファ空きあり)

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

参照元 RTC::RingBuffer< DataType >::advanceRptr(), RTC::RingBuffer< DataType >::write().

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::get ( DataType &  value)
inlinevirtual

バッファからデータを読み出す

バッファからデータを読みだす。読み出しポインタの位置は変更されない。

引数
value読み出しデータ
戻り値
BUFFER_OK: 正常終了 BUFFER_ERROR: 異常終了

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

template<class DataType >
virtual DataType& RTC::RingBuffer< DataType >::get ( void  )
inlinevirtual

バッファからデータを読み出す

バッファからデータを読みだす。読み出しポインタの位置は変更されない。

戻り値
読み出しデータ

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

template<class DataType >
virtual void RTC::RingBuffer< DataType >::init ( const coil::Properties prop)
inlinevirtual

バッファの設定

coil::Properties で与えられるプロパティにより、 バッファの設定を初期化する。 使用できるオプションと意味は以下の通り

  • buffer.length: バッファの長さ。自然数以外の数値が指定されても無視される。す でにバッファが使用状態でも、長さが再設定されたのち、すべての ポインタが初期化される。
  • buffer.write.full_policy: 上書きするかどうかのポリシー。 overwrite (上書き), do_nothing (何もしない), block (ブロックする) block を指定した場合、次の timeout 値を指定すれば、指定時間後 書き込み不可能であればタイムアウトする。 デフォルトは overwrite (上書き)。
  • buffer.write.timeout: タイムアウト時間を [sec] で指定する。デフォルトは 1.0 [sec]。 1 sec -> 1.0, 1 ms -> 0.001, タイムアウトしない -> 0.0
  • buffer.read.empty_policy: バッファが空のときの読み出しポリシー。 readback (最後の要素), do_nothing (何もしない), block (ブロックする) block を指定した場合、次の timeout 値を指定すれば、指定時間後 読み出し不可能であればタイムアウトする。 デフォルトは readback (最後の要素)。
  • buffer.read.timeout: タイムアウト時間 [sec] で指定する。デフォルトは 1.0 [sec]。 1sec -> 1.0, 1ms -> 0.001, タイムアウトしない -> 0.0

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

template<class DataType >
virtual size_t RTC::RingBuffer< DataType >::length ( void  ) const
inlinevirtual

バッファ長を取得する

バッファ長を取得する。

戻り値
バッファ長

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

参照元 RTC::RingBuffer< DataType >::empty().

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::length ( size_t  n)
inlinevirtual

バッファの長さをセットする

バッファ長を設定する。設定不可な場合はNOT_SUPPORTEDが返る。 この実装では BUFFER_OK しか返さない。

戻り値
BUFFER_OK: 正常終了 NOT_SUPPORTED: バッファ長変更不可 BUFFER_ERROR: 異常終了

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

参照先 RTC::RingBuffer< DataType >::reset().

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::put ( const DataType &  value)
inlinevirtual

バッファにデータを書き込む

バッファにデータを書き込む。書き込みポインタの位置は変更されない。 この実装では常に BUFFER_OK を返す。

引数
value書き込み対象データ
戻り値
BUFFER_OK: 正常終了 BUFFER_ERROR: 異常終了

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

参照元 RTC::RingBuffer< DataType >::write().

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::read ( DataType &  value,
long int  sec = -1,
long int  nsec = 0 
)
inlinevirtual

バッファから読み出す

バッファに格納されたデータを読み出す。

第2引数(sec)、第3引数(nsec)が指定されていない場合、バッファ空状 態での読み出しモード (readback, do_nothing, block) は init() で設 定されたモードに従う。

第2引数(sec) に引数が指定された場合は、init() で設定されたモード に関わらず、block モードとなり、バッファが空状態であれば指定時間 待ち、タイムアウトする。第3引数(nsec)は指定されない場合0として扱 われる。タイムアウト待ち中に、書込みスレッド側でバッファへ書込み があれば、ブロッキングは解除されデータが読みだされる。

読み出し時にバッファが空(empty)状態で、別のスレッドがblockモード で書込み待ちをしている場合、signalを発行して書込み側のブロッキン グが解除される。

引数
value読み出し対象データ
secタイムアウト時間 sec (default -1: 無効)
nsecタイムアウト時間 nsec (default 0)
戻り値
BUFFER_OK 正常終了 BUFFER_EMPTY バッファが空状態 TIMEOUT 書込みがタイムアウトした PRECONDITION_NOT_MET 設定異常

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

参照先 RTC::RingBuffer< DataType >::advanceRptr(), RTC::RingBuffer< DataType >::empty(), coil::TimeValue::sec(), coil::TimeValue::usec().

template<class DataType >
virtual size_t RTC::RingBuffer< DataType >::readable ( ) const
inlinevirtual

バッファから読み出し可能な要素数

バッファから読み出し可能な要素数を返す。

戻り値
読み出し可能な要素数
BUFFER_OK: 正常終了 BUFFER_ERROR: 異常終了

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

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::reset ( )
inlinevirtual

バッファの状態をリセットする

バッファの読み出しポインタと書き込みポインタの位置をリセットする。 この実装では BUFFER_OK しか返さない。

戻り値
BUFFER_OK: 正常終了 NOT_SUPPORTED: リセット不可能 BUFFER_ERROR: 異常終了

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

参照元 RTC::RingBuffer< DataType >::length(), RTC::RingBuffer< DataType >::RingBuffer().

template<class DataType >
virtual DataType* RTC::RingBuffer< DataType >::rptr ( long int  n = 0)
inlinevirtual

バッファの現在の読み出し要素のポインタ

バッファの現在の読み出し要素のポインタまたは、n個先のポインタを返す

引数
n読み出しポインタ + n の位置のポインタ
戻り値
読み出し位置のポインタ

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

template<class DataType >
virtual DataType* RTC::RingBuffer< DataType >::wptr ( long int  n = 0)
inlinevirtual

バッファの現在の書込み要素のポインタ

バッファの現在の書込み要素のポインタまたは、n個先のポインタを返す

引数
n書込みポインタ + n の位置のポインタ
戻り値
書込み位置のポインタ

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

template<class DataType >
virtual size_t RTC::RingBuffer< DataType >::writable ( ) const
inlinevirtual

バッファに書込み可能な要素数

バッファに書込み可能な要素数を返す。

戻り値
書き込み可能な要素数

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

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::write ( const DataType &  value,
long int  sec = -1,
long int  nsec = 0 
)
inlinevirtual

バッファに書き込む

引数で与えられたデータをバッファに書き込む。

第2引数(sec)、第3引数(nsec)が指定されていない場合、バッファフル 時の書込みモード (overwrite, do_nothing, block) は init() で設定 されたモードに従う。

第2引数(sec) に引数が指定された場合は、init() で設定されたモード に関わらず、block モードとなり、バッファがフル状態であれば指定時 間まち、タイムアウトする。第3引数(nsec)は指定されない場合0として 扱われる。タイムアウト待ち中に、読み出しスレッド側でバッファから 読み出せば、ブロッキングは解除されデータが書き込まれる。

書き込み時にバッファが空(empty)状態で、別のスレッドがblockモード で読み出し待ちをしている場合、signalを発行して読み出し側のブロッ キングが解除される。

引数
value書き込み対象データ
secタイムアウト時間 sec (default -1: 無効)
nsecタイムアウト時間 nsec (default 0)
戻り値
BUFFER_OK 正常終了 BUFFER_FULL バッファがフル状態 TIMEOUT 書込みがタイムアウトした PRECONDITION_NOT_MET 設定異常

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

参照先 RTC::RingBuffer< DataType >::advanceRptr(), RTC::RingBuffer< DataType >::advanceWptr(), RTC::RingBuffer< DataType >::full(), RTC::RingBuffer< DataType >::put(), coil::TimeValue::sec(), coil::TimeValue::usec().

メンバ詳解

template<class DataType >
BUFFERSTATUS_ENUM typedef coil::Guard<coil::Mutex> RTC::RingBuffer< DataType >::Guard

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