OpenRTM-aist-Python 1.1.2
公開メンバ関数 | 全メンバ一覧
OpenRTM_aist.RingBuffer.RingBuffer クラス

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

OpenRTM_aist.RingBuffer.RingBuffer の継承関係図
OpenRTM_aist.BufferBase.BufferBase OpenRTM_aist.BufferStatus.BufferStatus OpenRTM_aist.CdrRingBuffer.CdrRingBuffer

公開メンバ関数

def __init__ (self, length=RINGBUFFER_DEFAULT_LENGTH)
 コンストラクタ [詳解]
 
def init (self, prop)
 バッファの設定 [詳解]
 
def length (self, n=None)
 バッファ長を取得する [詳解]
 
def reset (self)
 バッファの状態をリセットする [詳解]
 
def wptr (self, n=0)
 バッファの現在の書込み要素のポインタ [詳解]
 
def advanceWptr (self, n=1)
 書込みポインタを進める [詳解]
 
def put (self, value)
 バッファにデータを書き込む [詳解]
 
def write (self, value, sec=-1, nsec=0)
 バッファに書き込む [詳解]
 
def writable (self)
 バッファに書込み可能な要素数 [詳解]
 
def full (self)
 バッファfullチェック [詳解]
 
def rptr (self, n=0)
 バッファの現在の読み出し要素のポインタ [詳解]
 
def advanceRptr (self, n=1)
 読み出しポインタを進める [詳解]
 
def get (self, value=None)
 バッファからデータを読み出す [詳解]
 
def read (self, value, sec=-1, nsec=0)
 バッファから読み出す [詳解]
 
def readable (self)
 バッファから読み出し可能な要素数 [詳解]
 
def empty (self)
 バッファemptyチェック [詳解]
 
- 基底クラス OpenRTM_aist.BufferBase.BufferBase に属する継承公開メンバ関数
def init (self, prop)
 バッファの設定 [詳解]
 
def length (self)
 バッファの長さを取得する(サブクラス実装用) [詳解]
 
def reset (self)
 バッファの状態をリセットする [詳解]
 
def wptr (self, n=0)
 バッファの現在の書込み要素のポインタ [詳解]
 
def advanceWptr (self, n=1)
 書込みポインタを進める [詳解]
 
def put (self, data)
 バッファにデータを格納する(サブクラス実装用) [詳解]
 
def write (self, value, sec=-1, nsec=-1)
 バッファにデータを書き込む(サブクラス実装用) [詳解]
 
def writable (self)
 バッファに書込み可能な要素数 [詳解]
 
def full (self)
 バッファfullチェック [詳解]
 
def rptr (self, n=0)
 バッファの現在の読み出し要素のポインタ [詳解]
 
def advanceRptr (self, n=1)
 読み出しポインタを進める [詳解]
 
def get (self)
 バッファからデータを取得する(サブクラス実装用) [詳解]
 
def read (self, value, sec=-1, nsec=-1)
 バッファからデータを読み出す(サブクラス実装用) [詳解]
 
def readable (self)
 バッファから読み出し可能な要素数 [詳解]
 
def empty (self)
 バッファemptyチェック [詳解]
 

詳解

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

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

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

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

構築子と解体子

def OpenRTM_aist.RingBuffer.RingBuffer.__init__ (   self,
  length = RINGBUFFER_DEFAULT_LENGTH 
)

コンストラクタ

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

引数
lengthバッファ長

メソッド詳解

def OpenRTM_aist.RingBuffer.RingBuffer.advanceRptr (   self,
  n = 1 
)

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

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

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

DataType* rptr(long int n = 0)

def OpenRTM_aist.RingBuffer.RingBuffer.advanceWptr (   self,
  n = 1 
)

書込みポインタを進める

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

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

ReturnCode advanceWptr(long int n = 1)

def OpenRTM_aist.RingBuffer.RingBuffer.empty (   self)

バッファemptyチェック

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

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

bool empty(void) const

def OpenRTM_aist.RingBuffer.RingBuffer.full (   self)

バッファfullチェック

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

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

bool full(void) const

def OpenRTM_aist.RingBuffer.RingBuffer.get (   self,
  value = None 
)

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

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

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

ReturnCode get(DataType& value)

def OpenRTM_aist.RingBuffer.RingBuffer.init (   self,
  prop 
)

バッファの設定

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

void init(const coil::Properties& prop)

def OpenRTM_aist.RingBuffer.RingBuffer.length (   self,
  n = None 
)

バッファ長を取得する

バッファ長を取得する。

引数
self
戻り値
バッファ長

size_t length(void) const

def OpenRTM_aist.RingBuffer.RingBuffer.put (   self,
  value 
)

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

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

引数
value書き込み対象データ
戻り値
BUFFER_OK: 正常終了 BUFFER_ERROR: 異常終了
def OpenRTM_aist.RingBuffer.RingBuffer.read (   self,
  value,
  sec = -1,
  nsec = 0 
)

バッファから読み出す

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

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

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

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

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

ReturnCode read(DataType& value, long int sec = -1, long int nsec = 0)

def OpenRTM_aist.RingBuffer.RingBuffer.readable (   self)

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

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

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

size_t readable() const

def OpenRTM_aist.RingBuffer.RingBuffer.reset (   self)

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

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

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

ReturnCode reset()

def OpenRTM_aist.RingBuffer.RingBuffer.rptr (   self,
  n = 0 
)

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

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

引数
n読み出しポインタ + n の位置のポインタ
戻り値
読み出し位置のポインタ
def OpenRTM_aist.RingBuffer.RingBuffer.wptr (   self,
  n = 0 
)

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

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

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

DataType* wptr(long int n = 0)

def OpenRTM_aist.RingBuffer.RingBuffer.writable (   self)

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

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

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

size_t writable() const

def OpenRTM_aist.RingBuffer.RingBuffer.write (   self,
  value,
  sec = -1,
  nsec = 0 
)

バッファに書き込む

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

第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 設定異常

ReturnCode write(const DataType& value, long int sec = -1, long int nsec = 0)


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