class DTAS::Mcache
Public Class Methods
new(shift = 8, ttl = 60)
click to toggle source
# File lib/dtas/mcache.rb, line 8 def initialize(shift = 8, ttl = 60) @mask = (1 << shift) - 1 @ttl = ttl @tbl = [] end
Public Instance Methods
lookup(infile) { |infile, cur| ... }
click to toggle source
# File lib/dtas/mcache.rb, line 14 def lookup(infile) bucket = infile.hash & @mask st = nil if cur = @tbl[bucket] if cur[:infile] == infile && (DTAS.now - cur[:btime]) < @ttl begin st = File.stat(infile) return cur if cur[:ctime] == st.ctime rescue end end end return unless block_given? @tbl[bucket] = begin cur = cur ? cur.clear : {} begin st ||= File.stat(infile) cur[:ctime] = st.ctime rescue return end if ret = yield(infile, cur) ret[:infile] = infile.frozen? ? infile : -(infile.dup) ret[:btime] = DTAS.now end ret end end