TimeValue.py

説明を見る。
00001 #!/usr/bin/env python
00002 # -#- coding: euc-jp -#-
00003 
00004 
00005 ##
00006 # @file TimeValue.py
00007 # @brief TimeValue class
00008 # @date $Date: 2007/08/23$
00009 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara
00010 #
00011 # Copyright (C) 2007-2008
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 
00019 import OpenRTM
00020 
00021 ##
00022 # @if jp
00023 # @class TimeValue
00024 # @brief 時間計算用クラス
00025 # 
00026 # 指定した時間値を保持するためのクラス。
00027 # 時間値に対する各種計算用オペレーションを提供する。
00028 #
00029 # @since 0.4.0
00030 #
00031 # @else
00032 #
00033 # @endif
00034 class TimeValue:
00035   """
00036   """
00037 
00038 
00039 
00040   ##
00041   # @if jp
00042   #
00043   # @brief コンストラクタ
00044   # 
00045   # コンストラクタ
00046   # 指定された秒,マイクロ秒で初期化する。
00047   #
00048   # @param self
00049   # @param sec 秒(デフォルト値:None)
00050   # @param usec マイクロ秒(デフォルト値:None)
00051   # 
00052   # @else
00053   #
00054   # @endif
00055   def __init__(self, sec=None, usec=None):
00056     if sec is None:
00057       self.tv_sec = 0
00058     else:
00059       self.tv_sec = float(sec)
00060 
00061     if usec is None:
00062       self.tv_usec = 0
00063     else:
00064       self.tv_usec = float(usec)
00065 
00066 
00067   ##
00068   # @if jp
00069   #
00070   # @brief 時間減算
00071   # 
00072   # 設定された時間から引数で与えられた時間を減算する。
00073   #
00074   # @param self
00075   # @param tm 減算時間
00076   # 
00077   # @return 減算結果
00078   # 
00079   # @else
00080   #
00081   # @endif
00082   def __sub__(self, tm):
00083     try:
00084       res = TimeValue()
00085     except:
00086       res = OpenRTM.TimeValue()
00087     
00088     if self.tv_sec >= tm.tv_sec:
00089       if self.tv_usec >= tm.tv_usec:
00090         res.tv_sec  = self.tv_sec  - tm.tv_sec
00091         res.tv_usec = self.tv_usec - tm.tv_usec
00092       else:
00093         res.tv_sec  = self.tv_sec  - tm.tv_sec - 1
00094         res.tv_usec = (self.tv_usec + 1000000) - tm.tv_usec
00095     else:
00096       if tm.tv_usec >= self.tv_usec:
00097         res.tv_sec  = -(tm.tv_sec  - self.tv_sec)
00098         res.tv_usec = -(tm.tv_usec - self.tv_usec)
00099       else:
00100         res.tv_sec  = -(tm.tv_sec - self.tv_sec - 1)
00101         res.tv_usec = -(tm.tv_usec + 1000000) + self.tv_usec
00102     return res
00103 
00104 
00105   ##
00106   # @if jp
00107   #
00108   # @brief 時間加算
00109   # 
00110   # 設定された時間に引数で与えられた時間を加算する。
00111   #
00112   # @param self
00113   # @param tm 加算時間
00114   # 
00115   # @return 加算結果
00116   # 
00117   # @else
00118   #
00119   # @endif
00120   def __add__(self, tm):
00121     res = TimeValue()
00122     res.tv_sec  = self.tv_sec  + tm.tv_sec
00123     res.tv_usec = self.tv_usec + tm.tv_usec
00124     if res.tv_usec > 1000000:
00125       res.tv_sec += 1
00126       res.tv_usec -= 1000000
00127     return res
00128 
00129   ##
00130   # @if jp
00131   #
00132   # @brief double型→時間型変換
00133   # 
00134   # 引数で与えられたdouble型を時間型に変換する。
00135   #
00136   # @param self
00137   # @param time 変換元値
00138   # 
00139   # @return 変換結果
00140   # 
00141   # @else
00142   #
00143   # @endif
00144   def set_time(self, time):
00145     self.tv_sec  = long(time)
00146     self.tv_usec = long((time - float(self.tv_sec))*1000000)
00147     return self
00148 
00149   ##
00150   # @if jp
00151   #
00152   # @brief 時間型→double型変換
00153   # 
00154   # 保持している内容をdouble型に変換する。
00155   #
00156   # @param self
00157   # @return double型変換結果
00158   # 
00159   # @else
00160   #
00161   # @endif
00162   def toDouble(self):
00163     return float(self.tv_sec) + float(self.tv_usec/1000000.0)
00164 
00165 
00166   ##
00167   # @if jp
00168   # @brief 設定時間を出力する
00169   #
00170   # 設定時間を文字列出力する。<br>
00171   #
00172   # @param self
00173   #
00174   # @return 設定時間文字列表示
00175   #
00176   # @else
00177   #
00178   # @endif
00179   def __str__(self):
00180     return str(self.tv_sec + self.tv_usec/1000000.0)
00181 
00182   ##
00183   # @if jp
00184   # @brief 符号判定
00185   #
00186   # 保持している内容の符号を判定する。<br>
00187   #
00188   # @param self
00189   #
00190   # @return 正ならば1を、負ならば-1を、0ならば0
00191   #
00192   # @else
00193   #
00194   # @endif
00195   def sign(self):
00196     if self.tv_sec > 0:
00197       return 1
00198     if self.tv_sec < 0:
00199       return -1
00200     if self.tv_usec > 0:
00201       return 1
00202     if self.tv_usec < 0:
00203       return -1
00204     return 0

OpenRTMに対してMon Mar 17 15:11:06 2008に生成されました。  doxygen 1.5.4