generic_array

Trait ArrayLength

Source
pub unsafe trait ArrayLength: Unsigned + 'static {
    type ArrayType<T>: Sealed;
}
Expand description

Trait used to define the number of elements in a GenericArray.

ArrayLength is a superset of typenum::Unsigned.

Consider N: ArrayLength to be equivalent to const N: usize

fn foo<N: ArrayLength>(arr: GenericArray<i32, N>) -> i32 {
    arr.iter().sum()
}

is equivalent to:

fn foo<const N: usize>(arr: [i32; N]) -> i32 {
    arr.iter().sum()
}

§Safety

This trait is effectively sealed due to only being allowed on Unsigned types, and therefore cannot be implemented in user code.

Required Associated Types§

Source

type ArrayType<T>: Sealed

Associated type representing the underlying contiguous memory that constitutes an array with the given number of elements.

This is an implementation detail, but is required to be public in cases where certain attributes of the inner type of GenericArray cannot be proven, such as Copy bounds.

Copy example:

struct MyType<N: ArrayLength> {
    data: GenericArray<f32, N>,
}

impl<N: ArrayLength> Clone for MyType<N> where N::ArrayType<f32>: Copy {
    fn clone(&self) -> Self { MyType { ..*self } }
}

impl<N: ArrayLength> Copy for MyType<N> where N::ArrayType<f32>: Copy {}

Alternatively, using the entire GenericArray<f32, N> type as the bounds works:

where GenericArray<f32, N>: Copy

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl ArrayLength for UTerm

Source§

impl<N: ArrayLength> ArrayLength for UInt<N, B0>

Source§

impl<N: ArrayLength> ArrayLength for UInt<N, B1>

Implementors§