#![no_std]
pub use _hidden::*;
pub use cust_derive::DeviceCopyCore as DeviceCopy;
#[doc(hidden)]
pub mod _hidden {
use core::marker::PhantomData;
use core::num::*;
pub unsafe trait DeviceCopy: Copy {}
macro_rules! impl_device_copy {
($($t:ty)*) => {
$(
unsafe impl DeviceCopy for $t {}
)*
}
}
impl_device_copy!(
usize u8 u16 u32 u64 u128
isize i8 i16 i32 i64 i128
f32 f64
bool char
NonZeroU8 NonZeroU16 NonZeroU32 NonZeroU64 NonZeroU128
);
unsafe impl<T: DeviceCopy> DeviceCopy for Option<T> {}
unsafe impl<L: DeviceCopy, R: DeviceCopy> DeviceCopy for Result<L, R> {}
unsafe impl<T: ?Sized + DeviceCopy> DeviceCopy for PhantomData<T> {}
unsafe impl DeviceCopy for PhantomData<&()> {}
unsafe impl<T: DeviceCopy> DeviceCopy for Wrapping<T> {}
unsafe impl<T: DeviceCopy, const N: usize> DeviceCopy for [T; N] {}
unsafe impl DeviceCopy for () {}
unsafe impl<A: DeviceCopy, B: DeviceCopy> DeviceCopy for (A, B) {}
unsafe impl<A: DeviceCopy, B: DeviceCopy, C: DeviceCopy> DeviceCopy for (A, B, C) {}
unsafe impl<A: DeviceCopy, B: DeviceCopy, C: DeviceCopy, D: DeviceCopy> DeviceCopy
for (A, B, C, D)
{
}
unsafe impl<A: DeviceCopy, B: DeviceCopy, C: DeviceCopy, D: DeviceCopy, E: DeviceCopy>
DeviceCopy for (A, B, C, D, E)
{
}
unsafe impl<
A: DeviceCopy,
B: DeviceCopy,
C: DeviceCopy,
D: DeviceCopy,
E: DeviceCopy,
F: DeviceCopy,
> DeviceCopy for (A, B, C, D, E, F)
{
}
unsafe impl<
A: DeviceCopy,
B: DeviceCopy,
C: DeviceCopy,
D: DeviceCopy,
E: DeviceCopy,
F: DeviceCopy,
G: DeviceCopy,
> DeviceCopy for (A, B, C, D, E, F, G)
{
}
unsafe impl<
A: DeviceCopy,
B: DeviceCopy,
C: DeviceCopy,
D: DeviceCopy,
E: DeviceCopy,
F: DeviceCopy,
G: DeviceCopy,
H: DeviceCopy,
> DeviceCopy for (A, B, C, D, E, F, G, H)
{
}
macro_rules! impl_device_copy_generic {
($($($strukt:ident)::+),* $(,)?) => {
$(
unsafe impl<T: DeviceCopy> DeviceCopy for $($strukt)::+<T> {}
)*
}
}
macro_rules! impl_device_copy {
($($strukt:ty),* $(,)?) => {
$(
unsafe impl DeviceCopy for $strukt {}
)*
}
}
#[cfg(feature = "vek")]
use vek::*;
#[cfg(feature = "vek")]
impl_device_copy_generic! {
Vec2, Vec3, Vec4, Extent2, Extent3,
Mat2, Mat3, Mat4,
CubicBezier2, CubicBezier3,
Quaternion,
}
#[cfg(feature = "glam")]
impl_device_copy! {
glam::Vec2, glam::Vec3, glam::Vec4, glam::IVec2, glam::IVec3, glam::IVec4,
}
#[cfg(feature = "mint")]
impl_device_copy_generic! {
mint::Vector2, mint::Vector3, mint::Vector4,
mint::ColumnMatrix2, mint::ColumnMatrix3, mint::ColumnMatrix4, mint::ColumnMatrix3x4,
mint::RowMatrix2, mint::RowMatrix3, mint::RowMatrix4, mint::RowMatrix3x4,
}
#[cfg(feature = "half")]
unsafe impl DeviceCopy for half::f16 {}
#[cfg(feature = "half")]
unsafe impl DeviceCopy for half::bf16 {}
#[cfg(feature = "num-complex")]
impl_device_copy_generic! {
num_complex::Complex
}
}