1use super::{
4 shape::{RemovedAxis, Strides},
5 Array, Shape,
6};
7
8mod iter;
9pub use iter::Iter;
10
11#[derive(Debug, PartialEq)]
16pub struct View<'a, T> {
17 data: &'a [T], shape: RemovedAxis<'a, Shape>,
19 strides: RemovedAxis<'a, Strides>,
20}
21
22impl<'a, T> Clone for View<'a, T> {
23 fn clone(&self) -> Self {
24 *self
25 }
26}
27
28impl<'a, T> Copy for View<'a, T> {}
29
30impl<'a, T> View<'a, T> {
31 pub fn dimensions(&self) -> usize {
33 self.shape.len()
34 }
35
36 pub fn iter(&self) -> Iter<'_, T> {
38 Iter::new(*self)
39 }
40
41 pub(crate) fn new_unchecked(
42 data: &'a [T],
43 shape: RemovedAxis<'a, Shape>,
44 strides: RemovedAxis<'a, Strides>,
45 ) -> Self {
46 Self {
47 data,
48 shape,
49 strides,
50 }
51 }
52
53 pub fn to_array(&self) -> Array<T>
55 where
56 T: Clone,
57 {
58 let data = Vec::from_iter(self.iter().cloned());
59 let shape = Shape(self.shape.iter().copied().collect());
60
61 Array::new_unchecked(data, shape)
62 }
63}