CircularBuffer (circular_buffer v1.0.0)
View SourceCircular Buffer
When creating a circular buffer you must specify the max size:
cb = CircularBuffer.new(10)
CircularBuffers are implemented as Okasaki queues like Erlang's :queue
module, but with additional optimizations thanks to the reduced set
of operations.
CircularBuffer implements both the
Enumerable
and
Collectable
protocols, so code
like the following works:
iex> cb = Enum.into([1, 2, 3, 4], CircularBuffer.new(3))
#CircularBuffer<[2, 3, 4]>
iex> Enum.map(cb, fn x -> x * 2 end)
[4, 6, 8]
Summary
Functions
Checks the buffer to see if its empty
Inserts a new item into the next location of the circular buffer
Creates a new circular buffer with a given size.
Returns the newest element in the buffer
Returns the oldest element in the buffer
Converts a circular buffer to a list. The list is ordered from oldest to newest elements based on their insertion order.
Types
Functions
Checks the buffer to see if its empty
Returns true
if the given circular buffer is empty, otherwise false
.
Examples
iex> cb = CircularBuffer.new(1)
iex> CircularBuffer.empty?(cb)
true
iex> cb |> CircularBuffer.insert(1) |> CircularBuffer.empty?()
false
Inserts a new item into the next location of the circular buffer
@spec new(pos_integer()) :: t()
Creates a new circular buffer with a given size.
Returns the newest element in the buffer
Examples
iex> cb = CircularBuffer.new(3)
iex> CircularBuffer.newest(cb)
nil
iex> cb = Enum.reduce(1..4, cb, fn n, cb -> CircularBuffer.insert(cb, n) end)
iex> CircularBuffer.newest(cb)
4
Returns the oldest element in the buffer
Converts a circular buffer to a list. The list is ordered from oldest to newest elements based on their insertion order.