14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# 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
|