std::collections::queue (v0.2.2)
First-in first-out container.
Latest
Overview
std::collections::queue is a generic FIFO container. enqueue adds at the back, dequeue removes from the front, and front or back read the ends without removing.
dropQueue releases the storage when the container is no longer needed.
Source: thrustc/std/v0.2.2/collections/queue.thrust
Public Signatures
Exported declarations for this module snapshot.
struct Queue [T] @public {
fn newQueue [T] () Queue[T] @public;
fn withCapacity [T] (capacity: usize) Queue[T] @public;
fn dropQueue [T] (queue: ptr[Queue[T]]) void @public @deallocator;
fn getLength [T] (queue: ptr[Queue[T]]) usize @public;
fn getCapacity [T] (queue: ptr[Queue[T]]) usize @public;
fn isEmpty [T] (queue: ptr[Queue[T]]) bool @public;
fn enqueue [T] (queue: ptr[Queue[T]], value: T) void @public;
fn dequeue [T] (queue: ptr[Queue[T]]) T @public;
fn front [T] (queue: ptr[Queue[T]]) T @public;
fn back [T] (queue: ptr[Queue[T]]) T @public;
fn clear [T] (queue: ptr[Queue[T]]) void @public;
fn reserveCapacity [T] (queue: ptr[Queue[T]], capacity: usize) void @public;
fn shrinkToFit [T] (queue: ptr[Queue[T]]) void @public;
Behavior and Use
enqueue adds at the back; dequeue removes from the front; front and back read the ends without removal.
Call dropQueue when the container is no longer needed to release the backing storage.
Examples
import std::collections::queue;
import std::io;
// Process print jobs in the order they arrived.
fn main() s32 @public {
var jobs := queue::newQueue[s32]();
queue::enqueue[s32](ref jobs, 10);
queue::enqueue[s32](ref jobs, 20);
var job: s32 = queue::dequeue[s32](ref jobs);
io::print("processing job: %d\n", job);
queue::dropQueue[s32](ref jobs);
return 0;
}
import std::collections::queue;
import std::io;
// Inspect the next job and the last one queued.
fn main() s32 @public {
var jobs := queue::newQueue[s32]();
queue::enqueue[s32](ref jobs, 10);
queue::enqueue[s32](ref jobs, 20);
io::print("next: %d, last: %d\n", queue::front[s32](ref jobs), queue::back[s32](ref jobs));
queue::dropQueue[s32](ref jobs);
return 0;
}
import std::collections::queue;
import std::io;
// Drain the queue, handling each job in turn.
fn main() s32 @public {
var jobs := queue::newQueue[s32]();
queue::enqueue[s32](ref jobs, 1);
queue::enqueue[s32](ref jobs, 2);
while !queue::isEmpty[s32](ref jobs) {
var job: s32 = queue::dequeue[s32](ref jobs);
io::print("processing: %d\n", job);
}
queue::dropQueue[s32](ref jobs);
return 0;
}
Notes
- dequeue requires a non-empty queue.
- front and back read without removing the element.