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