Crates.io | coe-rs |
lib.rs | coe-rs |
version | 0.1.2 |
source | src |
created_at | 2023-03-20 22:34:15.940785 |
updated_at | 2023-03-20 22:41:13.327649 |
description | Type coercion |
homepage | |
repository | https://github.com/sarah-ek/coe-rs/ |
max_upload_size | |
id | 815650 |
size | 6,942 |
coe-rs
is a Rust library for coercing a value of a given type into the same type, in cases
where the compiler can't prove the two types are equal.
This can be used to emulate specialization in to a limited extent.
use coe::{Coerce, is_same};
use core::ops::Add;
fn foo<T: 'static + Copy + Add<Output = T>>(slice: &mut [T]) {
if is_same::<f64, T>() {
// use some optimized SIMD implementation
// ...
println!("using SIMD operations");
let slice: &mut [f64] = slice.coerce();
} else {
for value in slice {
println!("using fallback implementation");
*value = *value + *value;
}
}
}
foo(&mut [1, 2, 3u64]); // calls fallback implementation
foo(&mut [1.0, 2.0, 3.0f64]); // calls SIMD implementation