mod pointer;
pub use self::pointer::*;
use core::marker::PhantomData;
use core::num::*;
pub unsafe trait DeviceCopy {
}
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<T: DeviceCopy> DeviceCopy for Wrapping<T> {}
macro_rules! impl_device_copy_array {
($($n:expr)*) => {
$(
unsafe impl<T: DeviceCopy> DeviceCopy for [T;$ n] {}
)*
}
}
impl_device_copy_array! {
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32
}
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)
{
}