クラス テンプレート RTC::RingBuffer< DataType >

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

#include <RingBuffer.h>

RTC::RingBuffer< DataType >に対する継承グラフ
RTC::BufferBase< DataType > RTC::BufferStatus

すべてのメンバ一覧

構成

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

説明

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   )  [inline, virtual]

仮想デストラクタ

仮想デストラクタ。


関数

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::advanceRptr ( long int  n = 1  )  [inline, virtual]

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

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

引数:
n 読み出しポインタ + n の位置のポインタ
戻り値:
BUFFER_OK: 正常終了 BUFFER_ERROR: 異常終了

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

参照先 RTC::RingBuffer< DataType >::Guard.

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

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::advanceWptr ( long int  n = 1  )  [inline, virtual]

書込みポインタを進める

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

引数:
n 書込みポインタ + n の位置のポインタ
戻り値:
BUFFER_OK: 正常終了 PRECONDITION_NOT_MET: n > writable()

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

参照先 RTC::RingBuffer< DataType >::Guard.

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

template<class DataType >
virtual bool RTC::RingBuffer< DataType >::empty ( void   )  const [inline, virtual]

バッファemptyチェック

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

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

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

参照先 RTC::RingBuffer< DataType >::Guard.

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

template<class DataType >
virtual bool RTC::RingBuffer< DataType >::full ( void   )  const [inline, virtual]

バッファfullチェック

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

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

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

参照先 RTC::RingBuffer< DataType >::Guard.

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

template<class DataType >
virtual DataType& RTC::RingBuffer< DataType >::get ( void   )  [inline, virtual]

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

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

戻り値:
読み出しデータ

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

参照先 RTC::RingBuffer< DataType >::Guard.

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::get ( DataType &  value  )  [inline, virtual]

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

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

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

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

参照先 RTC::RingBuffer< DataType >::Guard.

template<class DataType >
virtual void RTC::RingBuffer< DataType >::init ( const coil::Properties prop  )  [inline, virtual]

バッファの設定

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 ReturnCode RTC::RingBuffer< DataType >::length ( size_t  n  )  [inline, virtual]

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

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

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

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

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

template<class DataType >
virtual size_t RTC::RingBuffer< DataType >::length ( void   )  const [inline, virtual]

バッファ長を取得する

バッファ長を取得する。

戻り値:
バッファ長

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

参照先 RTC::RingBuffer< DataType >::Guard.

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::put ( const DataType &  value  )  [inline, virtual]

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

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

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

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

参照先 RTC::RingBuffer< DataType >::Guard.

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

template<class 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)
戻り値:
BUFFER_OK 正常終了 BUFFER_EMPTY バッファが空状態 TIMEOUT 書込みがタイムアウトした PRECONDITION_NOT_MET 設定異常

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().

template<class DataType >
virtual size_t RTC::RingBuffer< DataType >::readable (  )  const [inline, virtual]

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

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

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

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

参照先 RTC::RingBuffer< DataType >::Guard.

template<class DataType >
virtual ReturnCode RTC::RingBuffer< DataType >::reset (  )  [inline, virtual]

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

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

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

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

参照先 RTC::RingBuffer< DataType >::Guard.

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

template<class DataType >
virtual DataType* RTC::RingBuffer< DataType >::rptr ( long int  n = 0  )  [inline, virtual]

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

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

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

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

参照先 RTC::RingBuffer< DataType >::Guard.

template<class DataType >
virtual DataType* RTC::RingBuffer< DataType >::wptr ( long int  n = 0  )  [inline, virtual]

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

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

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

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

参照先 RTC::RingBuffer< DataType >::Guard.

template<class DataType >
virtual size_t RTC::RingBuffer< DataType >::writable (  )  const [inline, virtual]

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

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

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

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

参照先 RTC::RingBuffer< DataType >::Guard.

template<class DataType >
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)
戻り値:
BUFFER_OK 正常終了 BUFFER_FULL バッファがフル状態 TIMEOUT 書込みがタイムアウトした PRECONDITION_NOT_MET 設定異常

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().


変数

template<class DataType >
BUFFERSTATUS_ENUM typedef coil::Guard<coil::Mutex> RTC::RingBuffer< DataType >::Guard
OpenRTMに対してThu May 24 23:25:20 2012に生成されました。  doxygen 1.6.3