Skip to main content

Shape

Struct Shape 

Source
pub struct Shape<'a> {
    pub size: u64,
    pub align: u64,
    pub pieces: &'a [Piece],
    pub complex: bool,
}
Expand description

An aggregate, as much of it as an ABI cares about.

The pieces are every scalar in it, arrays and nested records flattened out, in offset order. Padding is not a piece: a hole is described by the offsets around it, which is what the classification rules are written over.

Fields§

§size: u64

The size of the whole thing in bytes, padding included.

§align: u64

What it is aligned to, in bytes.

§pieces: &'a [Piece]

The scalars in it.

§complex: bool

Whether it is a _Complex rather than a struct or a union of the same shape.

One rule reads this and it is on SysV AMD64, where _Complex long double comes back on the x87 stack and struct { long double a, b; }, which is the same thirty two bytes with the same two members in the same places, comes back in memory.

Trait Implementations§

Source§

impl<'a> Clone for Shape<'a>

Source§

fn clone(&self) -> Shape<'a>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Copy for Shape<'a>

Source§

impl<'a> Debug for Shape<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a> Eq for Shape<'a>

Source§

impl<'a> PartialEq for Shape<'a>

Source§

fn eq(&self, other: &Shape<'a>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<'a> StructuralPartialEq for Shape<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for Shape<'a>

§

impl<'a> RefUnwindSafe for Shape<'a>

§

impl<'a> Send for Shape<'a>

§

impl<'a> Sync for Shape<'a>

§

impl<'a> Unpin for Shape<'a>

§

impl<'a> UnsafeUnpin for Shape<'a>

§

impl<'a> UnwindSafe for Shape<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.