pub trait BitSliceIndex<'a, T, O>where
    T: BitStore,
    O: BitOrder,{
    type Immut;
    type Mut;

    // Required methods
    fn get(self, bits: &'a BitSlice<T, O>) -> Option<Self::Immut>;
    fn get_mut(self, bits: &'a mut BitSlice<T, O>) -> Option<Self::Mut>;
    unsafe fn get_unchecked(self, bits: &'a BitSlice<T, O>) -> Self::Immut;
    unsafe fn get_unchecked_mut(self, bits: &'a mut BitSlice<T, O>) -> Self::Mut;
    fn index(self, bits: &'a BitSlice<T, O>) -> Self::Immut;
    fn index_mut(self, bits: &'a mut BitSlice<T, O>) -> Self::Mut;
}
Expand description

Bit-Slice Indexing

This trait, like its mirror in core, unifies various types that can be used to index within a bit-slice. Individual usize indices can refer to exactly one bit within a bit-slice, and R: RangeBounds<usize> ranges can refer to subslices of any length within a bit-slice.

The three operations (get, get unchecked, and index) reflect the three theories of lookup within a collection: fallible, pre-checked, and crashing on failure.

You will likely not use this trait directly; its methods all have corresponding methods on BitSlice that delegate to particular implementations of it.

Original

slice::SliceIndex

API Differences

The SliceIndex::Output type is not usable here, because bitvec cannot manifest a &mut bool reference. Work to unify referential values in the trait system is ongoing, and in the future this functionality may be approximated.

Instead, this uses two output types, Immut and Mut, that are the referential structures produced by indexing immutably or mutably, respectively. This allows the range implementations to produce &/mut BitSlice as expected, while usize produces the proxy structure.

Required Associated Types§

source

type Immut

The output type of immutable access.

source

type Mut

The output type of mutable access.

Required Methods§

source

fn get(self, bits: &'a BitSlice<T, O>) -> Option<Self::Immut>

Immutably indexes into a bit-slice, returning None if self is out of bounds.

Original

SliceIndex::get

source

fn get_mut(self, bits: &'a mut BitSlice<T, O>) -> Option<Self::Mut>

Mutably indexes into a bit-slice, returning None if self is out of bounds.

Original

SliceIndex::get_mut

source

unsafe fn get_unchecked(self, bits: &'a BitSlice<T, O>) -> Self::Immut

Immutably indexes into a bit-slice without doing any bounds checking.

Original

SliceIndex::get_unchecked

Safety

If self is not in bounds, then memory accesses through it are illegal and the program becomes undefined. You must ensure that self is appropriately within 0 .. bits.len() at the call site.

source

unsafe fn get_unchecked_mut(self, bits: &'a mut BitSlice<T, O>) -> Self::Mut

Mutably indexes into a bit-slice without doing any bounds checking.

Original

SliceIndex::get_unchecked_mut

Safety

If self is not in bounds, then memory accesses through it bare illegal and the program becomes undefined. You must ensure that self is appropriately within 0 .. bits.len() at the call site.

source

fn index(self, bits: &'a BitSlice<T, O>) -> Self::Immut

Immutably indexes into a bit-slice, panicking if self is out of bounds.

Original

SliceIndex::index

Panics

Implementations are required to panic if self exceeds bits.len() in any way.

source

fn index_mut(self, bits: &'a mut BitSlice<T, O>) -> Self::Mut

Mutably indexes into a bit-slice, panicking if self is out of bounds.

Original

SliceIndex::index_mut

Panics

Implementations are required to panic if self exceeds bits.len() in any way.

Implementations on Foreign Types§

source§

impl<'a, T, O> BitSliceIndex<'a, T, O> for usizewhere T: BitStore, O: BitOrder,

§

type Immut = BitRef<'a, Const, T, O>

§

type Mut = BitRef<'a, Mut, T, O>

source§

fn get(self, bits: &'a BitSlice<T, O>) -> Option<Self::Immut>

source§

fn get_mut(self, bits: &'a mut BitSlice<T, O>) -> Option<Self::Mut>

source§

unsafe fn get_unchecked(self, bits: &'a BitSlice<T, O>) -> Self::Immut

source§

unsafe fn get_unchecked_mut(self, bits: &'a mut BitSlice<T, O>) -> Self::Mut

source§

fn index(self, bits: &'a BitSlice<T, O>) -> Self::Immut

source§

fn index_mut(self, bits: &'a mut BitSlice<T, O>) -> Self::Mut

source§

impl<'a, T, O> BitSliceIndex<'a, T, O> for Range<usize>where O: BitOrder, T: BitStore,

§

type Immut = &'a BitSlice<T, O>

§

type Mut = &'a mut BitSlice<T, O>

source§

fn get(self, bits: Self::Immut) -> Option<Self::Immut>

source§

fn get_mut(self, bits: Self::Mut) -> Option<Self::Mut>

source§

unsafe fn get_unchecked(self, bits: Self::Immut) -> Self::Immut

source§

unsafe fn get_unchecked_mut(self, bits: Self::Mut) -> Self::Mut

source§

fn index(self, bits: Self::Immut) -> Self::Immut

source§

fn index_mut(self, bits: Self::Mut) -> Self::Mut

source§

impl<'a, T, O> BitSliceIndex<'a, T, O> for RangeFrom<usize>where O: BitOrder, T: BitStore,

§

type Immut = &'a BitSlice<T, O>

§

type Mut = &'a mut BitSlice<T, O>

source§

fn get(self, bits: Self::Immut) -> Option<Self::Immut>

source§

fn get_mut(self, bits: Self::Mut) -> Option<Self::Mut>

source§

unsafe fn get_unchecked(self, bits: Self::Immut) -> Self::Immut

source§

unsafe fn get_unchecked_mut(self, bits: Self::Mut) -> Self::Mut

source§

fn index(self, bits: Self::Immut) -> Self::Immut

source§

fn index_mut(self, bits: Self::Mut) -> Self::Mut

source§

impl<'a, T, O> BitSliceIndex<'a, T, O> for RangeFullwhere T: BitStore, O: BitOrder,

§

type Immut = &'a BitSlice<T, O>

§

type Mut = &'a mut BitSlice<T, O>

source§

fn get(self, bits: Self::Immut) -> Option<Self::Immut>

source§

fn get_mut(self, bits: Self::Mut) -> Option<Self::Mut>

source§

unsafe fn get_unchecked(self, bits: Self::Immut) -> Self::Immut

source§

unsafe fn get_unchecked_mut(self, bits: Self::Mut) -> Self::Mut

source§

fn index(self, bits: Self::Immut) -> Self::Immut

source§

fn index_mut(self, bits: Self::Mut) -> Self::Mut

source§

impl<'a, T, O> BitSliceIndex<'a, T, O> for RangeInclusive<usize>where O: BitOrder, T: BitStore,

§

type Immut = &'a BitSlice<T, O>

§

type Mut = &'a mut BitSlice<T, O>

source§

fn get(self, bits: Self::Immut) -> Option<Self::Immut>

source§

fn get_mut(self, bits: Self::Mut) -> Option<Self::Mut>

source§

unsafe fn get_unchecked(self, bits: Self::Immut) -> Self::Immut

source§

unsafe fn get_unchecked_mut(self, bits: Self::Mut) -> Self::Mut

source§

fn index(self, bits: Self::Immut) -> Self::Immut

source§

fn index_mut(self, bits: Self::Mut) -> Self::Mut

source§

impl<'a, T, O> BitSliceIndex<'a, T, O> for RangeTo<usize>where O: BitOrder, T: BitStore,

§

type Immut = &'a BitSlice<T, O>

§

type Mut = &'a mut BitSlice<T, O>

source§

fn get(self, bits: Self::Immut) -> Option<Self::Immut>

source§

fn get_mut(self, bits: Self::Mut) -> Option<Self::Mut>

source§

unsafe fn get_unchecked(self, bits: Self::Immut) -> Self::Immut

source§

unsafe fn get_unchecked_mut(self, bits: Self::Mut) -> Self::Mut

source§

fn index(self, bits: Self::Immut) -> Self::Immut

source§

fn index_mut(self, bits: Self::Mut) -> Self::Mut

source§

impl<'a, T, O> BitSliceIndex<'a, T, O> for RangeToInclusive<usize>where O: BitOrder, T: BitStore,

§

type Immut = &'a BitSlice<T, O>

§

type Mut = &'a mut BitSlice<T, O>

source§

fn get(self, bits: Self::Immut) -> Option<Self::Immut>

source§

fn get_mut(self, bits: Self::Mut) -> Option<Self::Mut>

source§

unsafe fn get_unchecked(self, bits: Self::Immut) -> Self::Immut

source§

unsafe fn get_unchecked_mut(self, bits: Self::Mut) -> Self::Mut

source§

fn index(self, bits: Self::Immut) -> Self::Immut

source§

fn index_mut(self, bits: Self::Mut) -> Self::Mut

Implementors§