orx_concurrent_iter/implementations/jagged_arrays/
slices.rs1use alloc::vec::Vec;
2
3pub trait Slices<'a, T>: Clone
5where
6 T: 'a,
7{
8 fn empty() -> Self;
10
11 fn num_slices(&self) -> usize;
13
14 fn slices(&self) -> impl Iterator<Item = &'a [T]>;
16
17 fn lengths(&self) -> impl Iterator<Item = usize>;
19
20 fn slice_at(&self, f: usize) -> Option<&'a [T]>;
23
24 unsafe fn slice_at_unchecked(&self, f: usize) -> &'a [T];
30}
31
32impl<'a, T: 'a> Slices<'a, T> for &'a [Vec<T>] {
33 fn empty() -> Self {
34 Default::default()
35 }
36
37 fn num_slices(&self) -> usize {
38 self.len()
39 }
40
41 fn slices(&self) -> impl Iterator<Item = &'a [T]> {
42 self.iter().map(|x| x.as_slice())
43 }
44
45 fn lengths(&self) -> impl Iterator<Item = usize> {
46 self.iter().map(|x| x.len())
47 }
48
49 fn slice_at(&self, f: usize) -> Option<&'a [T]> {
50 self.get(f).map(|x| x.as_slice())
51 }
52
53 unsafe fn slice_at_unchecked(&self, f: usize) -> &'a [T] {
54 self[f].as_slice()
55 }
56}