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

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

#include <RingBuffer.h>

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

公開メンバ関数

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

詳解

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

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

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

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

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

構築子と解体子

◆ RingBuffer()

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

コンストラクタ

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

引数
lengthバッファ長

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

◆ ~RingBuffer()

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

仮想デストラクタ

仮想デストラクタ。

関数詳解

◆ advanceRptr()

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

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

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

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

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

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

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

◆ advanceWptr()

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

書込みポインタを進める

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

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

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

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

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

◆ empty()

template<class DataType >
bool RTC::RingBuffer< DataType >::empty ( ) const
inlineoverridevirtual

バッファemptyチェック

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

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

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

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

◆ full()

template<class DataType >
bool RTC::RingBuffer< DataType >::full ( ) const
inlineoverridevirtual

バッファfullチェック

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

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

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

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

◆ get() [1/2]

template<class DataType >
DataType & RTC::RingBuffer< DataType >::get ( )
inlineoverridevirtual

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

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

戻り値
読み出しデータ

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

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

◆ get() [2/2]

template<class DataType >
BufferStatus RTC::RingBuffer< DataType >::get ( DataType & value)
inlineoverridevirtual

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

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

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

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

参照先 RTC::OK.

◆ init()

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

バッファの設定

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 >を実装しています。

◆ length() [1/2]

template<class DataType >
size_t RTC::RingBuffer< DataType >::length ( ) const
inlineoverridevirtual

バッファ長を取得する

バッファ長を取得する。

戻り値
バッファ長

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

◆ length() [2/2]

template<class DataType >
BufferStatus RTC::RingBuffer< DataType >::length ( size_t n)
inlineoverridevirtual

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

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

戻り値
OK: 正常終了

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

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

◆ put()

template<class DataType >
BufferStatus RTC::RingBuffer< DataType >::put ( const DataType & value)
inlineoverridevirtual

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

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

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

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

参照先 RTC::OK.

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

◆ read()

template<class DataType >
BufferStatus RTC::RingBuffer< DataType >::read ( DataType & value,
std::chrono::nanoseconds timeout = std::chrono::nanoseconds(-1) )
inlineoverridevirtual

バッファから読み出す

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

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

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

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

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

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

参照先 RTC::RingBuffer< DataType >::advanceRptr(), RTC::EMPTY, RTC::RingBuffer< DataType >::empty(), RTC::RingBuffer< DataType >::get(), RTC::OK, RTC::PRECONDITION_NOT_MET, RTC::TIMEOUT.

◆ readable()

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

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

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

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

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

◆ reset()

template<class DataType >
BufferStatus RTC::RingBuffer< DataType >::reset ( )
inlineoverridevirtual

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

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

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

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

参照先 RTC::OK.

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

◆ rptr()

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

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

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

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

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

◆ wptr()

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

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

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

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

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

◆ writable()

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

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

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

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

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

◆ write()

template<class DataType >
BufferStatus RTC::RingBuffer< DataType >::write ( const DataType & value,
std::chrono::nanoseconds timeout = std::chrono::nanoseconds(-1) )
inlineoverridevirtual

バッファに書き込む

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

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

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

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

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

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

参照先 RTC::RingBuffer< DataType >::advanceRptr(), RTC::RingBuffer< DataType >::advanceWptr(), RTC::FULL, RTC::RingBuffer< DataType >::full(), RTC::OK, RTC::PRECONDITION_NOT_MET, RTC::RingBuffer< DataType >::put(), RTC::TIMEOUT.


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