Class: BELParser::Resource::LRUCache

Inherits:
Object
  • Object
show all
Defined in:
lib/bel_parser/resource/lru_cache.rb

Overview

LRUCache implements a least recently used cache. This implementation was adapted from github.com/SamSaffron/lru_redux.

Instance Method Summary collapse

Constructor Details

#initialize(max_size) ⇒ LRUCache

Returns a new instance of LRUCache.

Raises:

  • (ArgumentError)


8
9
10
11
12
13
# File 'lib/bel_parser/resource/lru_cache.rb', line 8

def initialize(max_size)
	raise ArgumentError.new(:max_size) if max_size < 1

	@max_size = max_size
	@data = Concurrent::Hash.new
end

Instance Method Details

#[](key) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/bel_parser/resource/lru_cache.rb', line 47

def [](key)
	found = true
	value = @data.delete(key){ found = false }
	if found
		@data[key] = value
	else
		nil
	end
end

#[]=(key, val) ⇒ Object



57
58
59
60
61
62
# File 'lib/bel_parser/resource/lru_cache.rb', line 57

def []=(key,val)
	@data.delete(key)
	@data[key] = val
	@data.shift if @data.length > @max_size
	val
end

#clearObject



95
96
97
# File 'lib/bel_parser/resource/lru_cache.rb', line 95

def clear
	@data.clear
end

#countObject



99
100
101
# File 'lib/bel_parser/resource/lru_cache.rb', line 99

def count
	@data.size
end

#delete(key) ⇒ Object Also known as: evict



83
84
85
# File 'lib/bel_parser/resource/lru_cache.rb', line 83

def delete(key)
	@data.delete(key)
end

#eachObject Also known as: each_unsafe



64
65
66
67
68
69
70
71
72
73
# File 'lib/bel_parser/resource/lru_cache.rb', line 64

def each
	unless block_given?
		return enum_for(:each)
	end

	array = @data.to_a
	array.reverse!.each do |pair|
		yield pair
	end
end

#fetch(key) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/bel_parser/resource/lru_cache.rb', line 37

def fetch(key)
	found = true
	value = @data.delete(key){ found = false }
	if found
		@data[key] = value
	else
		yield if block_given?
	end
end

#getset(key) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/bel_parser/resource/lru_cache.rb', line 25

def getset(key)
	found = true
	value = @data.delete(key){ found = false }
	if found
		@data[key] = value
	else
		result = @data[key] = yield
		@data.shift if @data.length > @max_size
		result
	end
end

#key?(key) ⇒ Boolean Also known as: has_key?

Returns:

  • (Boolean)


89
90
91
# File 'lib/bel_parser/resource/lru_cache.rb', line 89

def key?(key)
	@data.key?(key)
end

#max_size=(max_size) ⇒ Object

Raises:

  • (ArgumentError)


15
16
17
18
19
20
21
22
23
# File 'lib/bel_parser/resource/lru_cache.rb', line 15

def max_size=(max_size)
	max_size ||= @max_size

	raise ArgumentError.new(:max_size) if max_size < 1

	@max_size = max_size

	@data.shift while @data.size > @max_size
end

#to_aObject



78
79
80
81
# File 'lib/bel_parser/resource/lru_cache.rb', line 78

def to_a
	array = @data.to_a
	array.reverse!
end