pub struct RegistersAndStackEncoder<'a, Abi, RegisterType, const NR_REGS: usize>where
Abi: SyscallAbi,
RegisterType: Copy + Default,{ /* private fields */ }
Expand description
A basic encoder that encodes values byte-by-byte into registers, or the stack if we spill over. Somewhat slow, but can encode all the basic types. Can be configured by the register type (u32, u64, etc) and the number of registers that can be used as syscall arg registers.
Trait Implementations§
source§impl<'a, Abi, RegisterType, const NR_REGS: usize> SyscallEncoder<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>> for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where
Abi: SyscallAbi,
RegisterType: Copy + Default + AllowedRegisterType,
impl<'a, Abi, RegisterType, const NR_REGS: usize> SyscallEncoder<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>> for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where Abi: SyscallAbi, RegisterType: Copy + Default + AllowedRegisterType,
source§fn new_decode(
abi: &'a Abi,
decode_data: RegisterAndStackData<RegisterType, NR_REGS>
) -> RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>
fn new_decode( abi: &'a Abi, decode_data: RegisterAndStackData<RegisterType, NR_REGS> ) -> RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>
Make a new encoder for decoding data.
source§fn new_encode(
abi: &'a Abi,
allocation: Allocation
) -> RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>
fn new_encode( abi: &'a Abi, allocation: Allocation ) -> RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>
Make a new encoder given this allocation.
source§fn encode<Source>(&mut self, item: &Source) -> Result<(), EncodeError>where
Source: SyscallEncodable<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>, RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>>,
fn encode<Source>(&mut self, item: &Source) -> Result<(), EncodeError>where Source: SyscallEncodable<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>, RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>>,
Encode an item.
source§fn finish(self) -> RegisterAndStackData<RegisterType, NR_REGS>
fn finish(self) -> RegisterAndStackData<RegisterType, NR_REGS>
Finish encoding and return the EncodedType.
source§fn decode<Target>(&mut self) -> Result<Target, DecodeError>where
Target: SyscallEncodable<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>, RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>>,
RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>: Sized,
fn decode<Target>(&mut self) -> Result<Target, DecodeError>where Target: SyscallEncodable<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>, RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>>, RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>: Sized,
Decode an item.
source§fn encode_u8(&mut self, item: u8) -> Result<(), EncodeError>where
RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>: Sized,
fn encode_u8(&mut self, item: u8) -> Result<(), EncodeError>where RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>: Sized,
Encode a u8.
source§fn decode_u8(&mut self) -> Result<u8, DecodeError>where
RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>: Sized,
fn decode_u8(&mut self) -> Result<u8, DecodeError>where RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>: Sized,
Decode a u8.
impl<'a, Abi, RegisterType, const NR_REGS: usize> EncodeAllPrimitives<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>, RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>> for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where Abi: SyscallAbi, RegisterType: Copy + Default + AllowedRegisterType,
Auto Trait Implementations§
impl<'a, Abi, RegisterType, const NR_REGS: usize> RefUnwindSafe for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where Abi: RefUnwindSafe, RegisterType: RefUnwindSafe,
impl<'a, Abi, RegisterType, const NR_REGS: usize> !Send for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>
impl<'a, Abi, RegisterType, const NR_REGS: usize> !Sync for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>
impl<'a, Abi, RegisterType, const NR_REGS: usize> Unpin for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where RegisterType: Unpin,
impl<'a, Abi, RegisterType, const NR_REGS: usize> UnwindSafe for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where Abi: RefUnwindSafe, RegisterType: 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