bool nnc_info_equal( const nnc_info_type * nnc_info1 , const nnc_info_type * nnc_info2 ) { if (nnc_info1 == nnc_info2) return true; if ((nnc_info1 == NULL) || (nnc_info2 == NULL)) return false; { if (nnc_info1->lgr_nr != nnc_info2->lgr_nr) return false; if ((int_vector_size( nnc_info1->lgr_index_map ) > 0) && (int_vector_size( nnc_info2->lgr_index_map ) > 0)) { int max_lgr_nr = util_int_max( int_vector_size( nnc_info1->lgr_index_map ), int_vector_size( nnc_info2->lgr_index_map ) ); int lgr_nr = 0; while (true) { nnc_vector_type * vector1 = nnc_info_get_vector( nnc_info1 , lgr_nr ); nnc_vector_type * vector2 = nnc_info_get_vector( nnc_info2 , lgr_nr ); if (!nnc_vector_equal(vector1 , vector2)) return false; lgr_nr++; if (lgr_nr > max_lgr_nr) return true; } } else { if (int_vector_size( nnc_info1->lgr_index_map ) == int_vector_size( nnc_info2->lgr_index_map )) return true; else return false; } } }
const int_vector_type * nnc_info_get_grid_index_list(const nnc_info_type * nnc_info, int lgr_nr) { nnc_vector_type * nnc_vector = nnc_info_get_vector( nnc_info , lgr_nr ); if (nnc_vector) return nnc_vector_get_grid_index_list( nnc_vector ); else return NULL; }
void nnc_info_add_nnc(nnc_info_type * nnc_info, int lgr_nr, int global_cell_number, int nnc_index) { nnc_info_assert_vector( nnc_info , lgr_nr ); { nnc_vector_type * nnc_vector = nnc_info_get_vector( nnc_info , lgr_nr ); nnc_vector_add_nnc( nnc_vector , global_cell_number , nnc_index); } }
static void nnc_info_assert_vector( nnc_info_type * nnc_info , int lgr_nr ) { nnc_vector_type * nnc_vector = nnc_info_get_vector( nnc_info , lgr_nr); if (!nnc_vector) { nnc_vector = nnc_vector_alloc( lgr_nr ); nnc_info_add_vector( nnc_info , nnc_vector ); } }
int main(int argc , char ** argv) { int lgr_nr = 77; nnc_info_type * nnc_info = nnc_info_alloc(lgr_nr); test_assert_int_equal( 0 , nnc_info_get_total_size( nnc_info )); test_assert_int_equal( lgr_nr , nnc_info_get_lgr_nr( nnc_info )); test_assert_true(nnc_info_is_instance(nnc_info)); test_assert_not_NULL(nnc_info); nnc_info_add_nnc(nnc_info, lgr_nr, 110 , 0); test_assert_int_equal( 1, nnc_info_get_total_size( nnc_info )); nnc_info_add_nnc(nnc_info, 1, 110 , 1); nnc_info_add_nnc(nnc_info, 1, 111 , 2); test_assert_int_equal( 3, nnc_info_get_total_size( nnc_info )); nnc_vector_type * nnc_vector = nnc_info_get_vector( nnc_info , 1); const int_vector_type * nnc_cells = nnc_info_get_grid_index_list(nnc_info, 1); test_assert_int_equal(int_vector_size(nnc_cells), 2); test_assert_ptr_equal( nnc_cells , nnc_vector_get_grid_index_list( nnc_vector )); nnc_vector_type * nnc_vector_null = nnc_info_get_vector( nnc_info , 2); const int_vector_type * nnc_cells_null = nnc_info_get_grid_index_list(nnc_info, 2); test_assert_NULL(nnc_cells_null); test_assert_NULL(nnc_vector_null); nnc_vector_type * nnc_vector_self = nnc_info_get_self_vector( nnc_info ); const nnc_vector_type * nnc_vector_77 = nnc_info_get_vector( nnc_info , lgr_nr ); test_assert_ptr_equal( nnc_vector_77 , nnc_vector_self ); const int_vector_type * nnc_cells_77 = nnc_info_get_grid_index_list(nnc_info, lgr_nr); const int_vector_type * nnc_cells_self = nnc_info_get_self_grid_index_list(nnc_info); test_assert_ptr_equal( nnc_cells_77 , nnc_cells_self ); test_assert_int_equal( 2 , nnc_info_get_size( nnc_info )); test_assert_ptr_equal( nnc_info_get_vector( nnc_info , 1 ) , nnc_info_iget_vector( nnc_info , 1 )); nnc_info_free(nnc_info); exit(0); }
nnc_vector_type * nnc_info_get_self_vector( const nnc_info_type * nnc_info ) { return nnc_info_get_vector( nnc_info , nnc_info->lgr_nr ); }