Version: 4.1.5.3
Ring Buffers
(require (planet jaymccarthy/ring-buffer:1:0)) |
This package defines an imperative, overwritting ring buffer that holds a finite number of elements and may be used as a sequence.
(ring-buffer? v) → boolean? |
v : any/c |
Determines if v is a ring buffer.
(empty-ring-buffer max) → ring-buffer? |
max : exact-nonnegative-integer? |
Constructs an empty ring buffer that may hold max elements.
(ring-buffer-length rb) → exact-nonnegative-integer? |
rb : ring-buffer? |
Returns the length of rb.
(ring-buffer-push! rb v) → void |
rb : ring-buffer? |
v : (and/c any/c (not/c false/c)) |
Pushes v on to the end of rb, potentially pushing the first element of rb off.
Examples: | ||
| ||
> (ring-buffer-push! rb 1) | ||
> (ring-buffer-push! rb 2) | ||
> (ring-buffer-push! rb 3) | ||
> (for/list ([v rb]) v) | ||
(1 2 3) | ||
> (ring-buffer-push! rb 4) | ||
> (for/list ([v rb]) v) | ||
(2 3 4) |
(ring-buffer-ref rb i) → (or/c any/c false/c) |
rb : ring-buffer? |
i : exact-nonnegative-integer? |
Returns the value in the ith position of rb.
This interacts with ring-buffer-push!.
Examples: | ||
| ||
> (ring-buffer-push! rb 1) | ||
> (ring-buffer-push! rb 2) | ||
> (ring-buffer-push! rb 3) | ||
> (for/list ([v rb]) v) | ||
(1 2 3) | ||
> (ring-buffer-ref rb 1) | ||
2 | ||
> (ring-buffer-push! rb 4) | ||
> (ring-buffer-ref rb 1) | ||
3 |
(ring-buffer-set! rb i v) → void |
rb : ring-buffer? |
i : exact-nonnegative-integer? |
v : (and/c any/c (not/c false/c)) |
Sets the value in the ith position of rb to v
This interacts with ring-buffer-push!.