haar_lib/linalg/
traits.rs

1//! トレイト
2
3/// 失敗可能性のある足し算を表す。
4pub trait TryAdd<Rhs = Self> {
5    /// 返り値の型
6    type Output;
7    /// 失敗可能性のある足し算を行う。
8    fn try_add(self, rhs: Rhs) -> Option<Self::Output>;
9}
10
11/// 失敗可能性のある引き算を表す。
12pub trait TrySub<Rhs = Self> {
13    /// 返り値の型
14    type Output;
15    /// 失敗可能性のある引き算を行う。
16    fn try_sub(self, rhs: Rhs) -> Option<Self::Output>;
17}
18
19/// 失敗可能性のある掛け算を表す。
20pub trait TryMul<Rhs = Self> {
21    /// 返り値の型
22    type Output;
23    /// 失敗可能性のある掛け算を行う。
24    fn try_mul(self, rhs: Rhs) -> Option<Self::Output>;
25}
26
27/// 行列
28pub trait Matrix {
29    /// 行列の列数を返す。
30    fn width(&self) -> usize;
31    /// 行列の行数を返す。
32    fn height(&self) -> usize;
33    /// 行数の行数と列数のペアを返す。
34    fn size(&self) -> (usize, usize) {
35        (self.height(), self.width())
36    }
37    /// 行列が正方であるかどうかを判定する。
38    fn is_square(&self) -> bool {
39        self.width() == self.height()
40    }
41}
42
43/// 行列の転置
44pub trait MatrixTranspose {
45    /// 転置行列の型
46    type Output;
47    /// 転置した行列を返す。
48    fn transpose(self) -> Self::Output;
49}