dynstack

A stack for trait objects that minimizes allocations

5 unstable releases

new 0.3.0 Apr 24, 2019
0.2.1 Apr 24, 2019
0.2.0 Dec 16, 2018
0.1.1 Dec 15, 2018
0.1.0 Nov 6, 2018

#272 in Data structures

21 downloads per month

MIT license

17KB
381 lines

dynstack

A stack for trait objects that minimizes allocations

COMPATIBILITY NOTE: dynstack relies on an underspecified fat pointer representation. Though it isn't expected to change in the foreseeable future, this crate expects Rust 1.34's representation.

Usage

dynstack can mostly replace anywhere you'd use a stack, or a vector that doesn't require removal from its center.

let mut stack = DynStack::<Debug>::new();
dyn_push!(stack, "hello, world!");
dyn_push!(stack, 0usize);
dyn_push!(stack, [1, 2, 3, 4, 5, 6]);

for item in stack.iter() {
    println!("{:?}", item);
}

// prints:
//  "hello, world!"
//  0
//  [1, 2, 3, 4, 5, 6]

lib.rs:

dynstack can mostly replace anywhere you'd use a stack, or a vector that doesn't require removal from its center.

# use dynstack::{DynStack, dyn_push};
# use std::fmt::Debug;
let mut stack = DynStack::<Debug>::new();
dyn_push!(stack, "hello, world!");
dyn_push!(stack, 0usize);
dyn_push!(stack, [1, 2, 3, 4, 5, 6]);

for item in stack.iter() {
    println!("{:?}", item);
}

// prints:
//  "hello, world!"
//  0
//  [1, 2, 3, 4, 5, 6]

No runtime deps