From 8e09ab045ff2cb241365ff03e3c7f02960c4f2e9 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 27 Nov 2007 02:58:11 +0000 Subject: lib/finalizer.rb: removed git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14030 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/finalize.rb | 193 -------------------------------------------------------- 1 file changed, 193 deletions(-) delete mode 100644 lib/finalize.rb (limited to 'lib/finalize.rb') diff --git a/lib/finalize.rb b/lib/finalize.rb deleted file mode 100644 index 9b6b302cac..0000000000 --- a/lib/finalize.rb +++ /dev/null @@ -1,193 +0,0 @@ -#-- -# finalizer.rb - -# $Release Version: 0.3$ -# $Revision: 1.4 $ -# $Date: 1998/02/27 05:34:33 $ -# by Keiju ISHITSUKA -#++ -# -# 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{..} -# - -module Finalizer - RCS_ID='-$Id: finalize.rb,v 1.4 1998/02/27 05:34:33 keiju Exp keiju $-' - - class < [[dependant, method, *opt], ...], ...} - - # add dependency R_method(obj, dependant) - 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 - alias add add_dependency - - # delete dependency R_method(obj, dependant) - 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 - alias delete delete_dependency - - # delete dependency R_*(obj, dependant) - 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) - 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_*(*, dependant) - def delete_all_by_dependant(dependant) - for id in @dependency.keys - delete_all_dependency(id, dependant) - end - end - - # finalize the depandant connected by dependency R_method(obj, dependtant) - 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 - alias finalize finalize_dependency - - # finalize all dependants connected by dependency R_*(obj, dependtant) - 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) - 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 all dependants connected by dependency R_*(*, dependtant) - def finalize_all_by_dependant(dependant) - for id in @dependency.keys - finalize_all_dependency(id, dependant) - end - end - - # finalize all dependants registered to the Finalizer. - def finalize_all - for id, assocs in @dependency - for dependant, method, *opt in assocs - dependant.send(method, id, *opt) - end - assocs.clear - end - end - - # method to call finalize_* safely. - def safe - old_status = Thread.critical - Thread.critical = true - ObjectSpace.remove_finalizer(@proc) - begin - yield - ensure - ObjectSpace.add_finalizer(@proc) - Thread.critical = old_status - end - end - - private - - # registering function to ObjectSpace#add_finalizer - def final_of(id) - if assocs = @dependency.delete(id) - for dependant, method, *opt in assocs - dependant.send(method, id, *opt) - end - end - end - - end - @dependency = Hash.new - @proc = proc{|id| final_of(id)} - ObjectSpace.add_finalizer(@proc) -end -- cgit v1.2.3