Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. #[macro_export]
  2. macro_rules! declare_without_padding {(
  3. #[repr(C)]
  4. $(#[$struct_meta:meta])*
  5. $struct_vis:vis
  6. struct $StructName:ident {
  7. $(
  8. $(#[$field_meta:meta])*
  9. $field_vis:vis
  10. $field_name:ident : $field_ty:ty
  11. ),* $(,)?
  12. }
  13. ) => (
  14. #[repr(C)]
  15. $(#[$struct_meta])*
  16. $struct_vis
  17. struct $StructName {
  18. $(
  19. $(#[$field_meta])*
  20. $field_vis
  21. $field_name: $field_ty,
  22. )*
  23. }
  24.  
  25. const _: () = {
  26. trait HasNoPadding {}
  27. struct Struct<T> (::core::marker::PhantomData<T>);
  28.  
  29. impl<T> HasNoPadding for [Struct<T>; 0] {}
  30. fn assert_no_padding<T>() where
  31. T : HasNoPadding,
  32. {}
  33. const HAS_PADDING: bool = {
  34. ::core::mem::size_of::<$StructName>()
  35. >
  36. (0 $(+ ::core::mem::size_of::<$field_ty>())*)
  37. };
  38. let _ = assert_no_padding::<[Struct<$StructName>;
  39. HAS_PADDING
  40. as usize]>;
  41. };
  42. )}
  43.  
  44. declare_without_padding! {
  45. #[repr(C)]
  46. struct Foo {
  47. a: u8,
  48. b: u16,
  49. }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement