diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-11-27 02:58:11 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-11-27 02:58:11 +0000 |
commit | aa6e2791083b5ecfb4249773b99b11431e271a46 (patch) | |
tree | fc5506d44c2a6d7879e45bf4163b349e026e89e9 /lib | |
parent | 785eff1c7983886bec07d0fc1d7364411256dd0b (diff) | |
download | ruby-aa6e2791083b5ecfb4249773b99b11431e271a46.tar.gz ruby-aa6e2791083b5ecfb4249773b99b11431e271a46.tar.xz ruby-aa6e2791083b5ecfb4249773b99b11431e271a46.zip |
lib/finalizer.rb: removed
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@14030 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r-- | lib/finalize.rb | 193 |
1 files changed, 0 insertions, 193 deletions
diff --git a/lib/finalize.rb b/lib/finalize.rb deleted file mode 100644 index 9b6b302ca..000000000 --- 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 <<self - # @dependency: {id => [[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 |