lru-cacher 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,11 @@
1
+ require 'lib/lru-cacher'
2
+ class ItemLimited < LRUCacher
3
+ def initialize(max_items)
4
+ @max_items = max_items
5
+ super()
6
+ end
7
+
8
+ def over_threshold?
9
+ @table.size > @max_items
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ require 'lib/lru-cacher'
2
+ require 'java'
3
+ import java.lang.management.ManagementFactory
4
+
5
+ class MemoryLimited < LRUCacher
6
+ def initialize(max_mem_size)
7
+ @max_mem_size = max_mem_size
8
+ @mem_mx_bean = ManagementFactory.getMemoryMXBean
9
+ super()
10
+ end
11
+
12
+ def over_threshold?
13
+ ((@mem_mx_bean.heap_memory_usage.used + @mem_mx_bean.non_heap_memory_usage.used) / 1048576) > @max_mem_size
14
+ end
15
+
16
+ def pop
17
+ super()
18
+ @mem_mx_bean.gc
19
+ end
20
+
21
+ def delete(key)
22
+ super(key)
23
+ @mem_mx_bean.gc
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  class LRUCacher
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
data/lib/lru-cacher.rb CHANGED
@@ -1,45 +1,42 @@
1
1
  require 'lru-cacher/node'
2
2
  class LRUCacher
3
- attr_accessor :head, :tail, :max_items, :table
4
-
5
- def initialize(max_items)
6
- @max_items = max_items
7
- @table = {}
8
- @head = nil
9
- @tail = nil
3
+ def initialize
4
+ @table = {}
5
+ @head = nil
6
+ @tail = nil
10
7
  end
11
8
 
12
9
  def set(key, value)
13
- if @table.size > @max_items
14
- @table.delete @head.key
15
- @head = @head.next_node
16
- end
17
- if !@table.key?(key)
18
- new_node = LRUCacher::Node.new value, key, @tail, nil
19
- else
20
- new_node = @table[key]
21
- new_node.value = value
22
- end
10
+ new_node = LRUCacher::Node.new value, key, @tail, nil
23
11
  @head = new_node if @tail == nil
24
12
  @tail.next_node = new_node if @tail != nil
25
13
  @tail = new_node
26
14
  @table[key] = new_node
15
+ if over_threshold?
16
+ delete(@head.key) if @head
17
+ end
18
+ end
19
+
20
+ def exists?(key)
21
+ @table.key? key
27
22
  end
28
23
 
29
24
  def get(key)
30
25
  current_node = @table[key]
31
26
  if current_node
32
- return current_node if current_node.next_node == nil
33
- if current_node.prev_node != nil
34
- current_node.prev_node.next_node = current_node.next_node
27
+ if @head == current_node
28
+ @head = current_node.next_node
29
+ @tail.next_node = current_node
30
+ @tail = current_node
31
+ elsif @tail == current_node
32
+ current_node
35
33
  else
36
- @head = current_node.next_node
37
- @head.prev_node = nil
34
+ current_node.prev_node.next_node = current_node.next_node
35
+ current_node.next_node.prev_node = current_node.prev_node
36
+ @tail.next_node = current_node
37
+ @tail = current_node
38
38
  end
39
- @tail.next_node = current_node
40
- current_node.next_node = nil
41
- current_node.prev_node = @tail
42
- @tail = current_node
39
+ current_node
43
40
  end
44
41
  end
45
42
 
@@ -57,4 +54,19 @@ class LRUCacher
57
54
  @table.delete(key)
58
55
  end
59
56
  end
60
- end
57
+
58
+ end
59
+
60
+
61
+
62
+ # (0)
63
+ # nn ||
64
+ # V ||
65
+ # ||
66
+ # || ^
67
+ # || pn
68
+ # V
69
+
70
+
71
+
72
+
Binary file
data/lru-cacher.gemspec CHANGED
@@ -19,6 +19,9 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.11"
22
+ spec.add_development_dependency "bundler"
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency('rspec')
25
+ spec.add_development_dependency('simplecov', '~> 0.10.0') # no 1.0 release out yet
26
+ spec.add_development_dependency('simplecov-rcov', '~> 0.2.3')
24
27
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lru-cacher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manther
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-25 00:00:00.000000000 Z
11
+ date: 2016-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.11'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +38,48 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.10.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov-rcov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.2.3
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.2.3
41
83
  description: LRU Caching gem.
42
84
  email:
43
85
  - jason.manther.young@gmail.com
@@ -61,8 +103,11 @@ files:
61
103
  - bin/console
62
104
  - bin/setup
63
105
  - lib/lru-cacher.rb
106
+ - lib/lru-cacher/item_limited.rb
107
+ - lib/lru-cacher/memory_limited.rb
64
108
  - lib/lru-cacher/node.rb
65
109
  - lib/lru-cacher/version.rb
110
+ - lru-cacher-1.0.0.gem
66
111
  - lru-cacher.gemspec
67
112
  homepage: https://github.com/Manther/lru-cache
68
113
  licenses: