Uses old Rust 2015
|0.1.1||Oct 27, 2018|
|0.1.0||Oct 27, 2018|
#1228 in Encoding
233,755 downloads per month
Used in 386 crates (2 directly)
See the docs for usage info.
This line-wrapping logic originally was part of rust-base64.
Efficiently insert line endings.
If you have a buffer full of data and want to insert any sort of regularly-spaced separator,
this will do it with a minimum of data copying. Commonly, this is to insert
any byte sequence can be used.
- Pick a line ending. For single byte separators, see
ByteLineEnding, or for two bytes,
TwoByteLineEnding. For arbitrary byte slices, use
- Your data has been rearranged in place with the specified line ending inserted.
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);
On an i7 6850k:
- 10 byte input, 1 byte line length takes ~60ns (~160MiB/s)
- 100 byte input, 10 byte lines takes ~60ns (~1.6GiB/s)
- Startup costs dominate at these small lengths
- 1,000 byte input, 100 byte lines takes ~65ns (~15GiB/s)
- 10,000 byte input, 100 byte lines takes ~550ns (~17GiB/s)
- In general,
SliceLineEncodingis about 75% the speed of the fixed-length impls.
cargo +nightly bench on your hardware to get more representative data.