@ -33,6 +33,11 @@ class StaticSparseMatrix {
current_size = 0 ;
current_size = 0 ;
storage_size = 0 ;
storage_size = 0 ;
value_storage = NULL ;
diagonal_storage = NULL ;
column_indications = NULL ;
row_indications = NULL ;
row_count = rows ;
row_count = rows ;
non_zero_entry_count = non_zero_entries ;
non_zero_entry_count = non_zero_entries ;
@ -71,7 +76,7 @@ class StaticSparseMatrix {
}
}
if ( ( row > row_count ) | | ( col > row_count ) | | ( row = = 0 ) | | ( col = = 0 ) ) {
if ( ( row > row_count ) | | ( col > row_count ) | | ( row = = 0 ) | | ( col = = 0 ) ) {
throw new mrmc : : exceptions : : out_of_range ( " mrmc::StaticSparseMatrix::getValue: row or col not in 1 .. rows " ) ;
throw mrmc : : exceptions : : out_of_range ( " mrmc::StaticSparseMatrix::getValue: row or col not in 1 .. rows " ) ;
}
}
uint_fast32_t row_start = row_indications [ row - 1 ] ;
uint_fast32_t row_start = row_indications [ row - 1 ] ;
@ -100,12 +105,12 @@ class StaticSparseMatrix {
if ( row_count = = 0 ) {
if ( row_count = = 0 ) {
pantheios : : log_ERROR ( " StaticSparseMatrix::initialize: Throwing invalid_argument for row_count = 0 " ) ;
pantheios : : log_ERROR ( " StaticSparseMatrix::initialize: Throwing invalid_argument for row_count = 0 " ) ;
throw new mrmc : : exceptions : : invalid_argument ( " mrmc::StaticSparseMatrix::initialize: Matrix with 0 rows is not reasonable " ) ;
throw mrmc : : exceptions : : invalid_argument ( " mrmc::StaticSparseMatrix::initialize: Matrix with 0 rows is not reasonable " ) ;
}
}
if ( ( ( row_count * row_count ) - row_count ) < non_zero_entry_count ) {
if ( ( ( row_count * row_count ) - row_count ) < non_zero_entry_count ) {
pantheios : : log_ERROR ( " StaticSparseMatrix::initialize: Throwing invalid_argument: More non-zero entries than entries in target matrix " ) ;
pantheios : : log_ERROR ( " StaticSparseMatrix::initialize: Throwing invalid_argument: More non-zero entries than entries in target matrix " ) ;
throw new mrmc : : exceptions : : invalid_argument ( " mrmc::StaticSparseMatrix::initialize: More non-zero entries than entries in target matrix " ) ;
throw mrmc : : exceptions : : invalid_argument ( " mrmc::StaticSparseMatrix::initialize: More non-zero entries than entries in target matrix " ) ;
}
}
storage_size = non_zero_entry_count ;
storage_size = non_zero_entry_count ;
@ -122,10 +127,10 @@ class StaticSparseMatrix {
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 __linux__
throw new std : : bad_alloc ( ) ;
# ifdef _WIN32
throw std : : bad_alloc ( " mrmc::StaticSparseMatrix::initialize: memory allocation failed " ) ;
# else
# else
throw new std : : bad_alloc ( " mrmc::StaticSparseMatrix::initialize: memory allocation failed " ) ;
throw std : : bad_alloc ( ) ;
# endif
# endif
}
}
}
}
@ -138,7 +143,7 @@ class StaticSparseMatrix {
void addNextValue ( const uint_fast32_t row , const uint_fast32_t col , const T value ) {
void addNextValue ( const uint_fast32_t row , const uint_fast32_t col , const T value ) {
if ( ( row > row_count ) | | ( col > row_count ) | | ( row = = 0 ) | | ( col = = 0 ) ) {
if ( ( row > row_count ) | | ( col > row_count ) | | ( row = = 0 ) | | ( col = = 0 ) ) {
pantheios : : log_ERROR ( " StaticSparseMatrix::addNextValue: Throwing out_of_range: row or col not in 1 .. rows " ) ;
pantheios : : log_ERROR ( " StaticSparseMatrix::addNextValue: Throwing out_of_range: row or col not in 1 .. rows " ) ;
throw new mrmc : : exceptions : : out_of_range ( " mrmc::StaticSparseMatrix::addNextValue: row or col not in 1 .. rows " ) ;
throw mrmc : : exceptions : : out_of_range ( " mrmc::StaticSparseMatrix::addNextValue: row or col not in 1 .. rows " ) ;
}
}
if ( row = = col ) {
if ( row = = col ) {
@ -162,7 +167,7 @@ class StaticSparseMatrix {
void finalize ( ) {
void finalize ( ) {
if ( storage_size ! = current_size ) {
if ( storage_size ! = current_size ) {
pantheios : : log_ERROR ( " StaticSparseMatrix::finalize: Throwing invalid_state: Wrong call count for addNextValue " ) ;
pantheios : : log_ERROR ( " StaticSparseMatrix::finalize: Throwing invalid_state: Wrong call count for addNextValue " ) ;
throw new mrmc : : exceptions : : invalid_state ( " mrmc::StaticSparseMatrix::finalize: Wrong call count for addNextValue " ) ;
throw mrmc : : exceptions : : invalid_state ( " mrmc::StaticSparseMatrix::finalize: Wrong call count for addNextValue " ) ;
}
}
if ( last_row ! = row_count ) {
if ( last_row ! = row_count ) {