Crates.io | queues |
lib.rs | queues |
version | 1.1.0 |
source | src |
created_at | 2017-09-22 13:31:34.317833 |
updated_at | 2019-01-16 12:02:28.978633 |
description | Efficient FIFO Queue data structures |
homepage | |
repository | https://gitlab.com/rust-algorithms/queues |
max_upload_size | |
id | 32637 |
size | 34,650 |
queues
provides a number of efficient FIFO Queue data structures for
usage in your libraries. These are all implemented on top of rust's Vector
type.
A queue is a linear data structure that commonly defines three methods:
add
: Also called queue
or push
, this adds elements to the queue.remove
: Also called deque
or pop
, this removes the oldest
element from the queue.peek
: Show the next element in the queue scheduled for removal.There are a number of variants of queues. In this crate, the available variants are:
Queue<T>
: A simple FIFO queue with a growable size and no limit on its
capacity.Buffer<T>
: A FIFO queue with with a limited capacity. The buffer can
have a growable size (up to the defined capacity), or it can be
initialized at capacity, with empty slots being occupied by default
values.CircularBuffer<T>
: Similar to the buffer above, but allowing for
overflow. Any additions to the circular buffer that would exceed its
capacity causes its oldest element to be pushed out.Quick guide to getting started with the project:
To use the library in your project, simply ensure that the queues
crate
has been added to your dependencies in your Cargo.toml
file.
[dependencies]
queues = "1.0.2"
In your files, import the crate and use it's members:
# #[macro_use]
extern crate queues;
use queues::*;
# fn main() { }
To get the project up and running:
> cd ${WORKING_DIR}
> git clone <this_repo>
> cargo build
Run the test suite using cargo
:
> cd ${PROJECT_FOLDER}
> cargo test
The project has a number of examples you can run to see how the library members work.
The example names are:
queue
Queue examplebuf
Buffer examplecbuf
Circular buffer examplecbuf_def
Circular buffer with default values example> cd ${PROJECT_FOLDER}
> cargo run --example ${EXAMPLE_NAME}
Simple usage is described below:
#[macro_use]
extern crate queues;
use queues::*;
fn main() {
// Create a simple Queue
let mut q: Queue<isize> = queue![];
// Add some elements to it
q.add(1);
q.add(-2);
q.add(3);
// Check the Queue's size
q.size(); // 3
// Remove an element
q.remove(); // Ok(1)
// Check the Queue's size
q.size(); // 2
// Peek at the next element scheduled for removal
q.peek(); // Ok(-2)
// Confirm that the Queue size hasn't changed
q.size(); // 2
// Remove the remaining elements
q.remove(); // Ok(-2)
q.remove(); // Ok(3)
// Peek into an empty Queue
q.peek(); // Raises an error
// Attempt to remove an element from an empty Queue
q.remove(); // Raises an error
}
The examples contain more information on Buffer
and CircularBuffer
usage