Crates.io | slots-slice |
lib.rs | slots-slice |
version | 0.1.0 |
source | src |
created_at | 2023-06-22 14:18:06.036336 |
updated_at | 2023-06-22 14:18:06.036336 |
description | Provides utilities for manipulating slices of optional values. |
homepage | |
repository | https://github.com/Mainzu/slots-slice |
max_upload_size | |
id | 897443 |
size | 30,485 |
This is a small crate that aims provides utilities for manipulating slices of optional values, referred to as Slots<T>
.
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]);