ruby_structures 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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!