MCPcopy Create free account
hub / github.com/PyVRP/PyVRP / RingBuffer

Class RingBuffer

pyvrp/RingBuffer.py:6–57  ·  view source on GitHub ↗

Simple ring buffer structure. Initially the buffer is empty and padded with ``None`` values. Parameters ---------- maxlen Maximum buffer length.

Source from the content-addressed store, hash-verified

4
5
6class RingBuffer(Generic[T]):
7 """
8 Simple ring buffer structure. Initially the buffer is empty and padded with
9 ``None`` values.
10
11 Parameters
12 ----------
13 maxlen
14 Maximum buffer length.
15 """
16
17 def __init__(self, maxlen: int):
18 self._buffer: list[T | None] = [None for _ in range(maxlen)]
19 self._idx = 0
20
21 @property
22 def maxlen(self) -> int:
23 return len(self._buffer)
24
25 def __len__(self) -> int:
26 """
27 Returns the number of elements in the ring buffer.
28 """
29 return sum(val is not None for val in self._buffer)
30
31 def clear(self):
32 """
33 Clears the ring buffer.
34 """
35 self._buffer = [None for _ in range(self.maxlen)]
36 self._idx = 0
37
38 def append(self, value: T):
39 """
40 Append to the ring buffer, overwriting the oldest element in the
41 buffer.
42 """
43 self._buffer[self._idx % self.maxlen] = value
44 self._idx += 1
45
46 def peek(self) -> T | None:
47 """
48 Returns the next element that will be overwritten when appending
49 to the buffer.
50 """
51 return self._buffer[self._idx % self.maxlen]
52
53 def skip(self):
54 """
55 Skips the next element.
56 """
57 self._idx += 1

Callers 2

runMethod · 0.90
test_ring_bufferFunction · 0.90

Calls

no outgoing calls

Tested by 1

test_ring_bufferFunction · 0.72