pub struct ArrayRegisterData<const SIZE: usize, RB> { /* private fields */ }Expand description
A collection of registers, backed by a stack allocated array.
SIZE is the maximum amount of registers this collection can hold.
Implementations§
Source§impl<const SIZE: usize, RB: Integral> ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB: Integral> ArrayRegisterData<SIZE, RB>
Sourcepub fn new(starting_register: Register, registers: ArrayVec<RB, SIZE>) -> Self
pub fn new(starting_register: Register, registers: ArrayVec<RB, SIZE>) -> Self
Create a new register collection backed by an array
- The registers must be sequential according to the dwarf register numbers.
- All registers that are in the collection must have their true value.
Sourcepub fn bytes(&self) -> RegisterDataBytesIterator<'_, RB> ⓘ
pub fn bytes(&self) -> RegisterDataBytesIterator<'_, RB> ⓘ
Get a byte iterator for this collection.
This iterator can be used to store the collection as bytes or to stream over a network. The iterated bytes include the length so that if you use the FromIterator implementation, it consumes only the bytes that are part of the collection. This means you can chain multiple of these iterators after each other.
use arrayvec::ArrayVec;
use stackdump_core::register_data::{ArrayRegisterData, RegisterData};
let regs1 = ArrayRegisterData::<4, u32>::new(stackdump_core::gimli::Arm::R0, ArrayVec::from([1, 2, 3, 4]));
let regs2 = ArrayRegisterData::<4, u32>::new(stackdump_core::gimli::Arm::R0, ArrayVec::from([5, 6, 7, 8]));
let mut intermediate_buffer = Vec::new();
intermediate_buffer.extend(regs1.bytes());
intermediate_buffer.extend(regs2.bytes());
let mut intermediate_iter = intermediate_buffer.iter().copied();
assert_eq!(regs1, ArrayRegisterData::<4, u32>::from_iter(&mut intermediate_iter));
assert_eq!(regs2, ArrayRegisterData::<4, u32>::from_iter(&mut intermediate_iter));Trait Implementations§
Source§impl<const SIZE: usize, RB: Clone> Clone for ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB: Clone> Clone for ArrayRegisterData<SIZE, RB>
Source§fn clone(&self) -> ArrayRegisterData<SIZE, RB>
fn clone(&self) -> ArrayRegisterData<SIZE, RB>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<const SIZE: usize, RB: Default> Default for ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB: Default> Default for ArrayRegisterData<SIZE, RB>
Source§fn default() -> ArrayRegisterData<SIZE, RB>
fn default() -> ArrayRegisterData<SIZE, RB>
Returns the “default value” for a type. Read more
Source§impl<'de, const SIZE: usize, RB> Deserialize<'de> for ArrayRegisterData<SIZE, RB>where
RB: Deserialize<'de>,
impl<'de, const SIZE: usize, RB> Deserialize<'de> for ArrayRegisterData<SIZE, RB>where
RB: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<const SIZE: usize, RB> FromIterator<u8> for ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB> FromIterator<u8> for ArrayRegisterData<SIZE, RB>
Source§impl<const SIZE: usize, RB: Integral> RegisterData<RB> for ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB: Integral> RegisterData<RB> for ArrayRegisterData<SIZE, RB>
Source§fn register(&self, register: Register) -> Option<RB>
fn register(&self, register: Register) -> Option<RB>
Try to get the value of the given register.
Returns None if the register is not present in this collection.
impl<const SIZE: usize, RB: Eq> Eq for ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB> StructuralPartialEq for ArrayRegisterData<SIZE, RB>
Auto Trait Implementations§
impl<const SIZE: usize, RB> Freeze for ArrayRegisterData<SIZE, RB>where
RB: Freeze,
impl<const SIZE: usize, RB> RefUnwindSafe for ArrayRegisterData<SIZE, RB>where
RB: RefUnwindSafe,
impl<const SIZE: usize, RB> Send for ArrayRegisterData<SIZE, RB>where
RB: Send,
impl<const SIZE: usize, RB> Sync for ArrayRegisterData<SIZE, RB>where
RB: Sync,
impl<const SIZE: usize, RB> Unpin for ArrayRegisterData<SIZE, RB>where
RB: Unpin,
impl<const SIZE: usize, RB> UnwindSafe for ArrayRegisterData<SIZE, RB>where
RB: 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
Mutably borrows from an owned value. Read more