OpenRTM-aist 2.1.0
|
リングバッファ実装クラス [詳解]
#include <RingBuffer.h>
公開メンバ関数 | |
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チェック | |
![]() | |
virtual | ~BufferBase ()=default |
仮想デストラクタ | |
リングバッファ実装クラス
指定した長さのリング状バッファを持つバッファ実装クラス。 バッファ全体にデータが格納された場合、以降のデータは古いデータから 順次上書きされる。 従って、バッファ内には直近のバッファ長分のデータのみ保持される。
注)現在の実装では、一番最後に格納したデータのみバッファから読み出し可能
DataType | バッファに格納するデータ型 |
|
inlineexplicit |
|
overridedefault |
仮想デストラクタ
仮想デストラクタ。
|
inlineoverridevirtual |
読み出しポインタを進める
現在の読み出し位置のポインタを n 個進める。
n | 読み出しポインタ + n の位置のポインタ |
unlock_enable | trueの場合にバッファフルのブロックを解除する |
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::full(), RTC::OK, RTC::PRECONDITION_NOT_MET.
参照元 RTC::RingBuffer< DataType >::read(), RTC::RingBuffer< DataType >::write().
|
inlineoverridevirtual |
書込みポインタを進める
現在の書き込み位置のポインタを n 個進める。 書き込み可能な要素数以上の数値を指定した場合、PRECONDITION_NOT_MET を返す。
n | 書込みポインタ + n の位置のポインタ |
unlock_enable | trueの場合にバッファエンプティのブロックを解除する |
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::empty(), RTC::OK, RTC::PRECONDITION_NOT_MET.
|
inlineoverridevirtual |
バッファemptyチェック
バッファemptyチェック用純粋仮想関数
RTC::BufferBase< DataType >を実装しています。
参照元 RTC::RingBuffer< DataType >::advanceWptr(), RTC::RingBuffer< DataType >::read().
|
inlineoverridevirtual |
バッファfullチェック
バッファfullチェック用純粋仮想関数
RTC::BufferBase< DataType >を実装しています。
参照元 RTC::RingBuffer< DataType >::advanceRptr(), RTC::RingBuffer< DataType >::write().
|
inlineoverridevirtual |
|
inlineoverridevirtual |
バッファからデータを読み出す
バッファからデータを読みだす。読み出しポインタの位置は変更されない。
value | 読み出しデータ |
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::OK.
|
inlineoverridevirtual |
バッファの設定
RTC::BufferBase< DataType >を実装しています。
|
inlineoverridevirtual |
|
inlineoverridevirtual |
バッファの長さをセットする
バッファ長を設定する。設定不可な場合はNOT_SUPPORTEDが返る。 この実装では OK しか返さない。
RTC::BufferBase< DataType >を実装しています。
|
inlineoverridevirtual |
バッファにデータを書き込む
バッファにデータを書き込む。書き込みポインタの位置は変更されない。 この実装では常に OK を返す。
value | 書き込み対象データ |
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::OK.
|
inlineoverridevirtual |
バッファから読み出す
バッファに格納されたデータを読み出す。
第2引数(timeout)が指定されていない場合、バッファ空状態での読み出 しモード (readback, do_nothing, block) は init() で設定された モードに従う。
第2引数(timeout)に引数が指定された場合、init() で設定されたモード に関わらず、block モードとなり、バッファが空状態であれば指定時間 待ち、タイムアウトする。タイムアウト待ち中に、書込みスレッド側で バッファへ書込みがあれば、ブロッキングは解除されデータが読みださ れる。
読み出し時にバッファが空(empty)状態で、別のスレッドがblockモード で書込み待ちをしている場合、signalを発行して書込み側のブロッキン グが解除される。
value | 読み出し対象データ |
timeout | タイムアウト時間 (default -1: 無効) |
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.
|
inlineoverridevirtual |
バッファから読み出し可能な要素数
バッファから読み出し可能な要素数を返す。
RTC::BufferBase< DataType >を実装しています。
|
inlineoverridevirtual |
バッファの状態をリセットする
バッファの読み出しポインタと書き込みポインタの位置をリセットする。 この実装では OK しか返さない。
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::OK.
参照元 RTC::RingBuffer< DataType >::length(), RTC::RingBuffer< DataType >::RingBuffer().
|
inlineoverridevirtual |
バッファの現在の読み出し要素のポインタ
バッファの現在の読み出し要素のポインタまたは、n個先のポインタを返す
n | 読み出しポインタ + n の位置のポインタ |
RTC::BufferBase< DataType >を実装しています。
|
inlineoverridevirtual |
バッファの現在の書込み要素のポインタ
バッファの現在の書込み要素のポインタまたは、n個先のポインタを返す
n | 書込みポインタ + n の位置のポインタ |
RTC::BufferBase< DataType >を実装しています。
|
inlineoverridevirtual |
|
inlineoverridevirtual |
バッファに書き込む
引数で与えられたデータをバッファに書き込む。
第2引数(timeout)が指定されていない場合、バッファフル 時の書込みモード (overwrite, do_nothing, block) は init() で設定 されたモードに従う。
第2引数(timeout)に引数が指定された場合、init() で設定されたモード に関わらず、block モードとなり、バッファがフル状態であれば指定時 間まち、タイムアウトする。タイムアウト待ち中に、読み出しスレッド 側でバッファから読み出せば、ブロッキングは解除されデータが書き込 まれる。
書き込み時にバッファが空(empty)状態で、別のスレッドがblockモード で読み出し待ちをしている場合、signalを発行して読み出し側のブロッ キングが解除される。
value | 書き込み対象データ |
timeout | タイムアウト時間 nsec (default -1: 無効) |
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.