Skip to main content

Module various

Module various 

Source
Expand description

Various - A small-list optimization container for efficient parameter passing.

Various<T> optimizing for the common case of a single element (use Option initially). It’s storage can be seamless grow when more elements pushed, using SegList, more efficient for CPU cache-line (compared to LinkedList), and produce less memory fragment (compared to Vec).

§NOTE:

It does not support random access, only sequential read and write.

§Example

use embed_collections::various::Various;

// Create an empty Various
let mut values = Various::new();

// Push a single element (no allocation)
values.push(42);
assert_eq!(values.len(), 1);
assert_eq!(values.first(), Some(&42));

// Push more elements (transitions to SegList internally)
values.push(100);
values.push(200);
assert_eq!(values.len(), 3);

// Iterate over elements
let sum: i32 = values.iter().sum();
assert_eq!(sum, 342);

// Pop elements from the back
assert_eq!(values.pop(), Some(200));
assert_eq!(values.pop(), Some(100));
assert_eq!(values.pop(), Some(42));
assert_eq!(values.pop(), None);

// Create from a single value
let single = Various::from("hello");
assert_eq!(single.first(), Some(&"hello"));

// Efficient for function parameter passing
fn process_items(items: &Various<i32>) -> i32 {
    items.iter().sum()
}

let items = Various::from(10);
assert_eq!(process_items(&items), 10);

Structs§

Various
VariousIntoIter
VariousIter
VariousIterMut