pub struct DelayedPhysicalMemory<T> { /* private fields */ }
Expand description
The delay middleware introduces delay and jitter into physical reads which allows users to simulate different connectors and setups.
Since this middleware implements PhysicalMemory
it can be used as a replacement
in all structs and functions that require the PhysicalMemory
trait.
Implementations§
Source§impl<T: PhysicalMemory> DelayedPhysicalMemory<T>
impl<T: PhysicalMemory> DelayedPhysicalMemory<T>
Sourcepub fn new(mem: T, delay: Duration) -> Self
pub fn new(mem: T, delay: Duration) -> Self
Constructs a new middleware with the given delay.
This function is used when manually constructing a middleware inside of the memflow crate itself.
For general usage it is advised to just use the builder to construct the delay.
Sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Consumes self and returns the containing memory object.
This function can be useful in case the ownership over the memory object has been given to the cache
when it was being constructed.
It will destroy the self
and return back the ownership of the underlying memory object.
§Examples
use memflow::architecture::x86::x64;
use memflow::mem::{PhysicalMemory, DelayedPhysicalMemory, MemoryView};
fn build<T: PhysicalMemory>(mem: T) -> T {
let mut middleware = DelayedPhysicalMemory::builder(mem)
.build()
.unwrap();
// use the middleware...
let value: u64 = middleware.phys_view().read(0.into()).unwrap();
assert_eq!(value, MAGIC_VALUE);
// retrieve ownership of mem and return it back
middleware.into_inner()
}
Source§impl<T: PhysicalMemory> DelayedPhysicalMemory<T>
impl<T: PhysicalMemory> DelayedPhysicalMemory<T>
Sourcepub fn builder(mem: T) -> DelayedPhysicalMemoryBuilder<T>
pub fn builder(mem: T) -> DelayedPhysicalMemoryBuilder<T>
Returns a new builder for the delay middleware with default settings.
Trait Implementations§
Source§impl<T> Clone for DelayedPhysicalMemory<T>where
T: Clone,
impl<T> Clone for DelayedPhysicalMemory<T>where
T: Clone,
Source§impl<'cglue_a, CGlueInst: Deref<Target = DelayedPhysicalMemory<T>>, CGlueCtx: ContextBounds, T: PhysicalMemory> ConnectorInstanceVtableFiller<'cglue_a, CGlueInst, CGlueCtx> for DelayedPhysicalMemory<T>
impl<'cglue_a, CGlueInst: Deref<Target = DelayedPhysicalMemory<T>>, CGlueCtx: ContextBounds, T: PhysicalMemory> ConnectorInstanceVtableFiller<'cglue_a, CGlueInst, CGlueCtx> for DelayedPhysicalMemory<T>
fn fill_table( table: ConnectorInstanceVtables<'cglue_a, CGlueInst, CGlueCtx>, ) -> ConnectorInstanceVtables<'cglue_a, CGlueInst, CGlueCtx>
Source§impl<T: PhysicalMemory> PhysicalMemory for DelayedPhysicalMemory<T>
impl<T: PhysicalMemory> PhysicalMemory for DelayedPhysicalMemory<T>
fn phys_read_raw_iter( &mut self, data: PhysicalReadMemOps<'_, '_, '_, '_>, ) -> Result<()>
fn phys_write_raw_iter( &mut self, data: PhysicalWriteMemOps<'_, '_, '_, '_>, ) -> Result<()>
Source§fn metadata(&self) -> PhysicalMemoryMetadata
fn metadata(&self) -> PhysicalMemoryMetadata
Source§fn set_mem_map(&mut self, mem_map: &[PhysicalMemoryMapping])
fn set_mem_map(&mut self, mem_map: &[PhysicalMemoryMapping])
fn phys_read_into<T: Pod + ?Sized>(
&mut self,
addr: PhysicalAddress,
out: &mut T,
) -> Result<()>where
Self: Sized,
fn phys_write<T: Pod + ?Sized>(
&mut self,
addr: PhysicalAddress,
data: &T,
) -> Result<()>where
Self: Sized,
fn into_phys_view(self) -> PhysicalMemoryView<Self>where
Self: Sized,
fn phys_view(&mut self) -> PhysicalMemoryView<Fwd<&mut Self>>where
Self: Sized,
fn into_mem_view(self) -> PhysicalMemoryView<Self>where
Self: Sized,
fn mem_view(&mut self) -> PhysicalMemoryView<Fwd<&mut Self>>where
Self: Sized,
Auto Trait Implementations§
impl<T> Freeze for DelayedPhysicalMemory<T>where
T: Freeze,
impl<T> RefUnwindSafe for DelayedPhysicalMemory<T>where
T: RefUnwindSafe,
impl<T> Send for DelayedPhysicalMemory<T>where
T: Send,
impl<T> Sync for DelayedPhysicalMemory<T>where
T: Sync,
impl<T> Unpin for DelayedPhysicalMemory<T>where
T: Unpin,
impl<T> UnwindSafe for DelayedPhysicalMemory<T>where
T: 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<'a, T> BorrowOwned<'a> for Twhere
T: 'a + Clone,
impl<'a, T> BorrowOwned<'a> for Twhere
T: 'a + Clone,
fn r_borrow( this: &'a <T as BorrowOwned<'a>>::ROwned, ) -> <T as BorrowOwned<'a>>::RBorrowed
fn r_to_owned( this: <T as BorrowOwned<'a>>::RBorrowed, ) -> <T as BorrowOwned<'a>>::ROwned
fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T
fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T
fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed
fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned
fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T
fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> GetWithMetadata for T
impl<T> GetWithMetadata for T
Source§type ForSelf = WithMetadata_<T, T>
type ForSelf = WithMetadata_<T, T>
WithMetadata_<Self, Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
Source§fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
offset
. Read moreSource§fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
offset
. Read moreSource§fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
offset
. Read moreSource§fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
offset
. Read moreSource§impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
Source§impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
Source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
Source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
piped
except that the function takes &Self
Useful for functions that take &Self
instead of Self
. Read moreSource§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
piped
, except that the function takes &mut Self
.
Useful for functions that take &mut Self
instead of Self
.Source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Source§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
AsRef
,
using the turbofish .as_ref_::<_>()
syntax. Read more