/// A trait for types that are an array. | |
/// | |
/// An "array", for our purposes, has the following properties: | |
/// * Owns some number of elements. | |
/// * The element type can be generic, but must implement [`Default`]. | |
/// * The capacity is fixed at compile time, based on the implementing type. | |
/// * You can get a shared or mutable slice to the elements. | |
/// | |
/// You are generally **not** expected to need to implement this yourself. It is | |
/// already implemented for all the major array lengths (`0..=32` and the powers | |
/// of 2 up to 4,096), or for all array lengths with the feature `rustc_1_55`. | |
/// | |
/// **Additional lengths can easily be added upon request.** | |
/// | |
/// ## Safety Reminder | |
/// | |
/// Just a reminder: this trait is 100% safe, which means that `unsafe` code | |
/// **must not** rely on an instance of this trait being correct. | |
pub trait Array { | |
/// The type of the items in the thing. | |
type Item: Default; | |
/// The number of slots in the thing. | |
const CAPACITY: usize; | |
/// Gives a shared slice over the whole thing. | |
/// | |
/// A correct implementation will return a slice with a length equal to the | |
/// `CAPACITY` value. | |
fn as_slice(&self) -> &[Self::Item]; | |
/// Gives a unique slice over the whole thing. | |
/// | |
/// A correct implementation will return a slice with a length equal to the | |
/// `CAPACITY` value. | |
fn as_slice_mut(&mut self) -> &mut [Self::Item]; | |
/// Create a default-initialized instance of ourself, similar to the | |
/// [`Default`] trait, but implemented for the same range of sizes as | |
/// [`Array`]. | |
fn default() -> Self; | |
} | |
#[cfg(feature = "rustc_1_55")] | |
mod const_generic_impl; | |
#[cfg(not(feature = "rustc_1_55"))] | |
mod generated_impl; |