Usage:
add dependency R_method(obj, dependant)
add(obj, dependant, method = :finalize, *opt) add_dependency(obj, dependant, method = :finalize, *opt)
delete dependency R_method(obj, dependant)
delete(obj_or_id, dependant, method = :finalize) delete_dependency(obj_or_id, dependant, method = :finalize)
delete dependency R_*(obj, dependant)
delete_all_dependency(obj_or_id, dependant)
delete dependency R_method(*, dependant)
delete_by_dependant(dependant, method = :finalize)
delete dependency R_*(*, dependant)
delete_all_by_dependant(dependant)
delete all dependency R_*(*, *)
delete_all
finalize the dependant connected by dependency R_method(obj, dependtant).
finalize(obj_or_id, dependant, method = :finalize) finalize_dependency(obj_or_id, dependant, method = :finalize)
finalize all dependants connected by dependency R_*(obj, dependtant).
finalize_all_dependency(obj_or_id, dependant)
finalize the dependant connected by dependency R_method(*, dependtant).
finalize_by_dependant(dependant, method = :finalize)
finalize all dependants connected by dependency R_*(*, dependant).
finalize_all_by_dependant(dependant)
finalize all dependency registered to the Finalizer.
finalize_all
stop invoking Finalizer on GC.
safe{..}
add dependency R_method(obj, dependant)
# File finalize.rb, line 58 def add_dependency(obj, dependant, method = :finalize, *opt) ObjectSpace.call_finalizer(obj) method = method.intern unless method.kind_of?(Integer) assoc = [dependant, method].concat(opt) if dep = @dependency[obj.object_id] dep.push assoc else @dependency[obj.object_id] = [assoc] end end
delete dependency R_*(*, dependant)
# File finalize.rb, line 106 def delete_all_by_dependant(dependant) for id in @dependency.keys delete_all_dependency(id, dependant) end end
delete dependency R_*(obj, dependant)
# File finalize.rb, line 85 def delete_all_dependency(id, dependant) id = id.object_id unless id.kind_of?(Integer) method = method.intern unless method.kind_of?(Integer) for assoc in @dependency[id] assoc.delete_if do |d, m, *o| d == dependant end @dependency.delete(id) if assoc.empty? end end
delete dependency R_method(*, dependant)
# File finalize.rb, line 98 def delete_by_dependant(dependant, method = :finalize) method = method.intern unless method.kind_of?(Integer) for id in @dependency.keys delete(id, dependant, method) end end
delete dependency R_method(obj, dependant)
# File finalize.rb, line 71 def delete_dependency(id, dependant, method = :finalize) id = id.object_id unless id.kind_of?(Integer) method = method.intern unless method.kind_of?(Integer) for assoc in @dependency[id] assoc.delete_if do |d, m, *o| d == dependant && m == method end @dependency.delete(id) if assoc.empty? end end
finalize all dependants registered to the Finalizer.
# File finalize.rb, line 156 def finalize_all for id, assocs in @dependency for dependant, method, *opt in assocs dependant.send(method, id, *opt) end assocs.clear end end
finalize all dependants connected by dependency R_*(*, dependtant)
# File finalize.rb, line 149 def finalize_all_by_dependant(dependant) for id in @dependency.keys finalize_all_dependency(id, dependant) end end
finalize all dependants connected by dependency R_*(obj, dependtant)
# File finalize.rb, line 128 def finalize_all_dependency(id, dependant) id = id.object_id unless id.kind_of?(Integer) method = method.intern unless method.kind_of?(Integer) for assoc in @dependency[id] assoc.delete_if do |d, m, *o| d.send(m, id, *o) if ret = d == dependant end @dependency.delete(id) if assoc.empty? end end
finalize the dependant connected by dependency R_method(*, dependtant)
# File finalize.rb, line 141 def finalize_by_dependant(dependant, method = :finalize) method = method.intern unless method.kind_of?(Integer) for id in @dependency.keys finalize(id, dependant, method) end end
finalize the depandant connected by dependency R_method(obj, dependtant)
# File finalize.rb, line 113 def finalize_dependency(id, dependant, method = :finalize) id = id.object_id unless id.kind_of?(Integer) method = method.intern unless method.kind_of?(Integer) for assocs in @dependency[id] assocs.delete_if do |d, m, *o| d.send(m, id, *o) if ret = d == dependant && m == method ret end @dependency.delete(id) if assoc.empty? end end