1use core::ops::Range;
2
3use crate::{RangeError, RangeExtBaseOps, RangeInfo, RangeVecAllocOps, VecOps, core_ops};
4
5impl<T: RangeInfo> VecOps<T> for alloc::vec::Vec<T> {
6 fn push(&mut self, item: T) -> Result<(), RangeError<T>> {
7 self.push(item);
8 Ok(())
9 }
10
11 fn as_slice(&self) -> &[T] {
12 self.as_slice()
13 }
14
15 fn drain<R>(&mut self, range: R) -> impl Iterator<Item = T>
16 where
17 R: core::ops::RangeBounds<usize>,
18 {
19 self.drain(range)
20 }
21
22 fn len(&self) -> usize {
23 self.as_slice().len()
24 }
25
26 fn remove(&mut self, index: usize) -> T {
27 self.remove(index)
28 }
29
30 fn insert(&mut self, index: usize, item: T) -> Result<(), RangeError<T>> {
31 self.insert(index, item);
32 Ok(())
33 }
34
35 fn clear(&mut self) {
36 self.clear();
37 }
38}
39
40impl<T: RangeInfo> RangeVecAllocOps<T> for alloc::vec::Vec<T> {
41 fn merge_add(&mut self, new_info: T) -> Result<(), RangeError<T>> {
42 let mut temp = alloc::vec::Vec::new();
43 self.merge_add_with_temp(new_info, &mut temp)?;
44 Ok(())
45 }
46
47 fn merge_remove(&mut self, range: Range<T::Type>) -> Result<(), RangeError<T>> {
48 let mut temp = alloc::vec::Vec::new();
49 self.merge_remove_with_temp(range, &mut temp)?;
50 Ok(())
51 }
52
53 fn merge_extend<I>(&mut self, ranges: I) -> Result<(), RangeError<T>>
54 where
55 I: IntoIterator<Item = T>,
56 {
57 for info in ranges {
58 self.merge_add(info)?;
59 }
60
61 Ok(())
62 }
63
64 fn contains_point(&self, value: T::Type) -> bool {
65 core_ops::contains_point(self.as_slice(), value)
66 }
67}
68
69impl<T: RangeInfo> RangeExtBaseOps<T> for alloc::vec::Vec<T> {}