#ring-buffer #circular-buffer #ring #circular #deque #stack #array

no-std arraydeque

A ring buffer with a fixed capacity, which can be stored on the stack

9 releases

0.5.1 Feb 5, 2023
0.4.5 Mar 20, 2019
0.4.3 Aug 28, 2018
0.4.2 Mar 3, 2018
0.1.3 Oct 31, 2016

#122 in Data structures

Download history 114049/week @ 2024-11-16 107845/week @ 2024-11-23 122903/week @ 2024-11-30 150950/week @ 2024-12-07 136678/week @ 2024-12-14 61028/week @ 2024-12-21 66095/week @ 2024-12-28 147451/week @ 2025-01-04 156399/week @ 2025-01-11 141782/week @ 2025-01-18 155343/week @ 2025-01-25 159368/week @ 2025-02-01 156868/week @ 2025-02-08 172077/week @ 2025-02-15 248551/week @ 2025-02-22 462981/week @ 2025-03-01

1,070,809 downloads per month
Used in 207 crates (34 directly)

MIT/Apache

100KB
2K SLoC

arraydeque

build status crates.io docs.rs

A circular buffer with fixed capacity. Requires Rust 1.59+.

This crate is inspired by bluss/arrayvec

Documentation

Usage

First, add the following to your Cargo.toml:

[dependencies]
arraydeque = "0.5"

Next, add this to your crate root:

extern crate arraydeque;

Currently arraydeque by default links to the standard library, but if you would instead like to use arraydeque in a #![no_std] situation or crate you can request this via:

[dependencies]
arraydeque = { version = "0.4", default-features = false }

Example

extern crate arraydeque;

use arraydeque::ArrayDeque;

fn main() {
    let mut deque: ArrayDeque<_, 2> = ArrayDeque::new();
    assert_eq!(deque.capacity(), 2);
    assert_eq!(deque.len(), 0);

    deque.push_back(1);
    deque.push_back(2);
    assert_eq!(deque.len(), 2);

    assert_eq!(deque.pop_front(), Some(1));
    assert_eq!(deque.pop_front(), Some(2));
    assert_eq!(deque.pop_front(), None);
}

Changelog

  • 0.5.1 Make ArrayDeque::new() a const fn.

  • 0.5.0 Support consnt generic capacity. Remove use_generic_array feature.

  • 0.4.5 Update generic-array to 0.12.

  • 0.4.4 Fix UB: Some(ArrayDeque::new(xs)).is_some() == false. (#12)

  • 0.4.3 Add support for generic-array under use_generic_array feature.

  • 0.4.1 Capacity now equal to backend_array.len().

  • 0.3.1 Add behaviors: Saturating and Wrapping.

Contribution

All kinds of contribution are welcomed.

  • Issues. Feel free to open an issue when you find typos, bugs, or have any question.
  • Pull requests. New collection, better implementation, more tests, more documents and typo fixes are all welcomed.

License

Licensed under MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

No runtime deps

Features