OpenRTM-aist
1.2.1
|
リングバッファ実装クラス [詳解]
#include <RingBuffer.h>
公開メンバ関数 | |
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チェック [詳解] | |
![]() | |
virtual BUFFERSTATUS_ENUM | ~BufferBase (void) |
仮想デストラクタ [詳解] | |
公開変数類 | |
BUFFERSTATUS_ENUM typedef coil::Guard< coil::Mutex > | Guard |
その他の継承メンバ | |
![]() | |
enum | Enum { BUFFER_OK = 0, BUFFER_ERROR, BUFFER_FULL, BUFFER_EMPTY, NOT_SUPPORTED, TIMEOUT, PRECONDITION_NOT_MET } |
BufferStatus リターンコード [詳解] | |
![]() | |
static const char * | toString (Enum status) |
BufferStatus リターンコードを文字列に変換 [詳解] | |
リングバッファ実装クラス
指定した長さのリング状バッファを持つバッファ実装クラス。 バッファ全体にデータが格納された場合、以降のデータは古いデータから 順次上書きされる。 従って、バッファ内には直近のバッファ長分のデータのみ保持される。
注)現在の実装では、一番最後に格納したデータのみバッファから読み出し可能
DataType | バッファに格納するデータ型 |
|
inline |
|
inlinevirtual |
仮想デストラクタ
仮想デストラクタ。
|
inlinevirtual |
読み出しポインタを進める
現在の読み出し位置のポインタを n 個進める。
n | 読み出しポインタ + n の位置のポインタ |
unlock_enable | trueの場合にバッファフルのブロックを解除する |
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::full().
参照元 RTC::RingBuffer< DataType >::read(), RTC::RingBuffer< DataType >::write().
|
inlinevirtual |
書込みポインタを進める
現在の書き込み位置のポインタを n 個進める。 書き込み可能な要素数以上の数値を指定した場合、PRECONDITION_NOT_MET を返す。
n | 書込みポインタ + n の位置のポインタ |
unlock_enable | trueの場合にバッファエンプティのブロックを解除する |
RTC::BufferBase< DataType >を実装しています。
|
inlinevirtual |
バッファemptyチェック
バッファemptyチェック用純粋仮想関数
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::length(), coil::normalize(), coil::stringTo().
参照元 RTC::RingBuffer< DataType >::advanceWptr(), RTC::RingBuffer< DataType >::read().
|
inlinevirtual |
バッファfullチェック
バッファfullチェック用純粋仮想関数
RTC::BufferBase< DataType >を実装しています。
参照元 RTC::RingBuffer< DataType >::advanceRptr(), RTC::RingBuffer< DataType >::write().
|
inlinevirtual |
バッファからデータを読み出す
バッファからデータを読みだす。読み出しポインタの位置は変更されない。
value | 読み出しデータ |
RTC::BufferBase< DataType >を実装しています。
|
inlinevirtual |
|
inlinevirtual |
バッファの設定
coil::Properties で与えられるプロパティにより、 バッファの設定を初期化する。 使用できるオプションと意味は以下の通り
RTC::BufferBase< DataType >を実装しています。
|
inlinevirtual |
|
inlinevirtual |
バッファの長さをセットする
バッファ長を設定する。設定不可な場合はNOT_SUPPORTEDが返る。 この実装では BUFFER_OK しか返さない。
RTC::BufferBase< DataType >を実装しています。
|
inlinevirtual |
バッファにデータを書き込む
バッファにデータを書き込む。書き込みポインタの位置は変更されない。 この実装では常に BUFFER_OK を返す。
value | 書き込み対象データ |
RTC::BufferBase< DataType >を実装しています。
|
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) |
RTC::BufferBase< DataType >を実装しています。
参照先 RTC::RingBuffer< DataType >::advanceRptr(), RTC::RingBuffer< DataType >::empty(), coil::TimeValue::sec(), coil::TimeValue::usec().
|
inlinevirtual |
バッファから読み出し可能な要素数
バッファから読み出し可能な要素数を返す。
RTC::BufferBase< DataType >を実装しています。
|
inlinevirtual |
バッファの状態をリセットする
バッファの読み出しポインタと書き込みポインタの位置をリセットする。 この実装では BUFFER_OK しか返さない。
RTC::BufferBase< DataType >を実装しています。
参照元 RTC::RingBuffer< DataType >::length(), RTC::RingBuffer< DataType >::RingBuffer().
|
inlinevirtual |
バッファの現在の読み出し要素のポインタ
バッファの現在の読み出し要素のポインタまたは、n個先のポインタを返す
n | 読み出しポインタ + n の位置のポインタ |
RTC::BufferBase< DataType >を実装しています。
|
inlinevirtual |
バッファの現在の書込み要素のポインタ
バッファの現在の書込み要素のポインタまたは、n個先のポインタを返す
n | 書込みポインタ + n の位置のポインタ |
RTC::BufferBase< DataType >を実装しています。
|
inlinevirtual |
|
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) |
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().
BUFFERSTATUS_ENUM typedef coil::Guard<coil::Mutex> RTC::RingBuffer< DataType >::Guard |