def self.append_features( klass )
class << klass
unless method_defined?(MULTITON_NEW_HOOK)
alias_method MULTITON_NEW_HOOK, :new
end
def instance(*args, &block)
k = begin
send MULTITON_ID_HOOK, *args, &block
rescue NameError
args
end
k = begin
Marshal.dump(k)
rescue TypeError
k
end
unless obj = (POOLS[self] ||= {})[k]
begin
critical = Thread.critical
Thread.critical = true
obj = (POOLS[self][k] = send(MULTITON_NEW_HOOK, *args, &block))
ensure
Thread.critical = critical
end
end
return obj
end
alias_method :create, :new
alias_method :new, :instance
end
end