summaryrefslogtreecommitdiff
path: root/libbindgen/src/ir/layout.rs
diff options
context:
space:
mode:
Diffstat (limited to 'libbindgen/src/ir/layout.rs')
-rw-r--r--libbindgen/src/ir/layout.rs91
1 files changed, 0 insertions, 91 deletions
diff --git a/libbindgen/src/ir/layout.rs b/libbindgen/src/ir/layout.rs
deleted file mode 100644
index 033fff62..00000000
--- a/libbindgen/src/ir/layout.rs
+++ /dev/null
@@ -1,91 +0,0 @@
-//! Intermediate representation for the physical layout of some type.
-
-use std::cmp;
-use super::context::BindgenContext;
-use super::derive::{CanDeriveCopy, CanDeriveDebug};
-use super::ty::RUST_DERIVE_IN_ARRAY_LIMIT;
-
-/// A type that represents the struct layout of a type.
-#[derive(Debug, Clone, Copy)]
-pub struct Layout {
- /// The size (in bytes) of this layout.
- pub size: usize,
- /// The alignment (in bytes) of this layout.
- pub align: usize,
- /// Whether this layout's members are packed or not.
- pub packed: bool,
-}
-
-impl Layout {
- /// Construct a new `Layout` with the given `size` and `align`. It is not
- /// packed.
- pub fn new(size: usize, align: usize) -> Self {
- Layout {
- size: size,
- align: align,
- packed: false,
- }
- }
-
- /// Is this a zero-sized layout?
- pub fn is_zero(&self) -> bool {
- self.size == 0 && self.align == 0
- }
-
- /// Construct a zero-sized layout.
- pub fn zero() -> Self {
- Self::new(0, 0)
- }
-
- /// Get this layout as an opaque type.
- pub fn opaque(&self) -> Opaque {
- Opaque(*self)
- }
-}
-
-/// When we are treating a type as opaque, it is just a blob with a `Layout`.
-pub struct Opaque(pub Layout);
-
-impl Opaque {
- /// Return the known rust type we should use to create a correctly-aligned
- /// field with this layout.
- pub fn known_rust_type_for_array(&self) -> Option<&'static str> {
- Some(match self.0.align {
- 8 => "u64",
- 4 => "u32",
- 2 => "u16",
- 1 => "u8",
- _ => return None,
- })
- }
-
- /// Return the array size that an opaque type for this layout should have if
- /// we know the correct type for it, or `None` otherwise.
- pub fn array_size(&self) -> Option<usize> {
- if self.known_rust_type_for_array().is_some() {
- Some(self.0.size / cmp::max(self.0.align, 1))
- } else {
- None
- }
- }
-}
-
-impl CanDeriveDebug for Opaque {
- type Extra = ();
-
- fn can_derive_debug(&self, _: &BindgenContext, _: ()) -> bool {
- self.array_size().map_or(false, |size| size <= RUST_DERIVE_IN_ARRAY_LIMIT)
- }
-}
-
-impl<'a> CanDeriveCopy<'a> for Opaque {
- type Extra = ();
-
- fn can_derive_copy(&self, _: &BindgenContext, _: ()) -> bool {
- self.array_size().map_or(false, |size| size <= RUST_DERIVE_IN_ARRAY_LIMIT)
- }
-
- fn can_derive_copy_in_array(&self, ctx: &BindgenContext, _: ()) -> bool {
- self.can_derive_copy(ctx, ())
- }
-}