Sha256: ae2bc64b339ff3e8a17684b25a180fbf04184cae26baf05fb8ed542005f6d9f5

Contents?: true

Size: 1.7 KB

Versions: 30

Compression:

Stored size: 1.7 KB

Contents

/// 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;

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
wasmtime-23.0.2 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-22.0.0 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-21.0.1 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-20.0.2 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-20.0.0 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-18.0.3 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-17.0.1 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-17.0.0 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-16.0.0 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-15.0.1 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-15.0.0 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-14.0.4 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-14.0.3 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-14.0.1 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-14.0.0 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-13.0.0 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-12.0.1 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-12.0.0 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-11.0.0 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs
wasmtime-10.0.1 ./ext/cargo-vendor/tinyvec-1.6.0/src/array.rs