ring_queue Build Status

A double-ended queue implemented using a Vec that reuses space after elements are removed.

The API is heavily based on collections.deque from Python.

You can create a ring using any of the available constructors or the ring! macro.

```rust

[macrouse] extern crate ringqueue;

use ring_queue::Ring;

// new for an empty ring. let r: Ring = Ring::new();

// with_capacity for allocating the internal vector with the given // capacity. let r2: Ring = Ring::with_capacity(5);

// ring! macro for easy initializing the ring. let r3: Ring = ring![1, 2, 3];

// from_iter to construct the ring from an iterator. use std::iter::FromIterator; let r4: Ring = Ring::from_iter(vec![1, 2, 3]); ```

Instead of front and back as a nomenclature, this library uses left to refer to the front an nothing to refer to the back, as the Python collections.deque library does.

Items can be pushed to the left and right as well as popped.

```rust

[macrouse] extern crate ringqueue;

use ring_queue::Ring;

let mut r = ring![1, 2, 3]; r.push(4); r.pushleft(0); asserteq!(r.pop(), Some(4)); asserteq!(r.popleft(), Some(0)); ```

The ring can be rotated either to the left or to the right. Any positive number will rotate n steps to the right and any negative number will rotate n steps to the left.

```rust

[macrouse] extern crate ringqueue;

use ring_queue::Ring;

let mut r = ring![1, 2, 3, 4, 5];

r.rotate(1); assert_eq!(r.collect(), vec![5, 1, 2, 3, 4]);

r.rotate(-2); assert_eq!(r.collect(), vec![2, 3, 4, 5, 1]); ```

Ring implements collect to collect the elements in the ring as a vector if the type of the elements implements the Copy trait. It also implements into_iter to generate an iterator. However, into_iter empties the ring.

```rust

[macrouse] extern crate ringqueue;

use ring_queue::Ring;

let mut r = ring![1, 2, 3, 4]; asserteq!(r.collect(), vec![1, 2, 3, 4]); asserteq!(r.is_empty(), false);

for item in r.into_iter() { println!("{}", item); }

asserteq!(r.isempty(), true); ```

LICENSE

MIT License, see LICENSE