class DbmsBuffers::LRUBuffer
The LRUBuffer
applies least recently used as eviction strategy. For this, it saves the time of the last access with each buffered value.
Attributes
size[R]
Public Class Methods
new(size)
click to toggle source
# File lib/dbms_buffers/lru.rb, line 11 def initialize(size) @size = size @buffer = [] @time = 0 end
Public Instance Methods
access(value)
click to toggle source
# File lib/dbms_buffers/lru.rb, line 17 def access(value) @time += 1 try_touch(value) || try_insert_new(value) || try_replace(value) end
contains?(value)
click to toggle source
# File lib/dbms_buffers/lru.rb, line 26 def contains?(value) @buffer.any? { |entry| value == entry.value } end
entries()
click to toggle source
# File lib/dbms_buffers/lru.rb, line 22 def entries @buffer.clone end
used()
click to toggle source
# File lib/dbms_buffers/lru.rb, line 30 def used @buffer.size end
Private Instance Methods
index(value)
click to toggle source
# File lib/dbms_buffers/lru.rb, line 59 def index(value) @buffer.index { |entry| entry.value == value } end
oldest_entry()
click to toggle source
# File lib/dbms_buffers/lru.rb, line 63 def oldest_entry @buffer.min { |entry_a, entry_b| entry_a.timestamp <=> entry_b.timestamp } end
touch(value)
click to toggle source
# File lib/dbms_buffers/lru.rb, line 67 def touch(value) @buffer.find { |entry| entry.value == value }.timestamp = @time end
try_insert_new(value)
click to toggle source
# File lib/dbms_buffers/lru.rb, line 42 def try_insert_new(value) return false if used == @size entry = LRUBufferEntry.new(value, @time) @buffer << entry true end
try_replace(value)
click to toggle source
# File lib/dbms_buffers/lru.rb, line 51 def try_replace(value) entry = oldest_entry entry.value = value entry.timestamp = @time true end
try_touch(value)
click to toggle source
# File lib/dbms_buffers/lru.rb, line 36 def try_touch(value) result = contains? value touch(value) if result result end