FIFO Queue (First-In-First-Out)
Pure Nim implementation of a fixed-capacity FIFO queue with zero heap allocation.
Features:
- Fixed capacity at compile time (no dynamic allocation)
- Thread-safe for single producer/single consumer
- Audio-rate safe (no locks, predictable performance)
- Generic type support via templates
Use Cases:
- Event queues
- Message passing between threads
- Audio sample buffering
- Command queues
Memory:
- Stack allocated only
- Size known at compile time
- Zero runtime overhead
Usage:
import nimphea_fifo # Create FIFO for 16 integers var queue: Fifo[16, int] queue.init() # Push values discard queue.push(42) discard queue.push(100) # Pop values (FIFO order) var value: int if queue.pop(value): echo value # 42 (first in, first out) # Check state echo queue.len() # Current count echo queue.isEmpty() # false echo queue.isFull() # false
Procs
proc peek[N: static int; T](this: Fifo[N, T]; value: var T): bool {.inline.}
-
Peek at the next value without removing it
Parameters:
- value - Output parameter to receive the peeked value
Returns: true if successful, false if queue was empty
Example:
var val: int if queue.peek(val): echo "Next value: ", val # Queue unchanged
Source Edit proc pop[N: static int; T](this: var Fifo[N, T]; value: var T): bool {.inline.}
-
Pop a value from the queue (from head)
Parameters:
- value - Output parameter to receive the popped value
Returns: true if successful, false if queue was empty
Example:
var val: int if queue.pop(val): echo "Popped: ", val else: echo "Queue empty"
Source Edit