ruby_structures 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6782ad1fced1c7fb1843ea6d4c768f19398c4bfc
4
- data.tar.gz: 8c4c4c5cffc4a05184b38076032b18f7916ceb82
3
+ metadata.gz: f84ec7afcc16ae06a9e385352868871144f62937
4
+ data.tar.gz: 44ede61cd4466ccd6e54bc06b67231ecd7a3a293
5
5
  SHA512:
6
- metadata.gz: 94a8daae5487dc44c589b3f2e2b0083e93758508c5a502b9da6ce7df9b67da44d35dd0e7d951a0d9abfb7332433a3da66f12504db62959450ba5dcce1a57001c
7
- data.tar.gz: d880a0579d69066e63e1be514dc1718d2cf3d341ad404e52ff653deb544a537cfbc23b128bad425f81cde638ae0b436076350065d40875cddf7d423655756771
6
+ metadata.gz: fccf6655d1f80ecf8d285e2b9598348d5d52ebee5d65170726d959daf08389ab93f19b3a951b279dd767424ead2cb55fd4e709654deb6af1c17f632496c89cb4
7
+ data.tar.gz: 080193de352085e39b1054a18080cb34d6692747910f6392c3210bed15701d9645754d4ae056b2e09411c00310f854c38cc19d3c7502d1222c7884fcd6470ad0
@@ -9,7 +9,7 @@ class LinkedList
9
9
  end
10
10
 
11
11
  def to_a
12
- self.reduce([]) {|arr, n| arr << n.send(:val)}
12
+ self.reduce([]) { |arr, n| arr << n.send(:val) }
13
13
  end
14
14
 
15
15
  def to_s
@@ -66,6 +66,38 @@ class LinkedList
66
66
  node
67
67
  end
68
68
 
69
+ def add_after_key(ref_key, key, val)
70
+ ref_node = self.find_by_key(ref_key)
71
+ raise ArgumentError.new("No Node found with key=#{ref_key}") if ref_node.nil?
72
+
73
+ node = LinkedListNode.new(key, val)
74
+ next_node = ref_node.send(:next)
75
+
76
+ node.send(:next=, next_node)
77
+ node.send(:prev=, ref_node)
78
+
79
+ ref_node.send(:next=, node)
80
+ next_node.send(:prev=, node)
81
+
82
+ node
83
+ end
84
+
85
+ def add_before_key(ref_key, key, val)
86
+ ref_node = self.find_by_key(ref_key)
87
+ raise ArgumentError.new("No Node found with key=#{ref_key}") if ref_node.nil?
88
+
89
+ node = LinkedListNode.new(key, val)
90
+ prev_node = ref_node.send(:prev)
91
+
92
+ node.send(:next=, ref_node)
93
+ node.send(:prev=, prev_node)
94
+
95
+ ref_node.send(:prev=, node)
96
+ prev_node.send(:next=, node)
97
+
98
+ node
99
+ end
100
+
69
101
  def find_by_key(key)
70
102
  self.each { |node| return node if node.send(:key) == key }
71
103
  nil
@@ -36,12 +36,12 @@ class LRUCache
36
36
  node = @linked_list.append(key, val)
37
37
  @hash[key] = node
38
38
 
39
- @size += 1
40
- if @size > @max_size
39
+ if @size == @max_size
41
40
  first_node_key = @linked_list.first.send(:key)
42
41
  @linked_list.remove(first_node_key)
43
42
  @hash.delete(first_node_key)
44
- @size -= 1
43
+ else
44
+ @size += 1
45
45
  end
46
46
 
47
47
  node
@@ -51,12 +51,42 @@ class LRUCache
51
51
  node = @linked_list.prepend(key, val)
52
52
  @hash[key] = node
53
53
 
54
- @size += 1
55
- if @size > @max_size
54
+ if @size == @max_size
56
55
  last_node_key = @linked_list.last.send(:key)
57
56
  @linked_list.remove(last_node_key)
58
57
  @hash.delete(last_node_key)
59
- @size -= 1
58
+ else
59
+ @size += 1
60
+ end
61
+
62
+ node
63
+ end
64
+
65
+ def add_after_key(ref_key, key, val)
66
+ node = @linked_list.add_after_key(ref_key, key, val)
67
+ @hash[key] = node
68
+
69
+ if @size == @max_size
70
+ first_node_key = @linked_list.first.send(:key)
71
+ @linked_list.remove(first_node_key)
72
+ @hash.delete(first_node_key)
73
+ else
74
+ @size += 1
75
+ end
76
+
77
+ node
78
+ end
79
+
80
+ def add_before_key(ref_key, key, val)
81
+ node = @linked_list.add_before_key(ref_key, key, val)
82
+ @hash[key] = node
83
+
84
+ if @size == @max_size
85
+ last_node_key = @linked_list.last.send(:key)
86
+ @linked_list.remove(last_node_key)
87
+ @hash.delete(last_node_key)
88
+ else
89
+ @size += 1
60
90
  end
61
91
 
62
92
  node
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_structures
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Numeroff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-08 00:00:00.000000000 Z
11
+ date: 2018-05-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby implementations of a Stack, Queue, Linked List, Binary Tree and
14
14
  LRU Cache. More to come!