5个版本
0.2.0 | 2024年5月2日 |
---|---|
0.1.3 | 2024年5月1日 |
0.1.2 | 2024年5月1日 |
0.1.1 | 2024年5月1日 |
0.1.0 | 2024年5月1日 |
#1557 in 编码
每月101次下载
120KB
2.5K SLoC
Mmap Bytey
Mmap-rs
是Bytey的缓冲区分配版本。这是为了创建可重用的缓冲区以降低分配。唯一的缺点是所有缓冲区都限制为每个缓冲区1536字节的静态大小。这些缓冲区不会调整大小,后端分配器将存储旧的缓冲区分配以供直接重用。我们选择1536字节,因为它接近mtu数据的最小大小。
📑 文档
文档链接可在此处找到。
🚨 帮助
如果您需要关于此库的帮助或有建议,请访问我们的Discord群组
📦 安装
要开始使用此crate,您只需将其添加到您的Cargo.toml
[dependencies]
mmap_bytey = "0.1.0"
🔎 使用
use mmap_bytey::MByteBuffer;
fn main() {
let mut buffer = MByteBuffer::new().unwrap();
let value1: u16 = 1234;
let value2: i32 = -2000;
let value3: usize = usize::MAX;
// Initially the buffer will have a size of 8 bytes, unless you create the buffer using the with_capacity method
// The buffer will resize itself to fit all data inside of it
buffer.write(&value1);
buffer.write(&value2);
buffer.write(&value3);
// When you write a value to the buffer, the cursor will move along
// So if we want to read the values we just put in, we have to move it back to 0
buffer.move_cursor(0);
// Read and print the values stored inside the buffer
println!("{}", buffer.read::<u16>().unwrap()); // prints "1234"
println!("{}", buffer.read::<i32>().unwrap()); // prints "-2000"
println!("{}", buffer.read::<usize>().unwrap()); // prints what the MAX is for usize on the system
}
写入ByteBuffer的任何值都必须实现MByteBufferWrite
特质。默认情况下,此特质已在所有数值原始类型(u8, u16, i8, i16等)上实现。
从ByteBuffer读取类型需要该类型实现MByteBufferRead
特质,这已在默认情况下实现在所有数值原始类型上。
如果您想看到更多这些特质的默认实现,请通过GitHub上的问题告知我!
💿 宏
Bytey包含两个与特质同名(MByteBufferWrite
和MByteBufferRead
)的derive宏,您可以使用这些宏来对您自己的结构和枚举进行操作。
use mmap_bytey::{MByteBuffer, MByteBufferRead, MByteBufferWrite};
fn main() {
#[derive(MByteBufferRead, MByteBufferWrite, Debug, PartialEq)]
struct Test {
a: u8,
b: u16,
c: isize,
}
let mut buffer = MByteBuffer::new().unwrap();
let val = Test { a: 1, b: 2, c: 3 };
buffer.write(&val);
buffer.move_cursor(0);
assert_eq!(val, buffer.read::<Test>().unwrap());
}
请注意,结构或枚举内的所有字段都必须实现该特质,否则您将得到错误。
😎 贡献
请随意通过发送pull请求来贡献。对于重大更改或如果您有可以帮助改进Mmap Bytey或Bytey的想法,请打开一个问题!
请确保您如果进行贡献,测试也相应更新。
依赖项
~4–30MB
~452K SLoC