| Module | Multiton::MetaMethods |
| In: |
lib/more/facets/multiton.rb
|
# File lib/more/facets/multiton.rb, line 230
230: def initialized?(*e, &b)
231: multiton_instance.key?(multiton_id(*e, &b))
232: end
# File lib/more/facets/multiton.rb, line 215
215: def instance(*e, &b)
216: arg = multiton_id(*e, &b)
217: multiton_instance.fetch(arg) do
218: multiton_mutex[arg].synchronize do
219: multiton_instance.fetch(arg) do
220: val = multiton_instance[arg] = new!(*e, &b) #new(*e, &b)
221: val.instance_variable_set(:@multiton_initializer, e, &b)
222: multiton_mutex.initialized(arg)
223: val
224: end
225: end
226: end
227: end
# File lib/more/facets/multiton.rb, line 249
249: def _load(str)
250: instance(*Marshal.load(str))
251: end
# File lib/more/facets/multiton.rb, line 236
236: def multiton_instance
237: @multiton_instance ||= Hash.new
238: end
# File lib/more/facets/multiton.rb, line 240
240: def multiton_mutex
241: @multiton_mutex ||= InstanceMutex.new
242: end
# File lib/more/facets/multiton.rb, line 244
244: def reinitialize
245: multiton_instance.clear
246: multiton_mutex.clear
247: end
Default method to to create a key to cache already constructed instances. In the use case MultitonClass.new(e), MultiClass.new(f) must be semantically equal if multiton_id(e).eql?(multiton_id(f)) evaluates to true.
# File lib/more/facets/multiton.rb, line 259
259: def multiton_id(*e, &b)
260: e
261: end