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