diff --git a/src/lib.rs b/src/lib.rs index 95d56f4..1cb9b57 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -157,13 +157,14 @@ impl Matrix { None } - pub fn add_column(&mut self, data: Vec) -> Option { + pub fn append_column(&mut self, data: Vec) -> Option { if data.len() != self.columns { return Some(MatrixError::InvalidDataSize); } for i in 0..data.len() { - self.data.insert((i * self.rows) + self.rows - 1, data[i]); + self.data + .insert((i * self.rows) + self.rows + i - 1, data[i]); } self.columns += 1; @@ -171,7 +172,7 @@ impl Matrix { None } - pub fn add_row(&mut self, data: Vec) -> Option { + pub fn append_row(&mut self, data: Vec) -> Option { if data.len() != self.rows { return Some(MatrixError::InvalidDataSize); } @@ -185,6 +186,32 @@ impl Matrix { None } + pub fn pop_column(&mut self) -> Option { + if self.columns <= 1 { + return Some(MatrixError::InvalidDataSize); + } + + for i in 0..self.columns { + self.data.remove((i * self.rows) + self.rows - i - 1); + } + + self.columns -= 1; + + None + } + + pub fn pop_row(&mut self) -> Option { + if self.rows <= 1 { + return Some(MatrixError::InvalidDataSize); + } + + for _i in 0..self.rows { + self.data.pop(); + } + + None + } + fn partial_pivoting(&mut self, col: usize, sign: &mut Fraction) -> Result { if col >= self.columns { return Err(MatrixError::ColumnOutOfRange);