1use nalgebra::base::dimension::{Dim as _, Dynamic, U1};
2use nalgebra::base::{VecStorage, Vector as InnerVector};
3use std::iter::FromIterator;
4use std::ops;
5
6pub type ColVec = Vector;
8
9#[derive(Debug, Clone)]
10pub struct Vector {
11 inner: InnerVector<f64, Dynamic, VecStorage<f64, Dynamic, U1>>,
12}
13impl Vector {
14 pub fn new(inner: InnerVector<f64, Dynamic, VecStorage<f64, Dynamic, U1>>) -> Self {
15 Self { inner }
16 }
17
18 pub fn len(&self) -> usize {
19 self.inner.len()
20 }
21
22 pub fn iter<'a>(&'a self) -> impl 'a + Iterator<Item = f64> {
23 self.inner.iter().copied()
24 }
25
26 pub fn as_slice(&self) -> &[f64] {
27 self.inner.as_slice()
28 }
29
30 pub fn into_inner(self) -> InnerVector<f64, Dynamic, VecStorage<f64, Dynamic, U1>> {
31 self.inner
32 }
33}
34impl From<Vec<f64>> for Vector {
35 fn from(f: Vec<f64>) -> Self {
36 let rows = Dynamic::from_usize(f.len());
37 let inner = InnerVector::from_data(VecStorage::new(rows, U1, f));
38 Self { inner }
39 }
40}
41impl FromIterator<f64> for Vector {
42 fn from_iter<T>(iter: T) -> Self
43 where
44 T: IntoIterator<Item = f64>,
45 {
46 Self::from(iter.into_iter().collect::<Vec<_>>())
47 }
48}
49impl ops::Add<ColVec> for ColVec {
50 type Output = ColVec;
51
52 fn add(self, rhs: Self) -> Self::Output {
53 Self::new(self.into_inner() + rhs.into_inner())
54 }
55}