ObjectManager.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: euc-jp -*-
00003 
00004 ##
00005 # @file ObjectManager.py
00006 # @brief Object management class
00007 # @date $Date: $
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 
00018 import sys
00019 import string
00020 import threading
00021 
00022 import OpenRTM_aist
00023 
00024 
00025 
00026 ##
00027 # @if jp
00028 #
00029 # @brief オブジェクト管理用クラス
00030 #
00031 # 各種オブジェクトを管理するためのクラス。
00032 #
00033 # @since 0.4.0
00034 #
00035 # @else
00036 #
00037 # @endif
00038 class ObjectManager:
00039   """
00040   """
00041 
00042   ##
00043   # @if jp
00044   #
00045   # @brief コンストラクタ
00046   # 
00047   # コンストラクタ
00048   # 
00049   # @param self
00050   # @param predicate オブジェクト検索用ファンクタ
00051   # 
00052   # @else
00053   #
00054   # @endif
00055   def __init__(self, predicate):
00056     self._objects = self.Objects()
00057     self._predicate = predicate
00058 
00059 
00060 
00061   ##
00062   # @if jp
00063   # @class Objects
00064   # @brief オブジェクト管理用内部クラス
00065   # @endif
00066   class Objects:
00067     def __init__(self):
00068       self._mutex = threading.RLock()
00069       self._obj = []
00070 
00071 
00072   ##
00073   # @if jp
00074   #
00075   # @brief 指定したオブジェクトを登録する
00076   # 
00077   # 指定したオブジェクトを登録する。
00078   # 同一オブジェクトが登録済みの場合は、何も行わない。
00079   #
00080   # @param self
00081   # @param obj 登録対象オブジェクト
00082   #
00083   # @return 登録処理結果(オブジェクトを登録した場合にtrue)
00084   # 
00085   # @else
00086   #
00087   # @endif
00088   def registerObject(self, obj):
00089     guard = OpenRTM_aist.ScopedLock(self._objects._mutex)
00090     predi = self._predicate(factory=obj)
00091 
00092     for _obj in self._objects._obj:
00093       if predi(_obj):
00094         return False
00095 
00096     self._objects._obj.append(obj)
00097     return True
00098 
00099 
00100   ##
00101   # @if jp
00102   #
00103   # @brief 指定したオブジェクトを登録解除する
00104   # 
00105   # 指定したオブジェクトの登録を解除し、取得する。
00106   # 指定したオブジェクトが登録されていない場合にはNULLを返す。
00107   #
00108   # @param self
00109   # @param id 登録解除対象オブジェクトのID
00110   #
00111   # @return 登録解除されたオブジェクト
00112   # 
00113   # @else
00114   #
00115   # @endif
00116   def unregisterObject(self, id):
00117     guard = OpenRTM_aist.ScopedLock(self._objects._mutex)
00118     predi = self._predicate(name=id)
00119     i = 0
00120     for _obj in self._objects._obj:
00121       if predi(_obj):
00122         ret = _obj
00123         del self._objects._obj[i]
00124         return ret
00125       i+=1
00126       
00127     return None
00128 
00129 
00130   ##
00131   # @if jp
00132   #
00133   # @brief オブジェクトを検索する
00134   # 
00135   # 登録されているオブジェクトの中から指定した条件に合致するオブジェクトを検索
00136   # して取得する。
00137   # 指定した条件に合致するオブジェクトが登録されていない場合にはNULLを返す。
00138   #
00139   # @param self
00140   # @param id 検索対象オブジェクトのID
00141   #
00142   # @return オブジェクトの検索結果
00143   # 
00144   # @else
00145   #
00146   # @endif
00147   def find(self, id):
00148     guard = OpenRTM_aist.ScopedLock(self._objects._mutex)
00149     if isinstance(id,str):
00150       predi = self._predicate(name=id)
00151     else:
00152       predi = self._predicate(prop=id)
00153 
00154     for _obj in self._objects._obj:
00155       if predi(_obj):
00156         return _obj
00157       
00158     return None
00159 
00160 
00161   ##
00162   # @if jp
00163   #
00164   # @brief 登録されているオブジェクトのリストを取得する
00165   # 
00166   # 登録されているオブジェクトのリストを取得する。
00167   #
00168   # @param self
00169   #
00170   # @return 登録されているオブジェクト・リスト
00171   # 
00172   # @else
00173   #
00174   # @endif
00175   def getObjects(self):
00176     guard = OpenRTM_aist.ScopedLock(self._objects._mutex)
00177     return self._objects._obj
00178 
00179 
00180   ##
00181   # @if jp
00182   # @brief オブジェクトを検索する
00183   #
00184   # 指定された条件に合致するオブジェクトを検索する。
00185   #
00186   # @param self
00187   # @param p オブジェクト検索用ファンクタ
00188   #
00189   # @else
00190   #
00191   # @endif
00192   def for_each(self,p):
00193     guard = OpenRTM_aist.ScopedLock(self._objects._mutex)
00194     predi = p()
00195 
00196     for _obj in self._objects._obj:
00197       predi(_obj)
00198 
00199     return predi
00200 


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