Expand description
Lazy concatenation of Strings, Vecs and any other concatenable data structures.
A LazyConcat owns a base structure and keeps track of fragments which can be
either borrowed or owned. The fragments are never actually concatenated until the
structure is fully normalized with normalize or
partially normalized with normalize_to_len.
When borrowing a slice, it is possible to normalize only the minimum number of
fragments required for the slice. Various iterators over String or Vec are
supported without the need to normalize first.
§Examples
let mut lz = LazyConcat::new(Vec::new())
// Concatenating owned values
.and_concat(vec![0, 1, 2, 3, 4])
// And borrowed values
.and_concat(&[5, 6, 7, 8][..])
.and_concat(&[9, 10][..]);
// This is possible without the above slice being concatenated
for i in lz.iter() {
println!("i = {}", i);
}
// Actually concatenate enough values so that up to 6 elements can be sliced
lz.normalize_to_len(6);
let slice: &[i32] = lz.get_slice(2..6);
assert_eq!(&[2, 3, 4, 5], slice);Structs§
- Concat
Only - Provides a mutable view onto a
LazyConcatwhich permits new lazy concatentation but not normalization. - Lazy
Concat