#随机访问 #内存访问 #读写 #偏移 #长度 #连续 #接口

random-access-memory

使用随机偏移量和长度连续读取和写入内存

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 算法

Download history 19/week @ 2024-03-13 24/week @ 2024-03-20 34/week @ 2024-03-27 182/week @ 2024-04-03 44/week @ 2024-04-10 25/week @ 2024-04-17 46/week @ 2024-04-24 779/week @ 2024-05-01 949/week @ 2024-05-08 626/week @ 2024-05-15 653/week @ 2024-05-22 229/week @ 2024-05-29 104/week @ 2024-06-05 189/week @ 2024-06-12 460/week @ 2024-06-19 213/week @ 2024-06-26

每月 1,022 次下载
用于 6 包(5 个直接使用)

MIT/Apache

18KB
202

random-access-memory

crates.io version build status downloads docs.rs docs

使用在random-access-storage中定义的抽象接口,以随机偏移量和长度连续读取和写入内存。

安装

$ cargo add random-access-memory

许可证

MITApache-2.0


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