Module: When::Parts::Resource::Pool
- Includes:
- Synchronize
- Included in:
- When::Parts::Resource, Timezone, TM::CalendarEra, TM::Clock, V::Event, V::Timezone
- Defined in:
- lib/when_exe/parts/resource.rb
Overview
Resource の has-a 親子関係を管理する
Instance Method Summary collapse
-
#[](label) ⇒ When::Parts::Resource
オブジェクト参照.
-
#[]=(label, obj) ⇒ void
オブジェクト登録.
- #_pool ⇒ Object
-
#_setup_ ⇒ void
初期化.
- #pool_keys ⇒ Object
Methods included from Synchronize
Instance Method Details
#[](label) ⇒ When::Parts::Resource
オブジェクト参照
161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/when_exe/parts/resource.rb', line 161 def [](label) # nil label の場合 return _pool[label] unless label # 階層がある場合 terms = Resource._encode(label).split(/::/) terms.shift if terms[0] == '' return terms.inject(self) {|obj,term| obj = obj[Resource._decode(term)]} if terms.length >= 2 # 階層がない場合 _pool[Resource._decode(Resource._extract_prefix(terms[0]))] end |
#[]=(label, obj) ⇒ void
This method returns an undefined value.
オブジェクト登録
指定した label で子 Resource を登録する
184 185 186 187 |
# File 'lib/when_exe/parts/resource.rb', line 184 def []=(label, obj) # raise NameError, "Name duplication" if (@_pool[label]) _pool[label] = obj end |
#_pool ⇒ Object
195 196 197 198 |
# File 'lib/when_exe/parts/resource.rb', line 195 def _pool _setup_ unless @_pool @_pool end |
#_setup_ ⇒ void
Note:
本メソッドでマルチスレッド対応の管理変数の初期化を行っている。 このため、本メソッド自体はスレッドセーフでない。
This method returns an undefined value.
初期化
150 151 152 153 |
# File 'lib/when_exe/parts/resource.rb', line 150 def _setup_ @_lock_ = Mutex.new if When.multi_thread @_pool = {} end |
#pool_keys ⇒ Object
190 191 192 |
# File 'lib/when_exe/parts/resource.rb', line 190 def pool_keys _pool.keys end |