NumberingPolicy.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: euc-jp -*-
00003 
00004 ##
00005 # @file NumberingPolicy.py
00006 # @brief Object numbering policy class
00007 # @date $Date: 2007/08/23$
00008 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara
00009 #
00010 # Copyright (C) 2006-2008
00011 #     Task-intelligence Research Group,
00012 #     Intelligent Systems Research Institute,
00013 #     National Institute of
00014 #         Advanced Industrial Science and Technology (AIST), Japan
00015 #     All rights reserved.
00016 
00017 import string
00018 import OpenRTM_aist
00019 
00020 ##
00021 # @if jp
00022 #
00023 # @class NumberingPolicy
00024 # @brief オブジェクト生成時ネーミング・ポリシー(命名規則)管理用抽象クラス
00025 #
00026 # オブジェクトを生成する際のネーミング・ポリシー(命名規則)を管理するための
00027 # 抽象クラス。
00028 # 具象クラスは、以下の関数の実装を提供しなければならない。
00029 # - onCreate() : オブジェクト生成時の名称作成
00030 # - onDelete() : オブジェクト削除時の名称解放
00031 #
00032 # @since 0.4.0
00033 #
00034 # @else
00035 #
00036 # @endif
00037 class NumberingPolicy:
00038   """
00039   """
00040 
00041 
00042 
00043   ##
00044   # @if jp
00045   # @brief オブジェクト未発見例外処理用内部クラス(未実装)
00046   # @else
00047   #
00048   # @endif
00049   class ObjectNotFound:
00050     pass
00051 
00052 
00053   ##
00054   # @if jp
00055   #
00056   # @brief オブジェクト生成時の名称作成(サブクラス実装用)
00057   #
00058   # オブジェクト生成時の名称を生成するための関数<BR>
00059   # ※サブクラスでの実装参照用
00060   # 
00061   # @param self
00062   # @param obj 名称生成対象オブジェクト
00063   #
00064   # @return 生成したオブジェクト名称
00065   #
00066   # @else
00067   #
00068   # @endif
00069   def onCreate(self, obj):
00070     pass
00071 
00072 
00073   ##
00074   # @if jp
00075   #
00076   # @brief オブジェクト削除時の名称解放(サブクラス実装用)
00077   #
00078   # オブジェクト削除時に名称を解放するための関数<BR>
00079   # ※サブクラスでの実装参照用
00080   # 
00081   # @param self
00082   # @param obj 名称解放対象オブジェクト
00083   #
00084   # @else
00085   #
00086   # @endif
00087   def onDelete(self, obj):
00088     pass
00089 
00090 
00091 
00092 ##
00093 # @if jp
00094 #
00095 # @class DefaultNumberingPolicy
00096 # @brief オブジェクト生成時ネーミング・ポリシー(命名規則)管理用クラス
00097 #
00098 # オブジェクトを生成する際のネーミング・ポリシー(命名規則)を管理するための
00099 # クラス。
00100 #
00101 # @since 0.4.0
00102 #
00103 # @else
00104 #
00105 # @endif
00106 class DefaultNumberingPolicy(NumberingPolicy):
00107   """
00108   """
00109 
00110   ##
00111   # @if jp
00112   #
00113   # @brief コンストラクタ
00114   # 
00115   # コンストラクタ
00116   # 
00117   # @param self
00118   # 
00119   # @else
00120   #
00121   # @brief virtual destractor
00122   #
00123   # @endif
00124   def __init__(self):
00125     self._num = 0
00126     self._objects = []
00127 
00128 
00129   ##
00130   # @if jp
00131   #
00132   # @brief オブジェクト生成時の名称作成
00133   #
00134   # オブジェクト生成時の名称を生成する。
00135   # 生成済みインスタンスの数に応じた名称を生成する。
00136   # 
00137   # @param self
00138   # @param obj 名称生成対象オブジェクト
00139   #
00140   # @return 生成したオブジェクト名称
00141   #
00142   # @else
00143   #
00144   # @endif
00145   def onCreate(self, obj):
00146     self._num += 1
00147 
00148     pos = 0
00149     try:
00150       pos = self.find(None)
00151       self._objects[pos] = obj
00152       return OpenRTM_aist.otos(pos)
00153     except NumberingPolicy.ObjectNotFound:
00154       self._objects.append(obj)
00155       return OpenRTM_aist.otos(int(len(self._objects) - 1))
00156 
00157 
00158   ##
00159   # @if jp
00160   #
00161   # @brief オブジェクト削除時の名称解放
00162   #
00163   # オブジェクト削除時に名称を解放する。
00164   # オブジェクト削除時に生成済みインスタンス数を減算する。
00165   # 
00166   # @param self
00167   # @param obj 名称解放対象オブジェクト
00168   #
00169   # @else
00170   #
00171   # @endif
00172   def onDelete(self, obj):
00173     pos = 0
00174     try:
00175       pos = self.find(obj)
00176     except:
00177       return
00178 
00179     if (pos < len(self._objects)):
00180       self._objects[pos] = None
00181     self._num -= 1
00182 
00183 
00184   ##
00185   # @if jp
00186   #
00187   # @brief オブジェクトの検索
00188   #
00189   # オブジェクトリストから指定されたオブジェクトを検索し、
00190   # 該当するオブジェクトが格納されている場合にはインデックスを返す。
00191   # 
00192   # @param self
00193   # @param obj 検索対象オブジェクト
00194   #
00195   # @return オブジェクト格納インデックス
00196   #
00197   # @else
00198   #
00199   # @endif
00200   def find(self, obj):
00201     i = 0
00202     for obj_ in self._objects:
00203       if obj_ == obj:
00204         return i
00205       i += 1
00206     raise NumberingPolicy.ObjectNotFound()
00207        
00208 


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