diff --git a/src/cats/grids/gdal_save.c b/src/cats/grids/gdal_save.c index b6d25342bc7332ef4447fbbb0aa26d920a439d3b..ba025262a0e770e53d5cd49cb85ea61f80c8768e 100644 --- a/src/cats/grids/gdal_save.c +++ b/src/cats/grids/gdal_save.c @@ -132,7 +132,7 @@ void *save_dispersed_seeds_to_gdal(struct cats_grid *grid, struct cats_configura const int32_t cols = grid->dimension.cols; for (cats_dt_coord row = 0; row < rows; row++) { for (cats_dt_coord col = 0; col < cols; col++) { - seeds[row][col] = grid->dispersed_seeds[row][col]; + seeds[row][col] = get_dispersed_seeds(grid, row, col); } } diff --git a/src/cats/grids/grid_setup.c b/src/cats/grids/grid_setup.c index e8b72b419bb9aae992449aa5422d05afa4e13941..5c31dcdecea39fb74aa515ca92463c40746509bd 100644 --- a/src/cats/grids/grid_setup.c +++ b/src/cats/grids/grid_setup.c @@ -56,7 +56,7 @@ void setup_grid_seed_structures(const struct cats_configuration *conf, struct ca grid->seed_bank[row] = calloc_or_die(cols, sizeof(cats_dt_seeds *)); for (cats_dt_coord col = 0; col < cols; col++) { - grid->seed_bank[row][col] = NULL; + grid->seed_bank[row][col] = NULL; // initialisation [setup_grid_seed_structure] } } } diff --git a/src/cats/inline.h b/src/cats/inline.h index 1e3606b3893576a75fbccca531dbdbd9ee9566b7..2f3f406deb97c0f9e1ceaea9448ec70ef8392333 100644 --- a/src/cats/inline.h +++ b/src/cats/inline.h @@ -44,19 +44,32 @@ #include "inline_vital_ages.h" #include "grids/dimensions.h" +static inline bool valid_dispersed_seed_grid(const struct cats_grid *grid, cats_dt_coord row) +{ + if (grid == NULL) return false; + if (grid->dispersed_seeds == NULL) return false; + if (grid->dispersed_seeds[row] == NULL) return false; // validator [valid_population_grid] + return true; +} + static inline cats_dt_environment get_suitability_from_env(const struct cats_environment *set, cats_dt_coord row, cats_dt_coord col) { assert(set->type == ENVIRONMENT_TYPE_SUITABILITY); assert(set->count == 1); - assert(row >= 0); - assert(col >= 0); - assert(row < set->environments[0]->current.dimension.rows); - assert(col < set->environments[0]->current.dimension.cols); + assert(valid_coordinates(&set->environments[0]->current.dimension, row, col)); return load_input_environment_raster(&set->environments[0]->current, row, col); } +static inline cats_dt_seeds +get_dispersed_seeds(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col) +{ + assert(valid_coordinates(&grid->dimension, row, col)); + assert(valid_dispersed_seed_grid(grid, row)); + return grid->dispersed_seeds[row][col]; // get [get_dispersed_seeds] +} + static inline void set_suitability(struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col, cats_dt_environment value) diff --git a/src/cats/misc/debug.c b/src/cats/misc/debug.c index acc0c168882ed09b64512966130da4d560bb7472..4900cc3aa9ea41560d02c199ff8c836cdb5bca31 100644 --- a/src/cats/misc/debug.c +++ b/src/cats/misc/debug.c @@ -28,6 +28,12 @@ #include <memory/cats_memory.h> +static inline cats_dt_population debug_get_juveniles(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col, int year) +{ + if (grid->juveniles[row][col] == NULL) return 0; + return grid->juveniles[row][col][year]; +} + void debug_juveniles(const struct cats_grid *grid, const struct cats_configuration *conf, cats_dt_coord row, cats_dt_coord col, const char *action) @@ -38,11 +44,7 @@ debug_juveniles(const struct cats_grid *grid, const struct cats_configuration *c const int32_t max_age_of_maturity = get_vital_age(grid, VA_AGE_OF_MATURITY_MAX); for (int32_t i = 0; i < max_age_of_maturity + 1; i++) { - if (grid->juveniles[row][col]) { - fprintf(cats_debug.misc_debug_file, ",%d", grid->juveniles[row][col][i]); - } else { - fprintf(cats_debug.misc_debug_file, ",%d", 0); - } + fprintf(cats_debug.misc_debug_file, ",%d", debug_get_juveniles(grid, row, col, i)); } fprintf(cats_debug.misc_debug_file, "\n"); diff --git a/src/cats_csv/cats_csv.c b/src/cats_csv/cats_csv.c index 676cf3275f533ff6b74c9773cd751f49d1613eef..57b45d97b5cda9d96e3d36fca009a240739dfb12 100644 --- a/src/cats_csv/cats_csv.c +++ b/src/cats_csv/cats_csv.c @@ -89,8 +89,8 @@ void csv_free(struct cats_csv **csv) if (this->data[row] == NULL) continue; for (int32_t col = 0; col < this->column_count; col++) { - free(this->data[row][col]); - this->data[row][col] = NULL; + free(this->data[row][col]); // clean-up, non-spatial [csv_free] + this->data[row][col] = NULL; // clean-up, non-spatial [csv_free] } free(this->data[row]); @@ -142,7 +142,7 @@ char *csv_get_value_field_name(struct cats_csv *csv, int32_t row, const char *fi exit(EXIT_FAILURE); } - return csv->data[row][field_idx]; + return csv->data[row][field_idx]; // getter, non-spatial [csv_get_value_field_name] } @@ -164,7 +164,7 @@ char *csv_get_value_field_idx(struct cats_csv *csv, int32_t row, int32_t field_i exit(EXIT_FAILURE); } - return csv->data[row][field_idx]; + return csv->data[row][field_idx]; // getter, non-spatial [csv_get_value_field_idx] } @@ -242,8 +242,7 @@ void csv_add_row(struct cats_csv *csv, char *line) csv->data[row] = malloc_or_die_trace(fields * sizeof(char *), __func__); for (int32_t i = 0; i < csv->column_count; i++) { - csv->data[row][i] = strdup(data->string[i]); - + csv->data[row][i] = strdup(data->string[i]); // initialisation, non-spatial [csv_add_row] } free_string_array(&data);