//! Intermediate representation for the physical layout of some type.
usecrate::ir::context::BindgenContext;
/// A type that represents the struct layout of a type. #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub(crate) struct Layout { /// The size (in bytes) of this layout. pub(crate) size: usize, /// The alignment (in bytes) of this layout. pub(crate) align: usize, /// Whether this layout's members are packed or not. pub(crate) packed: bool,
}
impl Layout { /// Gets the integer type name for a given known size. pub(crate) fn known_type_for_size(size: usize) -> Option<syn::Type> {
Some(match size { 16 => syn::parse_quote! { u128 }, 8 => syn::parse_quote! { u64 }, 4 => syn::parse_quote! { u32 }, 2 => syn::parse_quote! { u16 }, 1 => syn::parse_quote! { u8 },
_ => return None,
})
}
/// Construct a new `Layout` with the given `size` and `align`. It is not /// packed. pub(crate) fn new(size: usize, align: usize) -> Self {
Layout {
size,
align,
packed: false,
}
}
/// Creates a non-packed layout for a given size, trying to use the maximum /// alignment possible. pub(crate) fn for_size(ctx: &BindgenContext, size: usize) -> Self { Self::for_size_internal(ctx.target_pointer_size(), size)
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.