Skip to main content

Encoding

Enum Encoding 

Source
pub enum Encoding {
    PlainCdr1,
    PlCdr1,
    PlainCdr2,
    DelimitedCdr,
    PlCdr2,
}
Expand description

Which encoding a plan is computed for.

XCDR1 and XCDR2 differ in their framing: XCDR1 has no delimiter header, and @mutable uses PID headers there and EMHEADERs here. Primitive alignment is the same in both. OMG XTypes 1.3 §7.4.

Variants§

§

PlainCdr1

XCDR1 without a parameter list. XTypes 1.3 §7.4.1.

§

PlCdr1

XCDR1 with a parameter list, for @mutable. XTypes 1.3 §7.4.1.2.

§

PlainCdr2

XCDR2 without a header. XTypes 1.3 §7.4.2.

§

DelimitedCdr

XCDR2 with a delimiter header, for @appendable.

§

PlCdr2

XCDR2 with a parameter list, for @mutable.

Implementations§

Source§

impl Encoding

Source

pub const ALL: [Self; 5]

Every encoding the layout planner covers.

Source

pub const fn is_v1(self) -> bool

Whether this is an XCDR version 1 encoding.

Source

pub const fn is_v2(self) -> bool

Whether this is an XCDR version 2 encoding.

Source

pub const fn max_alignment(self) -> u8

The largest alignment any primitive takes.

XTypes 1.3 §7.4.1, the XCDR stream operations table, defines it outright:

MAXALIGN( VERSION2) = 4 MAXALIGN( VERSION1) = 8 MAXALIGN( VERSION_NONE) = 8

and ALIGN(N) aligns to MIN(N, XCDR.maxalign). §7.6.8 repeats it for the key holder: “the maximum alignment in PLAIN_CDR2 (i.e., 4)”.

§Why this reads as a correction

It was briefly eight for both versions, on the authority of a wire vector V-3 in crates/cdr/tests/xcdr2_wire_vectors.rs at e1f3af895. That vector is not an OMG artefact — its header cites §7.4.2 but its byte table was computed by hand, and it pads the trailing double to align(8) for a total of 48 bytes. Three independent sources say 44:

  • the spec text above,
  • Cyclone DDS, src/core/cdr/src/dds_cdrstream.c:239 — xcdr_version == DDSI_RTPS_CDR_ENC_VERSION_2 ? MK_ALIGN(4) : MK_ALIGN(8), and :2435 .alignmask = (… ? 3 : 7),
  • Fast CDR, src/cpp/Cdr.cpp:238 — align64_ = 4 on reading an XCDRv2 encapsulation, 8 otherwise.

Measured, not read: @final struct Point { long x; double y; } with x=1, y=2.0 comes off Cyclone’s and RTI Connext 7.7’s own serialisers as twelve payload bytes, 010000000000000000000040, with the double at offset 4. tests/fixtures/vendor_bytes.md records the runs.

Trait Implementations§

Source§

impl Clone for Encoding

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 Encoding

Source§

impl Debug for Encoding

Source§

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

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

impl Eq for Encoding

Source§

impl Hash for Encoding

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 Encoding

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 Encoding

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 Encoding

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 Encoding

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.