1.4 KiB
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.