3个不稳定版本
0.2.0 | 2024年2月23日 |
---|---|
0.1.1 | 2018年10月27日 |
0.1.0 | 2018年10月27日 |
#187 在 编码
379,747 每月下载量
用于 36 个crate(通过 creator-plist)
22KB
390 行
请参阅文档了解使用信息。
此行包装逻辑最初是rust-base64的一部分。
lib.rs
:
高效插入行结束符。
如果您有一个充满数据的缓冲区并想插入任何类型的规则间隔分隔符,这将使用最少的内存拷贝完成。通常,这是要插入\n
(见lf()
)或\r\n
(crlf()
),但可以使用任何字节序列。
- 选择一个行结束符。对于单字节分隔符,请参阅
ByteLineEnding
,对于双字节,请参阅TwoByteLineEnding
。对于任意字节切片,请使用SliceLineEnding
。 - 调用
line_wrap
。 - 您的数据已经就地重排,并插入了指定的行结束符。
示例
use line_wrap::*;
// suppose we have 80 bytes of data in a buffer and we want to wrap as per MIME.
// Buffer is large enough to hold line endings.
let mut data = vec![0; 82];
assert_eq!(2, line_wrap(&mut data, 80, 76, &crlf()));
// first line of zeroes
let mut expected_data = vec![0; 76];
// line ending
expected_data.extend_from_slice(b"\r\n");
// next line
expected_data.extend_from_slice(&[0, 0, 0, 0]);
assert_eq!(expected_data, data);
性能
在i7 6850k上
- 10字节输入,1字节行长度需要~60ns (~160MiB/s)
- 100字节输入,10字节行长度需要~60ns (~1.6GiB/s)
- 在这些小长度上,启动成本占主导地位
- 1,000字节输入,100字节行长度需要~65ns (~15GiB/s)
- 10,000字节输入,100字节行长度需要~550ns (~17GiB/s)
- 总的来说,
SliceLineEncoding
的速度大约是固定长度实现速度的75%。
当然,可以在您的硬件上尝试cargo +nightly bench
以获取更具有代表性的数据。