Skip to main content

ElementPadding

Enum ElementPadding 

Source
pub enum ElementPadding {
    Aligned,
    Packed,
}
Expand description

Whether the elements of a collection carry alignment padding.

XTypes 1.3 §7.4.1 defines the padding: ALIGN(N) is MIN(N, XCDR.version.maxalign), and a structure’s members each begin on a multiple of their own alignment counted from the encapsulation. An element of an array or a sequence is a value like any other, so §7.4.1 pads in front of one exactly as it does in front of a member — which is what makes a Cell { long a; short b; } array take a stride of eight rather than of six.

§The measured departure

tests/interop-results/array-1d-struct-final/hdds/plain-cdr1.le.bin is 01000000 0200 03000000 0400 77 for @final struct Cell { long a; short b; } in Cell items[2]; with octet tail: the second element’s long a starts at offset six, where §7.4.1’s ALIGN(4) puts it at eight. Every recorded row of sequence-struct-final says the same — many’s second Cell puts a at offset 26 — and so does every array and sequence row of that column.

Struct members are still padded, which is why this is about elements and not about alignment in general. tests/interop-results/struct-final/hdds/plain-cdr1.le.bin is 79 29 ed ff 00000000 18 2d 44 54 fb 21 09 40 fe ff: four octets of fill ahead of the double, because XCDR1’s maxalign is eight. annotation-must-understand-unannotated pads the same way after an @optional flag. So the axis has two values and not one, and Self::Packed means “no padding between the elements”.

§What Packed means for the octets inside an element

A fresh alignment origin at the element’s own first octet. Every recorded row that reaches the question agrees with the plainer reading — “no alignment at all inside an element” — because no recorded row has an element whose own members need padding between them: the corpus’s collection elements are long/short pairs, strings and wstrings, and the first of those is already packed. The origin form is the one that keeps a member’s offset a function of its own type, and it is what crate::plan() and the writer both implement.

Variants§

§

Aligned

XTypes 1.3 §7.4.1: an element begins at the next multiple of its alignment, counted from the encapsulation. The default.

§

Packed

Every element begins at the octet after the previous element ends, and alignment inside an element is counted from there.

Implementations§

Source§

impl ElementPadding

Source

pub const ALL: [Self; 2]

Both.

Source

pub const fn is_default(self) -> bool

Whether this is the default.

Source

pub const fn as_str(self) -> &'static str

Short name, for configuration and diagnostics.

Source

pub fn parse(value: &str) -> Option<Self>

Parse a configuration value.

An unknown value returns None rather than falling back to the default: a typo in a wire-affecting setting must be loud.

Source

pub const fn pads_after(self, _size: u32, _align: u8) -> bool

Whether a value of size octets is followed by padding up to the next align, under this policy.

One expression for both the planner’s array stride and the writer’s origin, so the two cannot answer differently about the same element.

Trait Implementations§

Source§

impl Clone for ElementPadding

Source§

fn clone(&self) -> Self

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 Copy for ElementPadding

Source§

impl Debug for ElementPadding

Source§

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

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

impl Default for ElementPadding

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Eq for ElementPadding

Source§

impl Hash for ElementPadding

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for ElementPadding

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl PartialEq for ElementPadding

Source§

fn eq(&self, other: &Self) -> bool

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

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

Inequality operator !=. Read more
Source§

impl PartialOrd for ElementPadding

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StructuralPartialEq for ElementPadding

Auto Trait Implementations§

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.