rrs_lib::memories

Struct MemorySpace

Source
pub struct MemorySpace { /* private fields */ }
Expand description

A Memory that represents an address space forwarding reads and writes to other inner memories.

When reads and writes are forwarded to an inner memory the base address is adjusted appropriate (e.g. a Memory added with MemorySpace::add_memory at address 0x100000 will get a read at address 0x0 if the MemorySpace gets a read at 0x100000

The inner memory regions cannot overlap and base addresses must be 32-bit aligned.

Implementations§

Source§

impl MemorySpace

Source

pub fn new() -> Self

Source

pub fn add_memory( &mut self, base: u32, size: u32, memory: Box<dyn Memory>, ) -> Result<usize, MemorySpaceError>

Add an inner memory.

When Ok is returned a memory index is provided which can be used with MemorySpace::get_memory_ref and MemorySpace::get_memory_mut to get a reference to that memory.

Source

pub fn get_memory_ref<T: Memory>(&self, index: usize) -> Option<&T>

Get a reference to an inner memory

This performs downcasting to the provided T. None is returned where the downcast fails.

Source

pub fn get_memory_mut<T: Memory>(&mut self, index: usize) -> Option<&mut T>

Get a mutable reference to an inner memory

This performs downcasting to the provided T. None is returned where the downcast fails.

Trait Implementations§

Source§

impl Default for MemorySpace

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Memory for MemorySpace

Source§

fn read_mem(&mut self, addr: u32, size: MemAccessSize) -> Option<u32>

Read size bytes from addr. Read more
Source§

fn write_mem(&mut self, addr: u32, size: MemAccessSize, store_data: u32) -> bool

Write size bytes of store_data to addr Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.