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
//! Bridge between rust types and raw values /// Rust C bridge traits pub mod traits { pub use super::{AsRaw, AsRawMut}; } /// A rust type than can identify as a raw value understood by the MPI C API. pub unsafe trait AsRaw { /// The raw MPI C API type type Raw; /// The raw value fn as_raw(&self) -> Self::Raw; } unsafe impl<'a, T> AsRaw for &'a T where T: 'a + AsRaw, { type Raw = <T as AsRaw>::Raw; fn as_raw(&self) -> Self::Raw { (*self).as_raw() } } /// A rust type than can provide a mutable pointer to a raw value understood by the MPI C API. pub unsafe trait AsRawMut: AsRaw { /// A mutable pointer to the raw value fn as_raw_mut(&mut self) -> *mut <Self as AsRaw>::Raw; }