#timely #dataflow #bytes

timely_bytes

Disjoint mutable byte slices from a common allocation

5 releases (breaking)

0.12.0 Mar 10, 2021
0.11.0 Nov 18, 2019
0.10.0 Jul 9, 2019
0.9.0 Mar 31, 2019
0.7.0 Sep 17, 2018

#743 in Rust patterns

Download history 536/week @ 2022-11-28 643/week @ 2022-12-05 643/week @ 2022-12-12 733/week @ 2022-12-19 418/week @ 2022-12-26 535/week @ 2023-01-02 488/week @ 2023-01-09 359/week @ 2023-01-16 556/week @ 2023-01-23 918/week @ 2023-01-30 619/week @ 2023-02-06 846/week @ 2023-02-13 952/week @ 2023-02-20 886/week @ 2023-02-27 1650/week @ 2023-03-06 1389/week @ 2023-03-13

5,002 downloads per month
Used in 14 crates (2 directly)

MIT license

8KB
70 lines

A simplified implementation of the bytes crate, with different features, less safety.

Examples

use timely_bytes::arc::Bytes;

let bytes = vec![0u8; 1024];
let mut shared1 = Bytes::from(bytes);
let mut shared2 = shared1.extract_to(100);
let mut shared3 = shared1.extract_to(100);
let mut shared4 = shared2.extract_to(60);

assert_eq!(shared1.len(), 824);
assert_eq!(shared2.len(), 40);
assert_eq!(shared3.len(), 100);
assert_eq!(shared4.len(), 60);

for byte in shared1.iter_mut() { *byte = 1u8; }
for byte in shared2.iter_mut() { *byte = 2u8; }
for byte in shared3.iter_mut() { *byte = 3u8; }
for byte in shared4.iter_mut() { *byte = 4u8; }

// memory in slabs [4, 2, 3, 1]: merge back in arbitrary order.
shared2.try_merge(shared3).ok().expect("Failed to merge 2 and 3");
shared2.try_merge(shared1).ok().expect("Failed to merge 23 and 1");
shared4.try_merge(shared2).ok().expect("Failed to merge 4 and 231");

assert_eq!(shared4.len(), 1024);

No runtime deps