cyclone_v/memory/
buffer.rs

1#![cfg(feature = "std")]
2
3use crate::memory::MemoryMapper;
4use std::pin::Pin;
5
6/// Maps a region of memory over a vector.
7/// Useful for testing.
8pub struct BufferMemoryMapper {
9    region: Pin<Box<[u8]>>,
10}
11
12impl BufferMemoryMapper {
13    pub fn new(size: usize) -> Self {
14        Self {
15            region: vec![0; size].into_boxed_slice().into(),
16        }
17    }
18
19    pub fn from_vec(vec: Vec<u8>) -> Self {
20        Self {
21            region: vec.into_boxed_slice().into(),
22        }
23    }
24}
25
26impl MemoryMapper for BufferMemoryMapper {
27    fn create(_address: usize, _size: usize) -> Result<Self, &'static str>
28    where
29        Self: Sized,
30    {
31        unimplemented!()
32    }
33
34    fn len(&self) -> usize {
35        self.region.len()
36    }
37
38    fn as_ptr<T>(&self) -> *const T {
39        self.region.as_ptr() as *const T
40    }
41
42    fn as_mut_ptr<T>(&mut self) -> *mut T {
43        self.region.as_mut_ptr() as *mut T
44    }
45}