Name Description Size
lib.rs 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 `\n` (see `lf()`) or `\r\n` (`crlf()`), but any byte sequence can be used. 1. Pick a line ending. For single byte separators, see `ByteLineEnding`, or for two bytes, `TwoByteLineEnding`. For arbitrary byte slices, use `SliceLineEnding`. 2. Call `line_wrap`. 3. Your data has been rearranged in place with the specified line ending inserted. # Examples ``` 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); ``` # Performance 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, `SliceLineEncoding` is about 75% the speed of the fixed-length impls. Naturally, try `cargo +nightly bench` on your hardware to get more representative data. 11041
tests.rs 7655