リングバッファ実装クラス [詳細]
#include <RingBuffer.h>
構成 | |
struct | condition |
条件変数構造体 | |
Public メソッド | |
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) |
書込みポインタを進める | |
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) |
読み出しポインタを進める | |
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チェック | |
Public 変数 | |
BUFFERSTATUS_ENUM typedef coil::Guard< coil::Mutex > | Guard |
リングバッファ実装クラス
指定した長さのリング状バッファを持つバッファ実装クラス。 バッファ全体にデータが格納された場合、以降のデータは古いデータから 順次上書きされる。 従って、バッファ内には直近のバッファ長分のデータのみ保持される。
注)現在の実装では、一番最後に格納したデータのみバッファから読み出し可能
DataType | バッファに格納するデータ型 |
RTC::RingBuffer< DataType >::RingBuffer | ( | long int | length = RINGBUFFER_DEFAULT_LENGTH |
) | [inline] |
virtual RTC::RingBuffer< DataType >::~RingBuffer | ( | void | ) | [inline, virtual] |
仮想デストラクタ
仮想デストラクタ。
virtual ReturnCode RTC::RingBuffer< DataType >::advanceRptr | ( | long int | n = 1 |
) | [inline, virtual] |
読み出しポインタを進める
現在の読み出し位置のポインタを n 個進める。
n | 読み出しポインタ + n の位置のポインタ |
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::Guard.
参照元 RTC::RingBuffer< DataType >::read(), と RTC::RingBuffer< DataType >::write().
virtual ReturnCode RTC::RingBuffer< DataType >::advanceWptr | ( | long int | n = 1 |
) | [inline, virtual] |
書込みポインタを進める
現在の書き込み位置のポインタを n 個進める。 書き込み可能な要素数以上の数値を指定した場合、PRECONDITION_NOT_MET を返す。
n | 書込みポインタ + n の位置のポインタ |
RTC::BufferBase< DataType >を実装しています。
virtual bool RTC::RingBuffer< DataType >::empty | ( | void | ) | const [inline, virtual] |
バッファemptyチェック
バッファemptyチェック用純粋仮想関数
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::Guard.
参照元 RTC::RingBuffer< DataType >::read(), と RTC::RingBuffer< DataType >::write().
virtual bool RTC::RingBuffer< DataType >::full | ( | void | ) | const [inline, virtual] |
バッファfullチェック
バッファfullチェック用純粋仮想関数
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::Guard.
参照元 RTC::RingBuffer< DataType >::read(), と RTC::RingBuffer< DataType >::write().
virtual DataType& RTC::RingBuffer< DataType >::get | ( | void | ) | [inline, virtual] |
virtual ReturnCode RTC::RingBuffer< DataType >::get | ( | DataType & | value | ) | [inline, virtual] |
バッファからデータを読み出す
バッファからデータを読みだす。読み出しポインタの位置は変更されない。
value | 読み出しデータ |
RTC::BufferBase< DataType >を実装しています。
virtual void RTC::RingBuffer< DataType >::init | ( | const coil::Properties & | prop | ) | [inline, virtual] |
バッファの設定
coil::Properties で与えられるプロパティにより、 バッファの設定を初期化する。 使用できるオプションと意味は以下の通り
RTC::BufferBase< DataType >を実装しています。
virtual ReturnCode RTC::RingBuffer< DataType >::length | ( | size_t | n | ) | [inline, virtual] |
バッファの長さをセットする
バッファ長を設定する。設定不可な場合はNOT_SUPPORTEDが返る。 この実装では BUFFER_OK しか返さない。
RTC::BufferBase< DataType >を実装しています。
virtual size_t RTC::RingBuffer< DataType >::length | ( | void | ) | const [inline, virtual] |
virtual ReturnCode RTC::RingBuffer< DataType >::put | ( | const DataType & | value | ) | [inline, virtual] |
バッファにデータを書き込む
バッファにデータを書き込む。書き込みポインタの位置は変更されない。 この実装では常に BUFFER_OK を返す。
value | 書き込み対象データ |
RTC::BufferBase< DataType >を実装しています。
virtual ReturnCode RTC::RingBuffer< DataType >::read | ( | DataType & | value, | |
long int | sec = -1 , |
|||
long int | nsec = 0 | |||
) | [inline, virtual] |
バッファから読み出す
バッファに格納されたデータを読み出す。
第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) |
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::advanceRptr(), RTC::RingBuffer< DataType >::empty(), RTC::RingBuffer< DataType >::full(), RTC::RingBuffer< DataType >::Guard, coil::TimeValue::sec(), と coil::TimeValue::usec().
virtual size_t RTC::RingBuffer< DataType >::readable | ( | ) | const [inline, virtual] |
バッファから読み出し可能な要素数
バッファから読み出し可能な要素数を返す。
RTC::BufferBase< DataType >を実装しています。
virtual ReturnCode RTC::RingBuffer< DataType >::reset | ( | ) | [inline, virtual] |
バッファの状態をリセットする
バッファの読み出しポインタと書き込みポインタの位置をリセットする。 この実装では BUFFER_OK しか返さない。
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::Guard.
参照元 RTC::RingBuffer< DataType >::length(), と RTC::RingBuffer< DataType >::RingBuffer().
virtual DataType* RTC::RingBuffer< DataType >::rptr | ( | long int | n = 0 |
) | [inline, virtual] |
バッファの現在の読み出し要素のポインタ
バッファの現在の読み出し要素のポインタまたは、n個先のポインタを返す
n | 読み出しポインタ + n の位置のポインタ |
RTC::BufferBase< DataType >を実装しています。
virtual DataType* RTC::RingBuffer< DataType >::wptr | ( | long int | n = 0 |
) | [inline, virtual] |
バッファの現在の書込み要素のポインタ
バッファの現在の書込み要素のポインタまたは、n個先のポインタを返す
n | 書込みポインタ + n の位置のポインタ |
RTC::BufferBase< DataType >を実装しています。
virtual size_t RTC::RingBuffer< DataType >::writable | ( | ) | const [inline, virtual] |
virtual ReturnCode RTC::RingBuffer< DataType >::write | ( | const DataType & | value, | |
long int | sec = -1 , |
|||
long int | nsec = 0 | |||
) | [inline, virtual] |
バッファに書き込む
引数で与えられたデータをバッファに書き込む。
第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) |
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::advanceRptr(), RTC::RingBuffer< DataType >::advanceWptr(), RTC::RingBuffer< DataType >::empty(), RTC::RingBuffer< DataType >::full(), RTC::RingBuffer< DataType >::Guard, RTC::RingBuffer< DataType >::put(), coil::TimeValue::sec(), と coil::TimeValue::usec().
BUFFERSTATUS_ENUM typedef coil::Guard<coil::Mutex> RTC::RingBuffer< DataType >::Guard |
参照元 RTC::RingBuffer< DataType >::advanceRptr(), RTC::RingBuffer< DataType >::advanceWptr(), RTC::RingBuffer< DataType >::empty(), RTC::RingBuffer< DataType >::full(), RTC::RingBuffer< DataType >::get(), RTC::RingBuffer< DataType >::length(), RTC::RingBuffer< DataType >::put(), RTC::RingBuffer< DataType >::read(), RTC::RingBuffer< DataType >::readable(), RTC::RingBuffer< DataType >::reset(), RTC::RingBuffer< DataType >::rptr(), RTC::RingBuffer< DataType >::wptr(), RTC::RingBuffer< DataType >::writable(), と RTC::RingBuffer< DataType >::write().