BufferBase.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: euc-jp -*-
00003 
00004 ##
00005 # @file BufferBase.py
00006 # @brief Buffer abstract class
00007 # @date $Date: 2007/09/12 $
00008 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara
00009 #
00010 # Copyright (C) 2006-2008
00011 #     Noriaki Ando
00012 #     Task-intelligence Research Group,
00013 #     Intelligent Systems Research Institute,
00014 #     National Institute of
00015 #         Advanced Industrial Science and Technology (AIST), Japan
00016 #     All rights reserved.
00017 
00018 import OpenRTM_aist
00019 
00020 ##
00021 # @if jp
00022 # @class BufferBase
00023 # @brief BufferBase 抽象クラス
00024 # 
00025 # 種々のバッファのための抽象インターフェースクラス。
00026 # 具象バッファクラスは、以下の関数の実装を提供しなければならない。
00027 # 
00028 # publicインターフェースとして以下のものを提供する。
00029 #  - write(): バッファに書き込む
00030 #  - read(): バッファから読み出す
00031 #  - length(): バッファ長を返す
00032 #  - isFull(): バッファが満杯である
00033 #  - isEmpty(): バッファが空である
00034 # 
00035 # protectedインターフェースとして以下のものを提供する。
00036 #  - put(): バッファにデータを書き込む
00037 #  - get(): バッファからデータを読み出す
00038 # 
00039 # @since 0.4.0
00040 # 
00041 # @else
00042 # 
00043 # @class BufferBase
00044 # @brief BufferBase abstract class
00045 # 
00046 # This is the abstract interface class for various Buffer.
00047 # 
00048 # @since 0.4.0
00049 # 
00050 # @endif
00051 class BufferBase(OpenRTM_aist.BufferStatus):
00052   """
00053   """
00054 
00055 
00056   ##
00057   # @if jp
00058   # @brief バッファの設定
00059   #
00060   # Properties で与えられるプロパティにより、
00061   # バッファの設定を初期化する。
00062   # 使用できるオプションと意味は以下の通り
00063   #
00064   # - buffer.length:
00065   #     バッファの長さ。自然数以外の数値が指定されても無視される。す
00066   #     でにバッファが使用状態でも、長さが再設定されたのち、すべての
00067   #     ポインタが初期化される。
00068   #
00069   # - buffer.write.full_policy:
00070   #     上書きするかどうかのポリシー。
00071   #     overwrite (上書き), do_nothing (何もしない), block (ブロックする)
00072   #     block を指定した場合、次の timeout 値を指定すれば、指定時間後
00073   #     書き込み不可能であればタイムアウトする。
00074   #     デフォルトは  overwrite (上書き)。
00075   #
00076   # - buffer.write.timeout:
00077   #     タイムアウト時間を [sec] で指定する。デフォルトは 1.0 [sec]。
00078   #     1 sec -> 1.0, 1 ms -> 0.001, タイムアウトしない -> 0.0
00079   #
00080   # - buffer.read.empty_policy:
00081   #     バッファが空のときの読み出しポリシー。
00082   #     readback (最後の要素), do_nothing (何もしない), block (ブロックする)
00083   #     block を指定した場合、次の timeout 値を指定すれば、指定時間後
00084   #     読み出し不可能であればタイムアウトする。
00085   #     デフォルトは readback (最後の要素)。
00086   #
00087   # - buffer.read.timeout:
00088   #     タイムアウト時間 [sec] で指定する。デフォルトは 1.0 [sec]。
00089   #     1sec -> 1.0, 1ms -> 0.001, タイムアウトしない -> 0.0
00090   #
00091   # @else
00092   #
00093   # @endif
00094   def init(self, prop):
00095     pass
00096 
00097 
00098   ##
00099   # @if jp
00100   # 
00101   # @brief バッファの長さを取得する(サブクラス実装用)
00102   # 
00103   # バッファ長を取得する<BR>
00104   # ※サブクラスでの実装参照用
00105   # 
00106   # @param self 
00107   # 
00108   # @return バッファ長
00109   # 
00110   # @else
00111   # 
00112   # @brief Get the buffer length
00113   # 
00114   # @return buffer length
00115   # 
00116   # @endif
00117   def length(self):
00118     pass
00119 
00120 
00121   ##
00122   # @if jp
00123   #
00124   # @brief バッファの状態をリセットする
00125   # 
00126   # バッファの読み出しポインタと書き込みポインタの位置をリセットする。
00127   # 
00128   # @return BUFFER_OK: 正常終了
00129   #         NOT_SUPPORTED: バッファ長変更不可
00130   #         BUFFER_ERROR: 異常終了
00131   # 
00132   # @else
00133   #
00134   # @brief Get the buffer length
00135   #
00136   # Pure virtual function to get the buffer length.
00137   #
00138   # @return buffer length
00139   # 
00140   # @endif
00141   #
00142   def reset(self):
00143     pass
00144 
00145 
00146   ##
00147   # @if jp
00148   #
00149   # @brief バッファの現在の書込み要素のポインタ
00150   # 
00151   # バッファの現在の書込み要素のポインタまたは、n個先のポインタを返す
00152   # 
00153   # @param  n 書込みポインタ + n の位置のポインタ 
00154   # @return 書込み位置のポインタ
00155   # 
00156   # @else
00157   #
00158   # @brief Get the buffer length
00159   #
00160   # Pure virtual function to get the buffer length.
00161   #
00162   # @return buffer length
00163   # 
00164   # @endif
00165   def wptr(self, n=0):
00166     pass
00167 
00168 
00169   ##
00170   # @if jp
00171   #
00172   # @brief 書込みポインタを進める
00173   # 
00174   # 現在の書き込み位置のポインタを n 個進める。
00175   # 
00176   # @param  n 書込みポインタ + n の位置のポインタ 
00177   # @return BUFFER_OK: 正常終了
00178   #         BUFFER_ERROR: 異常終了
00179   # 
00180   # @else
00181   #
00182   # @brief Get the buffer length
00183   #
00184   # Pure virtual function to get the buffer length.
00185   #
00186   # @return buffer length
00187   # 
00188   # @endif
00189   def advanceWptr(self, n = 1):
00190     pass
00191 
00192 
00193   ##
00194   # @if jp
00195   # 
00196   # @brief バッファにデータを格納する(サブクラス実装用)
00197   # 
00198   # バッファへのデータ格納用関数<BR>
00199   # ※サブクラスでの実装参照用
00200   # 
00201   # @param self 
00202   # @param data 対象データ
00203   # 
00204   # @else
00205   # 
00206   # @brief Write data into the buffer
00207   # 
00208   # @endif
00209   def put(self, data):
00210     pass
00211 
00212 
00213   ##
00214   # @if jp
00215   # 
00216   # @brief バッファにデータを書き込む(サブクラス実装用)
00217   # 
00218   # バッファにデータを書き込む<BR>
00219   # ※サブクラスでの実装参照用
00220   # 
00221   # @param self 
00222   # @param value 書き込み対象データ
00223   # 
00224   # @return データ書き込み結果(true:書き込み成功,false:書き込み失敗)
00225   # 
00226   # @else
00227   # 
00228   # @brief Write data into the buffer
00229   # 
00230   # @endif
00231   def write(self, value, sec=-1, nsec=-1):
00232     pass
00233 
00234 
00235   ##
00236   # @if jp
00237   #
00238   # @brief バッファに書込み可能な要素数
00239   # 
00240   # バッファに書込み可能な要素数を返す。
00241   # 
00242   # @return 書き込み可能な要素数
00243   #
00244   # @return BUFFER_OK: 正常終了
00245   #         BUFFER_ERROR: 異常終了
00246   # 
00247   # @else
00248   #
00249   # @brief Write data into the buffer
00250   #
00251   # Pure virtual function to write data into the buffer.
00252   #
00253   # @param value Target data to write.
00254   #
00255   # @return Result of having written in data (true:Successful, false:Failed)
00256   #
00257   # @endif
00258   def writable(self):
00259     pass
00260 
00261 
00262   ##
00263   # @if jp
00264   #
00265   # @brief バッファfullチェック
00266   # 
00267   # バッファfullチェック用純粋仮想関数
00268   #
00269   # @return fullチェック結果(true:バッファfull,false:バッファ空きあり)
00270   # 
00271   # @else
00272   #
00273   # @brief Check on whether the buffer is full.
00274   #
00275   # Pure virtual function to check on whether the buffer is full.
00276   #
00277   # @return True if the buffer is full, else false.
00278   #
00279   # @endif
00280   def full(self):
00281     pass
00282 
00283 
00284   ##
00285   # @if jp
00286   #
00287   # @brief バッファの現在の読み出し要素のポインタ
00288   # 
00289   # バッファの現在の読み出し要素のポインタまたは、n個先のポインタを返す
00290   # 
00291   # @param  n 読み出しポインタ + n の位置のポインタ 
00292   # @return 読み出し位置のポインタ
00293   # 
00294   # @else
00295   #
00296   # @brief Get the buffer length
00297   #
00298   # Pure virtual function to get the buffer length.
00299   #
00300   # @return buffer length
00301   # 
00302   # @endif
00303   def rptr(self, n = 0):
00304     pass
00305 
00306   ##
00307   # @if jp
00308   #
00309   # @brief 読み出しポインタを進める
00310   # 
00311   # 現在の読み出し位置のポインタを n 個進める。
00312   # 
00313   # @param  n 読み出しポインタ + n の位置のポインタ 
00314   # @return BUFFER_OK: 正常終了
00315   #         BUFFER_ERROR: 異常終了
00316   # 
00317   # @else
00318   #
00319   # @brief Get the buffer length
00320   #
00321   # Pure virtual function to get the buffer length.
00322   #
00323   # @return buffer length
00324   # 
00325   # @endif
00326   def advanceRptr(self, n = 1):
00327     pass
00328 
00329 
00330   ##
00331   # @if jp
00332   # 
00333   # @brief バッファからデータを取得する(サブクラス実装用)
00334   # 
00335   # バッファに格納されたデータ取得用関数<BR>
00336   # ※サブクラスでの実装参照用
00337   # 
00338   # @param self 
00339   # 
00340   # @return 取得データ
00341   # 
00342   # @else
00343   # 
00344   # @brief Get data from the buffer
00345   # 
00346   # @endif
00347   def get(self):
00348     pass
00349 
00350 
00351   ##
00352   # @if jp
00353   # 
00354   # @brief バッファからデータを読み出す(サブクラス実装用)
00355   # 
00356   # バッファからデータを読み出す<BR>
00357   # ※サブクラスでの実装参照用
00358   # 
00359   # @param self 
00360   # @param value 読み出しデータ
00361   # 
00362   # @return データ読み出し結果(true:読み出し成功,false:読み出し失敗)
00363   # 
00364   # @else
00365   # 
00366   # @brief Read data from the buffer
00367   # 
00368   # @endif
00369   def read(self, value, sec = -1, nsec = -1):
00370     pass
00371 
00372 
00373   ##
00374   # @if jp
00375   #
00376   # @brief バッファから読み出し可能な要素数
00377   # 
00378   # バッファから読み出し可能な要素数を返す。
00379   # 
00380   # @return 読み出し可能な要素数
00381   #
00382   # @return BUFFER_OK: 正常終了
00383   #         BUFFER_ERROR: 異常終了
00384   # 
00385   # @else
00386   #
00387   # @brief Write data into the buffer
00388   #
00389   # Pure virtual function to write data into the buffer.
00390   #
00391   # @param value Target data to write.
00392   #
00393   # @return Result of having written in data (true:Successful, false:Failed)
00394   #
00395   # @endif
00396   def readable(self):
00397     pass
00398 
00399 
00400   ##
00401   # @if jp
00402   #
00403   # @brief バッファemptyチェック
00404   # 
00405   # バッファemptyチェック用純粋仮想関数
00406   #
00407   # @return emptyチェック結果(true:バッファempty,false:バッファデータあり)
00408   # 
00409   # @else
00410   #
00411   # @brief Check on whether the buffer is empty.
00412   #
00413   # Pure virtual function to check on whether the buffer is empty.
00414   #
00415   # @return True if the buffer is empty, else false.
00416   #
00417   # @endif
00418   def empty(self):
00419     pass
00420 
00421 
00422 
00423 ##
00424 # @if jp
00425 # @class NullBuffer
00426 # @brief ダミーバッファ実装クラス
00427 # 
00428 # バッファ長が1固定のダミーバッファ実装クラス。
00429 # 
00430 # @param DataType バッファに格納するデータ型
00431 # 
00432 # @since 0.4.0
00433 # 
00434 # @else
00435 # 
00436 # @endif
00437 class NullBuffer(BufferBase):
00438   """
00439   """
00440 
00441 
00442 
00443   ##
00444   # @if jp
00445   # 
00446   # @brief コンストラクタ
00447   # 
00448   # コンストラクタ
00449   # バッファ長を1(固定)で初期化する。
00450   # 
00451   # @param self 
00452   # @param size バッファ長(デフォルト値:None,ただし無効)
00453   # 
00454   # @else
00455   # 
00456   # @endif
00457   def __init__(self, size=None):
00458     self._length = 1
00459     self._data = None
00460     self._is_new = False
00461     self._inited = False
00462 
00463 
00464   ##
00465   # @if jp
00466   # 
00467   # @brief バッファ長(1固定)を取得する
00468   # 
00469   # バッファ長を取得する。(常に1を返す。)
00470   # 
00471   # @param self 
00472   # 
00473   # @return バッファ長(1固定)
00474   # 
00475   # @else
00476   # 
00477   # @brief Get the buffer length
00478   # 
00479   # @return buffer length(always 1)
00480   # 
00481   # @endif
00482   def length(self):
00483     return 1
00484 
00485 
00486   ##
00487   # @if jp
00488   # 
00489   # @brief バッファにデータを書き込む
00490   # 
00491   # 引数で与えられたデータをバッファに書き込む。
00492   # 
00493   # @param self 
00494   # @param value 書き込み対象データ
00495   # 
00496   # @return データ書き込み結果(true:書き込み成功,false:書き込み失敗)
00497   # 
00498   # @else
00499   # 
00500   # @brief Write data into the buffer
00501   # 
00502   # @endif
00503   def write(self, value, sec=-1, nsec=-1):
00504     self.put(value)
00505     return True
00506 
00507 
00508   ##
00509   # @if jp
00510   # 
00511   # @brief バッファからデータを読み出す
00512   # 
00513   # バッファに格納されたデータを読み出す。
00514   # 
00515   # @param self 
00516   # @param value 読み出したデータ
00517   # 
00518   # @return データ読み出し結果(true:読み出し成功,false:読み出し失敗)
00519   # 
00520   # @else
00521   # 
00522   # @brief Read data from the buffer
00523   # 
00524   # @endif
00525   def read(self, value):
00526     if not self._inited:
00527       return False
00528     value[0] = self.get()
00529     return True
00530 
00531 
00532   ##
00533   # @if jp
00534   # 
00535   # @brief バッファfullチェック
00536   # 
00537   # バッファfullをチェックする。(常にfalseを返す。)
00538   # 
00539   # @param self 
00540   # 
00541   # @return fullチェック結果(常にfalse)
00542   # 
00543   # @else
00544   # 
00545   # @brief Always false.
00546   # 
00547   # @endif
00548   def isFull(self):
00549     return False
00550 
00551 
00552   ##
00553   # @if jp
00554   # 
00555   # @brief バッファemptyチェック
00556   # 
00557   # バッファemptyをチェックする。(常にfalseを返す。)
00558   # ※要確認
00559   # 
00560   # @param self 
00561   # 
00562   # @return emptyチェック結果(常にfalse)
00563   # 
00564   # @else
00565   # 
00566   # @brief Always false.
00567   # 
00568   # @endif
00569   def isEmpty(self):
00570     return False
00571 
00572 
00573   ##
00574   # @if jp
00575   # 
00576   # @brief 最新データか確認する
00577   # 
00578   # 現在のバッファ位置に格納されているデータが最新データか確認する。
00579   # 
00580   # @param self 
00581   # 
00582   # @return 最新データ確認結果
00583   #            ( true:最新データ.データはまだ読み出されていない
00584   #             false:過去のデータ.データは既に読み出されている)
00585   # 
00586   # @else
00587   # 
00588   # @endif
00589   def isNew(self):
00590     return self._is_new
00591 
00592 
00593   ##
00594   # @if jp
00595   # 
00596   # @brief バッファにデータを格納
00597   # 
00598   # 引数で与えられたデータをバッファに格納する。
00599   # 
00600   # @param self 
00601   # @param data 対象データ
00602   # 
00603   # @else
00604   # 
00605   # @brief Write data into the buffer
00606   # 
00607   # @endif
00608   def put(self, data):
00609     self._data = data
00610     self._is_new = True
00611     self._inited = True
00612 
00613 
00614   ##
00615   # @if jp
00616   # 
00617   # @brief バッファからデータを取得する
00618   # 
00619   # バッファに格納されたデータを取得する。
00620   # 
00621   # @param self 
00622   # 
00623   # @return 取得データ
00624   # 
00625   # @else
00626   # 
00627   # @brief Get data from the buffer
00628   # 
00629   # @endif
00630   def get(self):
00631     self._is_new = False
00632     return self._data
00633 
00634 
00635   ##
00636   # @if jp
00637   # 
00638   # @brief 次に書き込むバッファへの参照を取得する
00639   # 
00640   # 書き込みバッファへの参照を取得する。
00641   # 本バッファ実装ではバッファ長は固定で1であるため,
00642   # 常に同じ位置への参照を返す。
00643   # 
00644   # @param self 
00645   # 
00646   # @return 次の書き込み対象バッファへの参照(固定)
00647   # 
00648   # @else
00649   # 
00650   # @brief Get the buffer's reference to be written the next
00651   # 
00652   # @endif
00653   def getRef(self):
00654     return self._data


openrtm_aist_python
Author(s): Shinji Kurihara
autogenerated on Thu Aug 27 2015 14:17:28