Module typewit::const_marker

source ·
Expand description

Marker types for passing constants as type arguments.

Example

This example emulates specialization, eliding a .clone() call when the created array is only one element long.

use typewit::{const_marker::Usize, TypeCmp, TypeEq};
 
let arr = [3u8, 5, 8];
 
assert_eq!(repeat(3), []);
assert_eq!(repeat(3), [3]);
assert_eq!(repeat(3), [3, 3]);
assert_eq!(repeat(3), [3, 3, 3]);
assert_eq!(repeat(3), [3, 3, 3, 3]);
 
 
fn repeat<T: Clone, const OUT: usize>(val: T) -> [T; OUT] {
    // `te_len` ìs a `TypeEq<Usize<OUT>, Usize<1>>`
    if let TypeCmp::Eq(te_len) = Usize::<OUT>.equals(Usize::<1>) {
        // This branch is ran when `OUT == 1`
        TypeEq::new::<T>()    // returns `TypeEq<T, T>`
            .in_array(te_len) // returns `TypeEq<[T; OUT], [T; 1]>`
            .to_left([val])   // goes from `[T; 1]` to `[T; OUT]`
    } else {
        // This branch is ran when `OUT != 1`
        [(); OUT].map(|_| val.clone())
    }
}

Modules

  • sliceadt_const_marker
    Marker types for const FOO: &'static [T] parameters.

Structs

  • Marker type for passing const VAL: bool as a type parameter.
  • Marker type for passing const VAL: char as a type parameter.
  • Marker type for passing const VAL: i8 as a type parameter.
  • Marker type for passing const VAL: i16 as a type parameter.
  • Marker type for passing const VAL: i32 as a type parameter.
  • Marker type for passing const VAL: i64 as a type parameter.
  • Marker type for passing const VAL: i128 as a type parameter.
  • Marker type for passing const VAL: isize as a type parameter.
  • Stradt_const_marker
    Marker type for passing const VAL: &'static str as a type parameter.
  • Marker type for passing const VAL: u8 as a type parameter.
  • Marker type for passing const VAL: u16 as a type parameter.
  • Marker type for passing const VAL: u32 as a type parameter.
  • Marker type for passing const VAL: u64 as a type parameter.
  • Marker type for passing const VAL: u128 as a type parameter.
  • Marker type for passing const VAL: usize as a type parameter.

Enums