Class: Shazamio::RingBuffer

Inherits:
Object
  • Object
show all
Defined in:
lib/shazamio/algorithm.rb

Overview

Fixed-size circular buffer, ported from algorithm.py's RingBuffer(list).

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(buffer_size, default_value: nil) ⇒ RingBuffer

Returns a new instance of RingBuffer.



13
14
15
16
17
18
# File 'lib/shazamio/algorithm.rb', line 13

def initialize(buffer_size, default_value: nil)
  @buffer_size = buffer_size
  @data = Array.new(buffer_size) { default_value.nil? ? nil : default_value.dup }
  @position = 0
  @num_written = 0
end

Instance Attribute Details

#buffer_sizeObject (readonly)

Returns the value of attribute buffer_size.



10
11
12
# File 'lib/shazamio/algorithm.rb', line 10

def buffer_size
  @buffer_size
end

#num_writtenObject

Returns the value of attribute num_written.



11
12
13
# File 'lib/shazamio/algorithm.rb', line 11

def num_written
  @num_written
end

#positionObject

Returns the value of attribute position.



11
12
13
# File 'lib/shazamio/algorithm.rb', line 11

def position
  @position
end

Instance Method Details

#[](index) ⇒ Object



20
21
22
# File 'lib/shazamio/algorithm.rb', line 20

def [](index)
  @data[index % @buffer_size]
end

#[]=(index, value) ⇒ Object



24
25
26
# File 'lib/shazamio/algorithm.rb', line 24

def []=(index, value)
  @data[index % @buffer_size] = value
end

#append(value) ⇒ Object



28
29
30
31
32
# File 'lib/shazamio/algorithm.rb', line 28

def append(value)
  @data[@position] = value
  @position = (@position + 1) % @buffer_size
  @num_written += 1
end