14 releases (5 stable)
3.0.0 | Apr 12, 2023 |
---|---|
2.0.0 | Mar 3, 2020 |
1.2.0 | Mar 3, 2020 |
1.0.0 | Apr 24, 2019 |
0.1.0 | Mar 21, 2018 |
#924 in Algorithms
188 downloads per month
Used in 6 crates
(4 directly)
18KB
202 lines
random-access-memory
Continuously read and write to memory using random offsets and lengths using abstract interface defined in random-access-storage.
Installation
$ cargo add random-access-memory
License
MIT OR Apache-2.0
lib.rs
:
Continuously read and write to memory using random offsets and lengths
[RandomAccessMemory] is a complete implementation of random-access-storage for in-memory storage.
See also random-access-disk for on-disk storage that can be swapped with this.
Examples
Reading, writing, deleting and truncating:
use random_access_storage::RandomAccess;
use random_access_memory::RandomAccessMemory;
let mut storage = RandomAccessMemory::default();
storage.write(0, b"hello").await.unwrap();
storage.write(5, b" world").await.unwrap();
assert_eq!(storage.read(0, 11).await.unwrap(), b"hello world");
assert_eq!(storage.len().await.unwrap(), 11);
storage.del(5, 2).await.unwrap();
assert_eq!(storage.read(5, 2).await.unwrap(), [0, 0]);
assert_eq!(storage.len().await.unwrap(), 11);
storage.truncate(2).await.unwrap();
assert_eq!(storage.len().await.unwrap(), 2);
storage.truncate(5).await.unwrap();
assert_eq!(storage.len().await.unwrap(), 5);
assert_eq!(storage.read(0, 5).await.unwrap(), [b'h', b'e', 0, 0, 0]);
In order to get benefits from the swappable interface, you will in most cases want to use generic functions for storage manipulation:
use random_access_storage::RandomAccess;
use random_access_memory::RandomAccessMemory;
use std::fmt::Debug;
let mut storage = RandomAccessMemory::default();
write_hello_world(&mut storage).await;
assert_eq!(read_hello_world(&mut storage).await, b"hello world");
/// Write with swappable storage
async fn write_hello_world<T>(storage: &mut T)
where T: RandomAccess + Debug + Send,
{
storage.write(0, b"hello").await.unwrap();
storage.write(5, b" world").await.unwrap();
}
/// Read with swappable storage
async fn read_hello_world<T>(storage: &mut T) -> Vec<u8>
where T: RandomAccess + Debug + Send,
{
storage.read(0, 11).await.unwrap()
}
Dependencies
~295–760KB
~17K SLoC