#array #length #traits #dimension #generic #const #parameters

nightly array_trait

A generic trait for any array, with item as type and length as const parameter

62 releases (3 stable)

new 1.0.2 Dec 16, 2024
1.0.0 Dec 29, 2023
0.6.18 Nov 23, 2023
0.5.7 Jul 28, 2023

#1729 in Rust patterns

Download history 23/week @ 2024-08-26 22/week @ 2024-09-02 14/week @ 2024-09-09 18/week @ 2024-09-16 48/week @ 2024-09-23 14/week @ 2024-09-30 29/week @ 2024-10-14 7/week @ 2024-10-21 8/week @ 2024-10-28 23/week @ 2024-11-04 19/week @ 2024-11-18 20/week @ 2024-11-25 24/week @ 2024-12-02 156/week @ 2024-12-09

219 downloads per month
Used in 9 crates (via array__ops)

MIT license

16KB
137 lines

Build Status (nightly)

Build Status (stable)

Test Status Lint Status

Latest Version License:MIT Documentation Coverage Status

array_trait

A trait for any array, with item as an associated type, and length as an assiciated constant.

Examples

use array_trait::*;

type Arr3 = [i8; 3];

const A: Arr3 = [1, 2, 3];

// The assiciated constant `LENGTH` equals the length of the array
assert_eq!(Arr3::LENGTH, 3);
assert_eq!(Arr3::LENGTH, A.len());
#![feature(const_trait_impl)]
#![feature(generic_const_exprs)]

use array_trait::*;

type Arr3 = [i8; 3];

const A: Arr3 = [1, 2, 3];

/// The trait can be used in a function like this:
const fn first<'a, T: ~const Array>(array: &'a T) -> Option<&'a T::Item>
where
    [(); T::LENGTH]: // This is required for now.
{
    array.as_array().first()
}
assert_eq!(first(&A), Some(&1));

N-dimensional arrays

There is also a trait for N-dimensional arrays, which contain information on its inner structure, and supports a depth up to 64 dimensions.

The associated constants DIMENSIONS and FLAT_LENGTH vary depending on the chosen depth.

The assiciated type ItemNd represents the innermost type given a chosen depth.

Examples

use array_trait::*;

type Mat2x3 = [[i8; 3]; 2];

/// The number of dimensions
const DEPTH: usize = 2;

// `FLAT_LENGTH` is the combined length if the N-dimensional array was flattened,
// i.e. the product of the lengths of each dimension.
assert_eq!(<Mat2x3 as ArrayNd<DEPTH>>::FLAT_LENGTH, 6);

// `DIMENSIONS` contains the lengths of each dimension ordered outermost to innermost.
assert_eq!(<Mat2x3 as ArrayNd<DEPTH>>::DIMENSIONS, [2, 3]);

More operations

For more operations with arrays, using this as a basis, check out the crate array__ops.

Dependencies

~26KB