lyng/docs/RingBuffer.md

1.4 KiB

RingBuffer

This is a fixed size buffer that allow to store N last elements with O(1) effectiveness (no data shifting).

Here is the sample:

val r = RingBuffer(3)
assert( r is RingBuffer )
assertEquals(0, r.size)
assertEquals(3, r.capacity)

r += 10
assertEquals(1, r.size)
assertEquals(10, r.first)

r += 20
assertEquals(2, r.size)
assertEquals( [10, 20], r.toList() )

r += 30
assertEquals(3, r.size)
assertEquals( [10, 20, 30], r.toList() )

// now first value is lost:
r += 40
assertEquals(3, r.size)
assertEquals( [20, 30, 40], r.toList() )
assertEquals(3, r.capacity)

>>> void

Ring buffer implements Iterable, so any of its methods are available for RingBuffer, e.g. first, last, toList, take, drop, takelast, dropLast, etc.

Constructor

RinbBuffer(capacity: Int)

Instance methods

method description remarks
capacity max size of the buffer
size current size (1)
operator += add new item (1)
add(item) add new item (1)
iterator() return iterator (1)
(1)
Ringbuffer is not threadsafe, protect it with a mutex to avoid RC where necessary.