iceoryx2_bb_elementary_traits/
zero_copy_send.rs1use iceoryx2_pal_concurrency_sync::iox_atomic::*;
14
15pub unsafe trait ZeroCopySend {
35 unsafe fn type_name() -> &'static str {
43 core::any::type_name::<Self>()
44 }
45
46 #[doc(hidden)]
47 fn __is_zero_copy_send(&self) {}
50}
51
52unsafe impl ZeroCopySend for usize {}
53unsafe impl ZeroCopySend for u8 {}
54unsafe impl ZeroCopySend for u16 {}
55unsafe impl ZeroCopySend for u32 {}
56unsafe impl ZeroCopySend for u64 {}
57unsafe impl ZeroCopySend for u128 {}
58
59unsafe impl ZeroCopySend for isize {}
60unsafe impl ZeroCopySend for i8 {}
61unsafe impl ZeroCopySend for i16 {}
62unsafe impl ZeroCopySend for i32 {}
63unsafe impl ZeroCopySend for i64 {}
64unsafe impl ZeroCopySend for i128 {}
65
66unsafe impl ZeroCopySend for f32 {}
67unsafe impl ZeroCopySend for f64 {}
68
69unsafe impl ZeroCopySend for char {}
70unsafe impl ZeroCopySend for bool {}
71
72unsafe impl ZeroCopySend for IoxAtomicUsize {}
73unsafe impl ZeroCopySend for IoxAtomicU8 {}
74unsafe impl ZeroCopySend for IoxAtomicU16 {}
75unsafe impl ZeroCopySend for IoxAtomicU32 {}
76unsafe impl ZeroCopySend for IoxAtomicU64 {}
77
78unsafe impl ZeroCopySend for IoxAtomicIsize {}
79unsafe impl ZeroCopySend for IoxAtomicI8 {}
80unsafe impl ZeroCopySend for IoxAtomicI16 {}
81unsafe impl ZeroCopySend for IoxAtomicI32 {}
82unsafe impl ZeroCopySend for IoxAtomicI64 {}
83
84unsafe impl ZeroCopySend for () {}
85
86unsafe impl ZeroCopySend for core::time::Duration {}
87
88unsafe impl<T: ZeroCopySend> ZeroCopySend for [T] {}
89unsafe impl<T: ZeroCopySend, const N: usize> ZeroCopySend for [T; N] {}
90unsafe impl<T: ZeroCopySend> ZeroCopySend for Option<T> {}
91unsafe impl<T: ZeroCopySend, E: ZeroCopySend> ZeroCopySend for Result<T, E> {}
92unsafe impl<T: ZeroCopySend> ZeroCopySend for core::mem::MaybeUninit<T> {}
93unsafe impl<T: ZeroCopySend> ZeroCopySend for core::cell::UnsafeCell<T> {}
94
95unsafe impl<T1: ZeroCopySend, T2: ZeroCopySend> ZeroCopySend for (T1, T2) {}
96unsafe impl<T1: ZeroCopySend, T2: ZeroCopySend, T3: ZeroCopySend> ZeroCopySend for (T1, T2, T3) {}
97unsafe impl<T1: ZeroCopySend, T2: ZeroCopySend, T3: ZeroCopySend, T4: ZeroCopySend> ZeroCopySend
98 for (T1, T2, T3, T4)
99{
100}
101unsafe impl<T1: ZeroCopySend, T2: ZeroCopySend, T3: ZeroCopySend, T4: ZeroCopySend, T5: ZeroCopySend>
102 ZeroCopySend for (T1, T2, T3, T4, T5)
103{
104}
105unsafe impl<
106 T1: ZeroCopySend,
107 T2: ZeroCopySend,
108 T3: ZeroCopySend,
109 T4: ZeroCopySend,
110 T5: ZeroCopySend,
111 T6: ZeroCopySend,
112 > ZeroCopySend for (T1, T2, T3, T4, T5, T6)
113{
114}
115unsafe impl<
116 T1: ZeroCopySend,
117 T2: ZeroCopySend,
118 T3: ZeroCopySend,
119 T4: ZeroCopySend,
120 T5: ZeroCopySend,
121 T6: ZeroCopySend,
122 T7: ZeroCopySend,
123 > ZeroCopySend for (T1, T2, T3, T4, T5, T6, T7)
124{
125}
126unsafe impl<
127 T1: ZeroCopySend,
128 T2: ZeroCopySend,
129 T3: ZeroCopySend,
130 T4: ZeroCopySend,
131 T5: ZeroCopySend,
132 T6: ZeroCopySend,
133 T7: ZeroCopySend,
134 T8: ZeroCopySend,
135 > ZeroCopySend for (T1, T2, T3, T4, T5, T6, T7, T8)
136{
137}