Factory.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: euc-jp -*-
00003 
00004 ##
00005 # @file Factory.py
00006 # @brief RTComponent factory class
00007 # @date $Date: 2006/11/06 01:28:36 $
00008 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara
00009 #
00010 # Copyright (C) 2003-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 OpenRTM_aist
00018 
00019 
00020 ##
00021 # @if jp
00022 #
00023 # @brief brief RTコンポーネント破棄用関数
00024 #
00025 # RTコンポーネントのインスタンスを破棄するための関数。
00026 # 引数にて指定したRTコンポーネントのインスタンスを、終了処理を呼び出して
00027 # 破棄する。
00028 #
00029 # @param rtc 破棄対象RTコンポーネントのインスタンス
00030 #
00031 # @else
00032 #
00033 # @endif
00034 def Delete(rtc):
00035   del rtc
00036 
00037 
00038 
00039 ##
00040 # @if jp
00041 #
00042 # @class FactoryBase
00043 # @brief FactoryBase 基底クラス
00044 # 
00045 # RTコンポーネント生成用ファクトリの基底クラス。
00046 # 実際の各種ファクトリクラスを実装する場合は、本クラスを継承する形で実装する。
00047 # 実際の生成、削除処理は具象サブクラスにて実装する必要がある。
00048 #
00049 # @since 0.2.0
00050 #
00051 # @else
00052 #
00053 # @class FactoryBase
00054 # @brief FactoryBase base class
00055 #
00056 # RTComponent factory base class.
00057 #
00058 # @since 0.2.0
00059 #
00060 # @endif
00061 class FactoryBase:
00062   """
00063   """
00064 
00065   ##
00066   # @if jp
00067   #
00068   # @brief コンストラクタ
00069   #
00070   # コンストラクタ。
00071   #
00072   # @param self
00073   # @param profile コンポーネントのプロファイル
00074   #
00075   # @else
00076   #
00077   # @brief Constructor.
00078   #
00079   # Constructor.
00080   #
00081   # @param profile component profile
00082   #
00083   # @endif
00084   def __init__(self, profile):
00085     ## self._Profile Component profile
00086     self._Profile = profile
00087     ## self._Number Number of current component instances.
00088     self._Number = -1
00089     
00090     pass
00091 
00092 
00093   ##
00094   # @if jp
00095   #
00096   # @brief コンポーネントの生成(サブクラス実装用)
00097   #
00098   # RTComponent のインスタンスを生成するための関数。<BR>
00099   # 実際の初期化処理は、各具象クラス内にて記述する。
00100   #
00101   # @param self
00102   # @param mgr マネージャオブジェクト
00103   #
00104   # @return 生成したコンポーネント
00105   #
00106   # @else
00107   #
00108   # @brief Create component
00109   #
00110   # @param mgr pointer to RtcManager
00111   #
00112   # @endif
00113   def create(self, mgr):
00114     pass
00115 
00116 
00117   ##
00118   # @if jp
00119   #
00120   # @brief コンポーネントの破棄(サブクラス実装用)
00121   #
00122   # RTComponent のインスタンスを破棄するための関数。<BR>
00123   # 実際の初期化処理は、各具象クラス内にて記述する。
00124   #
00125   # @param self
00126   # @param comp 破棄対象 RTコンポーネント
00127   #
00128   # @else
00129   #
00130   # @brief Destroy component
00131   #
00132   # @param comp pointer to RtcBase
00133   #
00134   # @endif
00135   def destroy(self, comp):
00136     pass
00137 
00138 
00139   ##
00140   # @if jp
00141   #
00142   # @brief コンポーネントプロファイルの取得
00143   #
00144   # コンポーネントのプロファイルを取得する
00145   #
00146   # @param self
00147   #
00148   # @return コンポーネントのプロファイル
00149   #
00150   # @else
00151   #
00152   # @brief Get component profile
00153   #
00154   # Get component profile.
00155   #
00156   # @endif
00157   def profile(self):
00158     return self._Profile
00159 
00160 
00161   ##
00162   # @if jp
00163   #
00164   # @brief 現在のインスタンス数の取得
00165   #
00166   # コンポーネントの現在のインスタンス数を取得する。
00167   #
00168   # @param self
00169   #
00170   # @return コンポーネントのインスタンス数
00171   #
00172   # @else
00173   #
00174   # @brief Get number of component instances
00175   #
00176   # Get number of current component instances.
00177   #
00178   # @endif
00179   def number(self):
00180     return self._Number
00181 
00182 
00183 
00184 
00185 ##
00186 # @if jp
00187 # @class FactoryPython
00188 # @brief FactoryPython クラス
00189 # 
00190 # Python用コンポーネントファクトリクラス。
00191 #
00192 # @since 0.4.1
00193 #
00194 #
00195 # @else
00196 #
00197 # @class FactoryPython
00198 # @brief FactoryPython class
00199 #
00200 # RTComponent factory class for Python.
00201 #
00202 # @endif
00203 class FactoryPython(FactoryBase):
00204   """
00205   """
00206 
00207   ##
00208   # @if jp
00209   #
00210   # @brief コンストラクタ
00211   #
00212   # コンストラクタ。
00213   # 生成対象コンポーネントのプロファイル、コンポーネント生成用関数、
00214   # コンポーネント破棄用関数、コンポーネント生成時の命名ポリシーを引数に取り、
00215   # Python で実装されたコンポーネントのファクトリクラスを生成する。
00216   #
00217   # @param self
00218   # @param profile コンポーネントのプロファイル
00219   # @param new_func コンポーネント生成用関数
00220   # @param delete_func コンポーネント破棄用関数
00221   # @param policy コンポーネント生成時の命名ポリシー(デフォルト値:None)
00222   #
00223   # @else
00224   #
00225   # @brief Constructor.
00226   #
00227   # Constructor.
00228   # Create component factory class with three arguments:
00229   # component profile, function pointer to object create function and
00230   # object delete function.
00231   #
00232   # @param profile Component profile
00233   # @param new_func Pointer to component create function
00234   # @param delete_func Pointer to component delete function
00235   # @param policy Pointer to component delete function
00236   #
00237   # @endif
00238   def __init__(self, profile, new_func, delete_func, policy=None):
00239     FactoryBase.__init__(self, profile)
00240     
00241     if policy is None:
00242       self._policy = OpenRTM_aist.DefaultNumberingPolicy()
00243     else:
00244       self._policy = policy
00245 
00246     self._New = new_func
00247     
00248     self._Delete = delete_func
00249 
00250 
00251   ##
00252   # @if jp
00253   #
00254   # @brief コンポーネントの生成
00255   #
00256   # RTComponent のインスタンスを生成する。
00257   #
00258   # @param self
00259   # @param mgr マネージャオブジェクト
00260   #
00261   # @return 生成したコンポーネント
00262   #
00263   # @else
00264   #
00265   # @brief Create component
00266   #
00267   # Create component implemented in Python.
00268   #
00269   # @param mgr
00270   #
00271   # @endif
00272   def create(self, mgr):
00273     try:
00274       rtobj = self._New(mgr)
00275       if rtobj == 0:
00276         return None
00277 
00278       self._Number += 1
00279       
00280       rtobj.setProperties(self.profile())
00281       
00282       instance_name = rtobj.getTypeName()
00283       instance_name += self._policy.onCreate(rtobj)
00284       rtobj.setInstanceName(instance_name)
00285 
00286       return rtobj
00287     except:
00288       print OpenRTM_aist.Logger.print_exception()
00289       return None
00290 
00291 
00292   ##
00293   # @if jp
00294   #
00295   # @brief コンポーネントの破棄
00296   #
00297   # RTComponent のインスタンスを破棄する。
00298   #
00299   # @param self
00300   # @param comp 破棄対象 RTComponent
00301   #
00302   # @else
00303   #
00304   # @brief Destroy component
00305   #
00306   # Destroy component instance
00307   #
00308   # @param comp
00309   #
00310   # @endif
00311   def destroy(self, comp):
00312     self._Number -= 1
00313     self._policy.onDelete(comp)
00314     self._Delete(comp)


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