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);