Struct lc3_ensemble::ast::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 asIOffset)Offset<u16, _>: unsigned offset
N indicates the maximum bit size of this offset/immediate value.
§Examples
Implementations§
source§impl<OFF: OffsetBacking, const N: u32> Offset<OFF, N>
impl<OFF: OffsetBacking, const N: u32> Offset<OFF, N>
sourcepub fn new(n: OFF) -> Result<Self, OffsetNewErr>
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);sourcepub fn new_trunc(n: OFF) -> Self
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);Trait Implementations§
source§impl<OFF: PartialEq, const N: u32> PartialEq for Offset<OFF, N>
impl<OFF: PartialEq, const N: u32> PartialEq for Offset<OFF, N>
source§impl<const N: u32> TokenParse for Offset<i16, N>
impl<const N: u32> TokenParse for Offset<i16, N>
source§impl<const N: u32> TokenParse for Offset<u16, N>
impl<const N: u32> TokenParse for Offset<u16, N>
impl<OFF: Copy, const N: u32> Copy for Offset<OFF, N>
impl<OFF: Eq, const N: u32> Eq for Offset<OFF, N>
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)