Struct stackdump_core::register_data::ArrayRegisterData
source · [−]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
sourceimpl<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>ⓘNotable traits for RegisterDataBytesIterator<'a, RB>impl<'a, RB: Integral> Iterator for RegisterDataBytesIterator<'a, RB> type Item = u8;
pub fn bytes(&self) -> RegisterDataBytesIterator<'_, RB>ⓘNotable traits for RegisterDataBytesIterator<'a, RB>impl<'a, RB: Integral> Iterator for RegisterDataBytesIterator<'a, RB> type Item = u8;
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
sourceimpl<const SIZE: usize, RB: Clone> Clone for ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB: Clone> Clone for ArrayRegisterData<SIZE, RB>
sourcefn clone(&self) -> ArrayRegisterData<SIZE, RB>
fn clone(&self) -> ArrayRegisterData<SIZE, RB>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source. Read more
sourceimpl<const SIZE: usize, RB: Debug> Debug for ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB: Debug> Debug for ArrayRegisterData<SIZE, RB>
sourceimpl<const SIZE: usize, RB: Default> Default for ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB: Default> Default for ArrayRegisterData<SIZE, RB>
sourcefn default() -> ArrayRegisterData<SIZE, RB>
fn default() -> ArrayRegisterData<SIZE, RB>
Returns the “default value” for a type. Read more
sourceimpl<'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>,
sourcefn 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
sourceimpl<const SIZE: usize, RB> FromIterator<u8> for ArrayRegisterData<SIZE, RB> where
RB: Integral,
RB::Bytes: for<'a> TryFrom<&'a [u8]>,
impl<const SIZE: usize, RB> FromIterator<u8> for ArrayRegisterData<SIZE, RB> where
RB: Integral,
RB::Bytes: for<'a> TryFrom<&'a [u8]>,
sourcefn from_iter<T: IntoIterator<Item = u8>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = u8>>(iter: T) -> Self
Creates a value from an iterator. Read more
sourceimpl<const SIZE: usize, RB: PartialEq> PartialEq<ArrayRegisterData<SIZE, RB>> for ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB: PartialEq> PartialEq<ArrayRegisterData<SIZE, RB>> for ArrayRegisterData<SIZE, RB>
sourcefn eq(&self, other: &ArrayRegisterData<SIZE, RB>) -> bool
fn eq(&self, other: &ArrayRegisterData<SIZE, RB>) -> bool
This method tests for self and other values to be equal, and is used
by ==. Read more
sourcefn ne(&self, other: &ArrayRegisterData<SIZE, RB>) -> bool
fn ne(&self, other: &ArrayRegisterData<SIZE, RB>) -> bool
This method tests for !=.
sourceimpl<const SIZE: usize, RB: Integral> RegisterData<RB> for ArrayRegisterData<SIZE, RB>
impl<const SIZE: usize, RB: Integral> RegisterData<RB> for ArrayRegisterData<SIZE, RB>
sourcefn 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. Read more
sourceimpl<const SIZE: usize, RB> Serialize for ArrayRegisterData<SIZE, RB> where
RB: Serialize,
impl<const SIZE: usize, RB> Serialize for ArrayRegisterData<SIZE, RB> where
RB: Serialize,
impl<const SIZE: usize, RB> StructuralPartialEq for ArrayRegisterData<SIZE, RB>
Auto Trait Implementations
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
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more