ncollide3d/utils/
as_bytes.rs

1use std::mem;
2use std::slice;
3
4use na::{Point2, Point3, Vector2, Vector3};
5use simba::scalar::RealField;
6
7/// Trait that transforms thing to a slice of u8.
8pub trait AsBytes {
9    fn as_bytes(&self) -> &[u8];
10}
11
12macro_rules! generic_as_bytes_impl(
13    ($t: ident, $dimension: expr) => (
14        impl<N: RealField + Copy> AsBytes for $t<N> {
15            #[inline(always)]
16            fn as_bytes<'a>(&'a self) -> &'a [u8] {
17                unsafe {
18                    slice::from_raw_parts(mem::transmute(self), mem::size_of::<N>() * $dimension)
19                }
20            }
21        }
22    )
23);
24
25generic_as_bytes_impl!(Vector2, 2);
26generic_as_bytes_impl!(Point2, 2);
27generic_as_bytes_impl!(Vector3, 2);
28generic_as_bytes_impl!(Point3, 2);
29
30// FIXME: implement for all `T: Copy` insead?