Added class matrix
This commit is contained in:
parent
eaefcd3272
commit
4da27c5777
|
@ -0,0 +1,62 @@
|
||||||
|
use std::ops::{
|
||||||
|
Index,
|
||||||
|
IndexMut
|
||||||
|
};
|
||||||
|
|
||||||
|
/// A generic matrix type, useful for levels.
|
||||||
|
pub struct Matrix<T> {
|
||||||
|
|
||||||
|
/// The number of rows of the matrix.
|
||||||
|
rows: usize,
|
||||||
|
|
||||||
|
/// The number of cols of the matrix.
|
||||||
|
cols: usize,
|
||||||
|
|
||||||
|
/// The contained data in the matrix.
|
||||||
|
data: Vec<T>,
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> Matrix<T> where T: Clone {
|
||||||
|
/// Creates a matrix from an element and duplicates it.
|
||||||
|
pub fn from_size(rows: usize, cols: usize, element: T) -> Matrix<T> {
|
||||||
|
Matrix {
|
||||||
|
rows: rows,
|
||||||
|
cols: cols,
|
||||||
|
data: vec![element; rows * cols],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> Matrix<T> {
|
||||||
|
/// Converts an a pair corresponding to the row and columns into an integer.
|
||||||
|
pub fn to_usize(&self, (row, col): (usize, usize)) -> usize {
|
||||||
|
self.cols * col + row
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the number of rows.
|
||||||
|
pub fn rows(&self) -> usize {
|
||||||
|
self.rows
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the number of columns.
|
||||||
|
pub fn cols(&self) -> usize {
|
||||||
|
self.cols
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> Index<(usize, usize)> for Matrix<T> {
|
||||||
|
type Output = T;
|
||||||
|
|
||||||
|
fn index(&self, index: (usize, usize)) -> &T {
|
||||||
|
let index = self.to_usize(index);
|
||||||
|
&self.data[index]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> IndexMut<(usize, usize)> for Matrix<T> {
|
||||||
|
fn index_mut(&mut self, index: (usize, usize)) -> &mut T {
|
||||||
|
let index = self.to_usize(index);
|
||||||
|
&mut self.data[index]
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,3 +10,6 @@ pub mod controls;
|
||||||
|
|
||||||
/// This module helps us dealing with textures.
|
/// This module helps us dealing with textures.
|
||||||
pub mod texture;
|
pub mod texture;
|
||||||
|
|
||||||
|
/// This module contains the math tools that will be used.
|
||||||
|
pub mod math;
|
||||||
|
|
Loading…
Reference in New Issue