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())
}
}Structs§
- Bool
- Marker type for passing
const VAL: boolas a type parameter. - Char
- Marker type for passing
const VAL: charas a type parameter. - I8
- Marker type for passing
const VAL: i8as a type parameter. - I16
- Marker type for passing
const VAL: i16as a type parameter. - I32
- Marker type for passing
const VAL: i32as a type parameter. - I64
- Marker type for passing
const VAL: i64as a type parameter. - I128
- Marker type for passing
const VAL: i128as a type parameter. - Isize
- Marker type for passing
const VAL: isizeas a type parameter. - U8
- Marker type for passing
const VAL: u8as a type parameter. - U16
- Marker type for passing
const VAL: u16as a type parameter. - U32
- Marker type for passing
const VAL: u32as a type parameter. - U64
- Marker type for passing
const VAL: u64as a type parameter. - U128
- Marker type for passing
const VAL: u128as a type parameter. - Usize
- Marker type for passing
const VAL: usizeas a type parameter.
Enums§
Traits§
- Const
Marker - A type that represents a constant
- Const
Marker Of - Trait alias for
ConstMarker<Of = Of>