Struct Offset

Source
pub struct Offset<OFF, const N: u32>(/* private fields */);
Expand description

A value representing an offset or an immediate value.

The OFF type represents the backing type of this offset. The signedness of this offset type is dependent on the signedness of the OFF type:

  • Offset<i16, _>: signed offset (also aliased as IOffset)
  • Offset<u16, _>: unsigned offset

N indicates the maximum bit size of this offset/immediate value.

§Examples

  • Offset<i16, 5> is used to represent ADD/AND’s imm5 operand. See IOffset for more examples of its use.
  • Offset<u16, 8> is used to represent the trapvect8 operand of the TRAP instruction. See TrapVect8 for more examples of its use.

Implementations§

Source§

impl<OFF: OffsetBacking, const N: u32> Offset<OFF, N>

Source

pub fn new(n: OFF) -> Result<Self, OffsetNewErr>

Creates a new offset value. This must fit within N bits of the representation, otherwise an error is raised.

§Examples
// Signed:
let neg5 = Offset::<i16, 5>::new(-5);
let pos15 = Offset::<i16, 5>::new(15);
let pos16 = Offset::<i16, 5>::new(16);
assert!(neg5.is_ok());
assert!(pos15.is_ok());
assert!(pos16.is_err());
 
// Unsigned:
let pos15 = Offset::<u16, 5>::new(15);
let pos16 = Offset::<u16, 5>::new(16);
let pos32 = Offset::<u16, 5>::new(32);
assert!(pos15.is_ok());
assert!(pos16.is_ok());
assert!(pos32.is_err());
§Panics

This will panic if N is larger than the offset backing (e.g., for backing u16, larger than 16).

let oh_no = Offset::<i16, 17>::new(18);
Source

pub fn new_trunc(n: OFF) -> Self

Creates a new offset by extending the first N bits of the integer, and discarding the rest.

The extension is considered sign-extended if the offset’s backing is signed, and zero-extended if the offset’s backing is unsigned.

§Examples
// Signed:
let neg5 = Offset::<i16, 5>::new_trunc(-5);  // 0b11111111111_11011
let pos15 = Offset::<i16, 5>::new_trunc(15); // 0b00000000000_01111
let pos16 = Offset::<i16, 5>::new_trunc(16); // 0b00000000000_10000
assert_eq!(neg5.get(),   -5); // 0b11011
assert_eq!(pos15.get(),  15); // 0b01111
assert_eq!(pos16.get(), -16); // 0b10000
 
// Unsigned:
let pos15 = Offset::<u16, 5>::new_trunc(15); // 0b00000000000_01111
let pos16 = Offset::<u16, 5>::new_trunc(16); // 0b00000000000_10000
let pos32 = Offset::<u16, 5>::new_trunc(32); // 0b00000000001_00000
assert_eq!(pos15.get(), 15); // 01111
assert_eq!(pos16.get(), 16); // 10000
assert_eq!(pos32.get(),  0); // 00000
§Panics

This will panic if N is larger than the offset backing (e.g., for backing u16, larger than 16).

let oh_no = Offset::<i16, 17>::new_trunc(18);
Source

pub fn get(&self) -> OFF

Gets the value of the offset.

Trait Implementations§

Source§

impl<OFF: Binary, const N: u32> Binary for Offset<OFF, N>

Source§

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

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

impl<OFF: Clone, const N: u32> Clone for Offset<OFF, N>

Source§

fn clone(&self) -> Offset<OFF, N>

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<OFF: Debug, const N: u32> Debug for Offset<OFF, N>

Source§

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

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

impl<OFF: Display, const N: u32> Display for Offset<OFF, N>

Source§

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

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

impl<OFF: Hash, const N: u32> Hash for Offset<OFF, N>

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<OFF: LowerHex, const N: u32> LowerHex for Offset<OFF, N>

Source§

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

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

impl<OFF: PartialEq, const N: u32> PartialEq for Offset<OFF, N>

Source§

fn eq(&self, other: &Offset<OFF, N>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<const N: u32> TokenParse for Offset<i16, N>

Source§

type Intermediate = Either<i16, u16>

An intermediate to hold the match before it is converted to the actual component.
Source§

fn match_( m_token: Option<&Token>, span: Span, ) -> Result<Self::Intermediate, ParseErr>

Tries to match the next token to the given component, if possible. Read more
Source§

fn convert(imed: Self::Intermediate, span: Span) -> Result<Self, ParseErr>

Parses the intermediate into the given component, raising an error if conversion fails.
Source§

impl<const N: u32> TokenParse for Offset<u16, N>

Source§

type Intermediate = Either<u16, i16>

An intermediate to hold the match before it is converted to the actual component.
Source§

fn match_( m_token: Option<&Token>, span: Span, ) -> Result<Self::Intermediate, ParseErr>

Tries to match the next token to the given component, if possible. Read more
Source§

fn convert(imed: Self::Intermediate, span: Span) -> Result<Self, ParseErr>

Parses the intermediate into the given component, raising an error if conversion fails.
Source§

impl<OFF: UpperHex, const N: u32> UpperHex for Offset<OFF, N>

Source§

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

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

impl<OFF: Copy, const N: u32> Copy for Offset<OFF, N>

Source§

impl<OFF: Eq, const N: u32> Eq for Offset<OFF, N>

Source§

impl<OFF, const N: u32> StructuralPartialEq for Offset<OFF, N>

Auto Trait Implementations§

§

impl<OFF, const N: u32> Freeze for Offset<OFF, N>
where OFF: Freeze,

§

impl<OFF, const N: u32> RefUnwindSafe for Offset<OFF, N>
where OFF: RefUnwindSafe,

§

impl<OFF, const N: u32> Send for Offset<OFF, N>
where OFF: Send,

§

impl<OFF, const N: u32> Sync for Offset<OFF, N>
where OFF: Sync,

§

impl<OFF, const N: u32> Unpin for Offset<OFF, N>
where OFF: Unpin,

§

impl<OFF, const N: u32> UnwindSafe for Offset<OFF, N>
where OFF: UnwindSafe,

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<S> Parse for S
where S: TokenParse,

Source§

fn parse(parser: &mut Parser) -> Result<S, ParseErr>

Attempt to convert the next sequence of tokens in the parser’s state into a component. Read more
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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V