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
オブジェクト参照
98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/when_exe/parts/resource.rb', line 98 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 を登録する
121 122 123 124 |
# File 'lib/when_exe/parts/resource.rb', line 121 def []=(label, obj) # raise NameError, "Name duplication" if (@_pool[label]) _pool[label] = obj end |
#_pool ⇒ Object
132 133 134 135 |
# File 'lib/when_exe/parts/resource.rb', line 132 def _pool _setup_ unless @_pool @_pool end |
#_setup_ ⇒ void
Note:
本メソッドでマルチスレッド対応の管理変数の初期化を行っている。 このため、本メソッド自体はスレッドセーフでない。
This method returns an undefined value.
初期化
87 88 89 90 |
# File 'lib/when_exe/parts/resource.rb', line 87 def _setup_ @_lock_ = Mutex.new if When.multi_thread @_pool = {} end |
#pool_keys ⇒ Object
127 128 129 |
# File 'lib/when_exe/parts/resource.rb', line 127 def pool_keys _pool.keys end |