pub struct MemoryDevice<const BLOCK_SIZE: usize>(/* private fields */);
Expand description
In-memory device implementation with configurable block size.
This device stores all data in memory using a Vec<u8>
and provides the same
interface as physical storage devices. It’s thread-safe and supports all standard
device operations. The block size is configurable at compile time through the
const generic parameter.
§Type Parameters
Block_size
- The block size in bytes (must be a power of 2, typically 512)
§Examples
// Create a 1MB memory device with 512-byte blocks
let device = Memory_device_type::<512>::new(1024 * 1024);
let device = create_device!(device);
// Write some data
let data = b"Hello, Memory Device!";
device.Write(data).unwrap();
// Reset position and read back
device.Set_position(&Position_type::Start(0)).unwrap();
let mut buffer = alloc::vec![0u8; data.len()];
device.Read(&mut buffer).unwrap();
assert_eq!(&buffer, data);
§Thread Safety
The device uses an RwLock
to ensure thread-safe access to the underlying data.
Multiple readers can access the device simultaneously, but writes are exclusive.
Implementations§
Source§impl<const BLOCK_SIZE: usize> MemoryDevice<BLOCK_SIZE>
impl<const BLOCK_SIZE: usize> MemoryDevice<BLOCK_SIZE>
Sourcepub fn new(size: usize) -> Self
pub fn new(size: usize) -> Self
Create a new memory device with the specified size.
The device will be initialized with zeros and have the specified total size. The size must be a multiple of the block size.
§Arguments
Size
- Total size of the device in bytes
§Panics
Panics if Size
is not a multiple of Block_size
.
§Examples
// Create a 4KB device with 512-byte blocks
let device = Memory_device_type::<512>::new(4096);
Sourcepub fn from_vec(data: Vec<u8>) -> Self
pub fn from_vec(data: Vec<u8>) -> Self
Create a memory device from existing data.
This allows you to create a device with pre-populated data, useful for testing with known data patterns or loading device images.
§Arguments
Data
- Vector containing the initial device data
§Panics
Panics if the data length is not a multiple of Block_size
.
§Examples
// Create device with specific data
let data = vec![0x42; 1024]; // 1KB of 0x42 bytes
let device = Memory_device_type::<512>::From_vec(data);
Sourcepub fn get_block_count(&self) -> usize
pub fn get_block_count(&self) -> usize
Trait Implementations§
Source§impl<const BLOCK_SIZE: usize> DeviceTrait for MemoryDevice<BLOCK_SIZE>
impl<const BLOCK_SIZE: usize> DeviceTrait for MemoryDevice<BLOCK_SIZE>
Source§fn read(&self, buffer: &mut [u8]) -> Result<Size>
fn read(&self, buffer: &mut [u8]) -> Result<Size>
Read data from the memory device.
Reads data from the current position into the provided buffer. The position is automatically advanced by the number of bytes read.