Optimizations
This commit is contained in:
		
							parent
							
								
									5fddebd1bc
								
							
						
					
					
						commit
						e0303ff369
					
				| @ -42,9 +42,9 @@ Matrix2::Matrix2() {} | |||||||
| Matrix2::Matrix2(int nRows, int nCols) : nRows(nRows), nCols(nCols) { | Matrix2::Matrix2(int nRows, int nCols) : nRows(nRows), nCols(nCols) { | ||||||
|   this->nValues = nRows * nCols; |   this->nValues = nRows * nCols; | ||||||
|   if (this->nValues == 0) |   if (this->nValues == 0) | ||||||
|     data = nullptr; |     this->data = nullptr; | ||||||
|   else { |   else { | ||||||
|     this->data = new float[nValues](); |     this->data = new float[this->nValues]; | ||||||
|     this->externalData = false; |     this->externalData = false; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @ -55,15 +55,41 @@ Matrix2::Matrix2(float* data, int nRows, int nCols) | |||||||
|   this->externalData = true; |   this->externalData = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | Matrix2::Matrix2(const Matrix2& m) | ||||||
|  |     : nRows(m.nRows), nCols(m.nCols), nValues(m.nValues) { | ||||||
|  |   if (this->nValues == 0) | ||||||
|  |     this->data = nullptr; | ||||||
|  |   else { | ||||||
|  |     this->data = new float[this->nValues]; | ||||||
|  |     std::copy(m.data, m.data + nValues, this->data); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Matrix2& Matrix2::operator=(const Matrix2& m) { | ||||||
|  |   if (this != &m) { | ||||||
|  |     delete[] this->data;  // Free the current memory
 | ||||||
|  | 
 | ||||||
|  |     this->nRows = m.nRows; | ||||||
|  |     this->nCols = m.nCols; | ||||||
|  |     this->nValues = m.nValues; | ||||||
|  |     if (this->nValues == 0) | ||||||
|  |       this->data = nullptr; | ||||||
|  |     else { | ||||||
|  |       this->data = new float[this->nValues]; | ||||||
|  |       std::copy(m.data, m.data + this->nValues, this->data); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return *this; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| Matrix2::~Matrix2() { | Matrix2::~Matrix2() { | ||||||
|   if (data != nullptr && !this->externalData) |   if (!this->externalData) | ||||||
|     delete[] data; |     delete[] data; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Matrix2 Matrix2::Clone() const { | Matrix2 Matrix2::Clone() const { | ||||||
|   Matrix2 r = Matrix2(this->nRows, this->nCols); |   Matrix2 r = Matrix2(this->nRows, this->nCols); | ||||||
|   for (int ix = 0; ix < this->nValues; ix++) |   std::copy(this->data, this->data + this->nValues, r.data); | ||||||
|     r.data[ix] = this->data[ix]; |  | ||||||
|   return r; |   return r; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -154,6 +180,12 @@ Matrix2 LinearAlgebra::Matrix2::operator+(const Matrix2& v) const { | |||||||
|   return r; |   return r; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | Matrix2 Matrix2::operator+=(const Matrix2& v) { | ||||||
|  |   for (int ix = 0; ix < this->nValues; ix++) | ||||||
|  |     this->data[ix] += v.data[ix]; | ||||||
|  |   return *this; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| Matrix2 LinearAlgebra::Matrix2::operator*(const Matrix2& B) const { | Matrix2 LinearAlgebra::Matrix2::operator*(const Matrix2& B) const { | ||||||
|   Matrix2 r = Matrix2(this->nRows, B.nCols); |   Matrix2 r = Matrix2(this->nRows, B.nCols); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -33,6 +33,8 @@ class Matrix2 { | |||||||
|   Matrix2(); |   Matrix2(); | ||||||
|   Matrix2(int nRows, int nCols); |   Matrix2(int nRows, int nCols); | ||||||
|   Matrix2(float* data, int nRows, int nCols); |   Matrix2(float* data, int nRows, int nCols); | ||||||
|  |   Matrix2(const Matrix2& m); | ||||||
|  |   Matrix2& operator=(const Matrix2& other); | ||||||
| 
 | 
 | ||||||
|   ~Matrix2(); |   ~Matrix2(); | ||||||
| 
 | 
 | ||||||
| @ -55,6 +57,7 @@ class Matrix2 { | |||||||
|   /// @param m The matrix to add to this matrix
 |   /// @param m The matrix to add to this matrix
 | ||||||
|   /// @return The result of the addition
 |   /// @return The result of the addition
 | ||||||
|   Matrix2 operator+(const Matrix2& v) const; |   Matrix2 operator+(const Matrix2& v) const; | ||||||
|  |   Matrix2 operator+=(const Matrix2& v); | ||||||
| 
 | 
 | ||||||
|   Matrix2 operator*(const Matrix2& m) const; |   Matrix2 operator*(const Matrix2& m) const; | ||||||
|   friend Matrix2 operator*(const Matrix2& m, float f) { |   friend Matrix2 operator*(const Matrix2& m, float f) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user