|  | @ -2,6 +2,7 @@ | 
		
	
		
			
				|  |  | #define MRMC_SPARSE_STATIC_SPARSE_MATRIX_H_ |  |  | #define MRMC_SPARSE_STATIC_SPARSE_MATRIX_H_ | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | #include <exception> |  |  | #include <exception> | 
		
	
		
			
				|  |  |  |  |  | #include <new> | 
		
	
		
			
				|  |  | #include "boost/integer/integer_mask.hpp" |  |  | #include "boost/integer/integer_mask.hpp" | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | #include <pantheios/pantheios.hpp> |  |  | #include <pantheios/pantheios.hpp> | 
		
	
	
		
			
				|  | @ -46,16 +47,20 @@ class StaticSparseMatrix { | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | 	~StaticSparseMatrix() { |  |  | 	~StaticSparseMatrix() { | 
		
	
		
			
				|  |  | 		if (value_storage != NULL) { |  |  | 		if (value_storage != NULL) { | 
		
	
		
			
				|  |  | 			free(value_storage); |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 			//free(value_storage); | 
		
	
		
			
				|  |  |  |  |  | 			delete value_storage; | 
		
	
		
			
				|  |  | 		} |  |  | 		} | 
		
	
		
			
				|  |  | 		if (column_indications != NULL) { |  |  | 		if (column_indications != NULL) { | 
		
	
		
			
				|  |  | 			free(column_indications); |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 			//free(column_indications); | 
		
	
		
			
				|  |  |  |  |  | 			delete column_indications; | 
		
	
		
			
				|  |  | 		} |  |  | 		} | 
		
	
		
			
				|  |  | 		if (row_indications != NULL) { |  |  | 		if (row_indications != NULL) { | 
		
	
		
			
				|  |  | 			free(row_indications); |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 			//free(row_indications); | 
		
	
		
			
				|  |  |  |  |  | 			delete row_indications; | 
		
	
		
			
				|  |  | 		} |  |  | 		} | 
		
	
		
			
				|  |  | 		if (diagonal_storage != NULL) { |  |  | 		if (diagonal_storage != NULL) { | 
		
	
		
			
				|  |  | 			free(diagonal_storage); |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 			//free(diagonal_storage); | 
		
	
		
			
				|  |  |  |  |  | 			delete diagonal_storage; | 
		
	
		
			
				|  |  | 		} |  |  | 		} | 
		
	
		
			
				|  |  | 	} |  |  | 	} | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
	
		
			
				|  | @ -116,22 +121,22 @@ class StaticSparseMatrix { | 
		
	
		
			
				|  |  | 		storage_size = non_zero_entry_count; |  |  | 		storage_size = non_zero_entry_count; | 
		
	
		
			
				|  |  | 		last_row = 0; |  |  | 		last_row = 0; | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | 		value_storage = static_cast<T*>(calloc(storage_size, sizeof(*value_storage))); |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 		//value_storage = static_cast<T*>(calloc(storage_size, sizeof(*value_storage))); | 
		
	
		
			
				|  |  |  |  |  | 		value_storage = new (std::nothrow) T[storage_size](); | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | 		column_indications = static_cast<uint_fast32_t*>(calloc(storage_size, sizeof(*column_indications))); |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 		//column_indications = static_cast<uint_fast32_t*>(calloc(storage_size, sizeof(*column_indications))); | 
		
	
		
			
				|  |  |  |  |  | 		column_indications = new (std::nothrow) uint_fast32_t[storage_size](); | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | 		row_indications = static_cast<uint_fast32_t*>(calloc(row_count + 1, sizeof(*row_indications))); |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 		//row_indications = static_cast<uint_fast32_t*>(calloc(row_count + 1, sizeof(*row_indications))); | 
		
	
		
			
				|  |  |  |  |  | 		row_indications = new (std::nothrow) uint_fast32_t[row_count + 1](); | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | 		// row_count + 1 so that access with 1-based indices can be direct without the overhead of a -1 each time |  |  | 		// row_count + 1 so that access with 1-based indices can be direct without the overhead of a -1 each time | 
		
	
		
			
				|  |  | 		diagonal_storage = static_cast<T*>(calloc(row_count + 1, sizeof(*diagonal_storage))); |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 		//diagonal_storage = static_cast<T*>(calloc(row_count + 1, sizeof(*diagonal_storage))); | 
		
	
		
			
				|  |  |  |  |  | 		diagonal_storage = new (std::nothrow) T[row_count + 1](); | 
		
	
		
			
				|  |  | 		 |  |  | 		 | 
		
	
		
			
				|  |  | 		if ((value_storage == NULL) || (column_indications == NULL) || (row_indications == NULL) || (diagonal_storage == NULL)) { |  |  | 		if ((value_storage == NULL) || (column_indications == NULL) || (row_indications == NULL) || (diagonal_storage == NULL)) { | 
		
	
		
			
				|  |  | 			pantheios::log_ERROR("StaticSparseMatrix::initialize: Throwing bad_alloc: memory allocation failed"); |  |  | 			pantheios::log_ERROR("StaticSparseMatrix::initialize: Throwing bad_alloc: memory allocation failed"); | 
		
	
		
			
				|  |  | #ifdef _WIN32 |  |  |  | 
		
	
		
			
				|  |  | 			throw std::bad_alloc("mrmc::StaticSparseMatrix::initialize: memory allocation failed"); |  |  |  | 
		
	
		
			
				|  |  | #else |  |  |  | 
		
	
		
			
				|  |  | 			throw std::bad_alloc(); |  |  | 			throw std::bad_alloc(); | 
		
	
		
			
				|  |  | #endif |  |  |  | 
		
	
		
			
				|  |  | 		} |  |  | 		} | 
		
	
		
			
				|  |  | 	} |  |  | 	} | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
	
		
			
				|  | 
 |