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