1pub trait VecExt<T> {
4 fn copy_overlapped(&mut self, src: usize, dst: usize, len: usize);
6}
7
8impl<T: Copy> VecExt<T> for Vec<T> {
9 fn copy_overlapped(&mut self, src: usize, dst: usize, mut len: usize) {
10 let mut src = src.min(self.len());
11 let mut dst = dst.min(self.len());
12 if dst > src {
13 while len > 0 {
14 let preceding = (dst - src).min(len);
15 for i in 0..preceding {
16 self[dst + i] = self[src + i];
17 }
18 len -= preceding;
19 src += preceding;
20 dst += preceding;
21 }
22 } else {
23 for i in 0..len {
24 self[dst + i] = self[src + i];
25 }
26 }
27 }
28}