22 lines
357 B
Ruby
22 lines
357 B
Ruby
class RingBuffer < Array
|
|
attr_reader :max_size
|
|
|
|
def initialize(max_size, enum = nil)
|
|
@max_size = max_size
|
|
enum.each { |e| self << e } if enum
|
|
end
|
|
|
|
def <<(el)
|
|
if self.size < @max_size || @max_size.nil?
|
|
super
|
|
else
|
|
self.shift
|
|
self.push(el)
|
|
end
|
|
end
|
|
|
|
def not_nil_length
|
|
reject { |i| i.nil? }.count
|
|
end
|
|
end
|