14个版本 (5个稳定版)
3.0.0 | 2023年4月12日 |
---|---|
2.0.0 | 2020年3月3日 |
1.2.0 | 2020年3月3日 |
1.0.0 | 2019年4月24日 |
0.1.0 | 2018年3月21日 |
#837 in 算法
每月 1,022 次下载
用于 6 个 包(5 个直接使用)
18KB
202 行
random-access-memory
使用在random-access-storage中定义的抽象接口,以随机偏移量和长度连续读取和写入内存。
安装
$ cargo add random-access-memory
许可证
lib.rs
:
使用随机偏移量和长度连续读取和写入内存
[RandomAccessMemory] 是为内存存储而实现的 random-access-storage 的完整实现。
有关可与之交换的磁盘存储,请参阅 random-access-disk。
示例
读取、写入、删除和截断
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]);
为了从可交换接口中获得好处,您通常需要使用存储操作的泛型函数
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()
}
依赖项
~0.4–0.8MB
~20K SLoC