PATH:
opt
/
alt
/
ruby18
/
lib64
/
ruby
/
1.8
#-- # 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
[+]
rinda
[+]
yaml
[-] rational.rb
[edit]
[-] matrix.rb
[edit]
[+]
rdoc
[-] shell.rb
[edit]
[-] ostruct.rb
[edit]
[-] eregex.rb
[edit]
[-] scanf.rb
[edit]
[+]
dl
[-] ftools.rb
[edit]
[+]
runit
[-] gserver.rb
[edit]
[-] getoptlong.rb
[edit]
[-] thread.rb
[edit]
[-] sync.rb
[edit]
[-] delegate.rb
[edit]
[-] open-uri.rb
[edit]
[-] openssl.rb
[edit]
[-] debug.rb
[edit]
[+]
irb
[-] ping.rb
[edit]
[-] digest.rb
[edit]
[-] Env.rb
[edit]
[-] yaml.rb
[edit]
[-] sha1.rb
[edit]
[-] forwardable.rb
[edit]
[-] weakref.rb
[edit]
[-] benchmark.rb
[edit]
[-] profiler.rb
[edit]
[-] uri.rb
[edit]
[-] English.rb
[edit]
[-] jcode.rb
[edit]
[-] timeout.rb
[edit]
[+]
xsd
[+]
bigdecimal
[-] tracer.rb
[edit]
[-] resolv.rb
[edit]
[+]
uri
[-] tsort.rb
[edit]
[-] find.rb
[edit]
[-] logger.rb
[edit]
[-] parsedate.rb
[edit]
[-] importenv.rb
[edit]
[-] profile.rb
[edit]
[-] optparse.rb
[edit]
[-] md5.rb
[edit]
[-] getopts.rb
[edit]
[-] pp.rb
[edit]
[+]
test
[-] date.rb
[edit]
[+]
drb
[+]
io
[+]
webrick
[-] cgi.rb
[edit]
[-] pathname.rb
[edit]
[+]
xmlrpc
[-] mutex_m.rb
[edit]
[+]
rss
[+]
wsdl
[+]
racc
[-] complex.rb
[edit]
[+]
..
[-] prettyprint.rb
[edit]
[-] csv.rb
[edit]
[-] kconv.rb
[edit]
[-] securerandom.rb
[edit]
[-] abbrev.rb
[edit]
[-] resolv-replace.rb
[edit]
[+]
digest
[-] mathn.rb
[edit]
[+]
rexml
[+]
soap
[-] mailread.rb
[edit]
[-] e2mmap.rb
[edit]
[-] shellwords.rb
[edit]
[-] rss.rb
[edit]
[-] time.rb
[edit]
[+]
openssl
[+]
date
[-] finalize.rb
[edit]
[-] readbytes.rb
[edit]
[-] fileutils.rb
[edit]
[-] generator.rb
[edit]
[+]
net
[-] monitor.rb
[edit]
[-] tempfile.rb
[edit]
[-] parsearg.rb
[edit]
[-] cgi-lib.rb
[edit]
[-] un.rb
[edit]
[-] mkmf.rb
[edit]
[-] base64.rb
[edit]
[-] thwait.rb
[edit]
[-] webrick.rb
[edit]
[-] erb.rb
[edit]
[-] rubyunit.rb
[edit]
[+]
shell
[-] expect.rb
[edit]
[-] open3.rb
[edit]
[+]
cgi
[-] tmpdir.rb
[edit]
[-] ipaddr.rb
[edit]
[-] pstore.rb
[edit]
[-] singleton.rb
[edit]
[-] set.rb
[edit]
[-] observer.rb
[edit]
[-] drb.rb
[edit]
[-] irb.rb
[edit]
[+]
x86_64-linux
[-] date2.rb
[edit]
[+]
optparse