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
オブジェクト参照
163 164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/when_exe/parts/resource.rb', line 163 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 を登録する
186 187 188 189 |
# File 'lib/when_exe/parts/resource.rb', line 186 def []=(label, obj) # raise NameError, "Name duplication" if (@_pool[label]) _pool[label] = obj end |
#_pool ⇒ Object
197 198 199 200 |
# File 'lib/when_exe/parts/resource.rb', line 197 def _pool _setup_ unless @_pool @_pool end |
#_setup_ ⇒ void
Note:
本メソッドでマルチスレッド対応の管理変数の初期化を行っている。 このため、本メソッド自体はスレッドセーフでない。
This method returns an undefined value.
初期化
152 153 154 155 |
# File 'lib/when_exe/parts/resource.rb', line 152 def _setup_ @_lock_ = Mutex.new if When.multi_thread @_pool = {} end |
#pool_keys ⇒ Object
192 193 194 |
# File 'lib/when_exe/parts/resource.rb', line 192 def pool_keys _pool.keys end |