ranges_ext/
alloc_ops.rs

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> {}