slots-slice

Crates.ioslots-slice
lib.rsslots-slice
version0.1.0
sourcesrc
created_at2023-06-22 14:18:06.036336
updated_at2023-06-22 14:18:06.036336
descriptionProvides utilities for manipulating slices of optional values.
homepage
repositoryhttps://github.com/Mainzu/slots-slice
max_upload_size
id897443
size30,485
(Mainzu)

documentation

README

Slots Slice

Latest Version

This is a small crate that aims provides utilities for manipulating slices of optional values, referred to as Slots<T>.

Features

  • Conveniently manipulate slices of optional values.
  • Perform operations on slots such as counting, checking emptiness and fullness, and retrieving values and entries.
  • Macro syntax for creating and assigning.

Usage

Bring the prelude into scope:

use slots_slice::prelude::*;

The highlight of the crate are SlotsTrait and SlotsMutTrait which add methods for accessing and manipulating slots immutably and mutably. These operate on anything that implements AsRef<[T]> so they are available right away on structs such as array and Vec<T>.

Overview of SlotsTrait:

use slots_slice::prelude::*;

let slots = [None, Some('a'), None, Some('b')];

assert_eq!(slots.count(), 2);
assert!(!slots.is_empty());
assert!(!slots.is_full());

assert_eq!(slots.front_index(true), Some(1));
assert_eq!(slots.front_value(), Some(&'a'));
assert_eq!(slots.front_entry(), Some((1, &'a')));

SlotsMutTrait provide the mutable version of SlotsTrait as well as collapse functionality.

use slots_slice::prelude::*;

let mut slots = [None, Some('a'), None, Some('b')];

assert_eq!(slots.front_value_mut(), Some(&mut 'a'));
assert_eq!(slots.front_entry_mut(), Some((1, &mut 'a')));

slots.collapse_front();

assert_eq!(slots, [Some('a'), Some('b'), None, None]);
Commit count: 5

cargo fmt