tiny_ring 1.0.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/tiny_ring.rb +35 -0
  3. metadata +57 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0310e9d9d45217d00a3c355cd4858c8643ee3e35461c97d61e55a71afd70f66f
4
+ data.tar.gz: a0cd6337aa725c55a617bc9e39a44ab1d8e411359824f87cf5eae09db8553f99
5
+ SHA512:
6
+ metadata.gz: 98a113680b76baab7dbc4f2c2273aa142c12ef6c69a29de626e99d913e3fbc7a5b1df1970ed497b812b4da47972fd539c9ef14d94dffc29e14dc284dd5c5a0f3
7
+ data.tar.gz: feb8d20566eb55c86fa194c35577b17db3f9407288b42dd7164f2707d63c2f88545dc3e921d8a2ad8db4385c1c819d6b4288de2afea2a2ff218df8d7593d87b3
data/lib/tiny_ring.rb ADDED
@@ -0,0 +1,35 @@
1
+ # memory efficient ring buffer implementation
2
+ #
3
+ # usage:
4
+ # > tr = TinyRing.new(3)
5
+ # > tr << 1 # => [1, nil, nil]
6
+ # > tr << 2 # => [1, 2, nil]
7
+ # > tr << 3 # => [1, 2, 3]
8
+ # > tr << 4 # => [4, 2, 3]
9
+ # > puts tr.to_a.inspect # => [2, 3, 4]
10
+ class TinyRing
11
+ def initialize(size)
12
+ @size = size
13
+ @buffer = Array.new(size)
14
+ @current_index = 0
15
+ end
16
+
17
+ def push(item)
18
+ @buffer[@current_index] = item
19
+ @current_index = (@current_index + 1) % @size
20
+ end
21
+ alias << push
22
+
23
+ # returns the items most recently inserted into the ring buffer the most
24
+ # recently added item item added to the buffer.
25
+ # returns nil if the buffer is empty
26
+ def last
27
+ previous_index = (@current_index - 1) % @size
28
+ @buffer[previous_index]
29
+ end
30
+
31
+ # Returns the contents of the buffer as an Array, ordered from oldest to newest.
32
+ def to_a
33
+ (@buffer[@current_index..-1] + @buffer[0...@current_index]).compact
34
+ end
35
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tiny_ring
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jeff Lunt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-09-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: a tiny ring buffer implementation
28
+ email: jefflunt@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/tiny_ring.rb
34
+ homepage: https://github.com/jefflunt/tiny_ring
35
+ licenses:
36
+ - MIT
37
+ metadata: {}
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubygems_version: 3.3.7
54
+ signing_key:
55
+ specification_version: 4
56
+ summary: a tiny ring buffer implementation that is memory efficient
57
+ test_files: []