Class: DTAS::Mcache

Inherits:
Object
  • Object
show all
Defined in:
lib/dtas/mcache.rb

Instance Method Summary collapse

Constructor Details

#initialize(shift = 8, ttl = 60) ⇒ Mcache

Returns a new instance of Mcache.


8
9
10
11
12
# File 'lib/dtas/mcache.rb', line 8

def initialize(shift = 8, ttl = 60)
  @mask = (1 << shift) - 1
  @ttl = ttl
  @tbl = []
end

Instance Method Details

#lookup(infile) ⇒ Object


14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 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