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 if cur = @tbl[bucket] if cur[:infile] == infile && (DTAS.now - cur[:btime]) < @ttl return cur end end return unless block_given? @tbl[bucket] = begin cur = cur ? cur.clear : {} if ret = yield(infile, cur) ret[:infile] = infile.frozen? ? infile : infile.dup.freeze ret[:btime] = DTAS.now end ret end end