From f93e473eb5acaccf2fbbcbd136355cda8ef43501 Mon Sep 17 00:00:00 2001
From: Andreas Gattringer <andreas.gattringer@univie.ac.at>
Date: Wed, 19 Jul 2023 16:41:34 +0200
Subject: [PATCH] more helper functions and fixes

---
 src/cats/debug/debug_vital_rates.h |  3 ++-
 src/cats/grids/dimensions.c        | 12 ------------
 src/cats/grids/dimensions.h        | 13 +++++++++++++
 src/cats/inline.h                  | 17 +++++++++++++++++
 src/cats/inline_overlays.h         | 12 ++++++++++++
 src/cats/inline_population.h       | 17 +++++++++++++++++
 6 files changed, 61 insertions(+), 13 deletions(-)

diff --git a/src/cats/debug/debug_vital_rates.h b/src/cats/debug/debug_vital_rates.h
index 442e197..c5c1b4f 100644
--- a/src/cats/debug/debug_vital_rates.h
+++ b/src/cats/debug/debug_vital_rates.h
@@ -27,6 +27,7 @@
 #include "configuration/configuration.h"
 
 void debug_vital_rates(struct cats_configuration *conf, const struct program_options *command_line_options);
-
+struct cats_environment *minimal_suitability_environment(void);
+struct cats_grid *minimal_grid(struct cats_configuration *conf, struct cats_environment *env);
 
 #endif //CATS_DEBUG_VITAL_RATES_H
diff --git a/src/cats/grids/dimensions.c b/src/cats/grids/dimensions.c
index 7445ed5..b0d24ec 100644
--- a/src/cats/grids/dimensions.c
+++ b/src/cats/grids/dimensions.c
@@ -1,4 +1,3 @@
-#include <assert.h>
 #include "dimensions.h"
 
 
@@ -9,17 +8,6 @@ void copy_dimensions_from_to(const struct cats_dimension *from, struct cats_dime
 }
 
 
-bool valid_coordinates(const struct cats_dimension *dim, cats_dt_coord row, cats_dt_coord col)
-{
-        assert(dim != NULL);
-        assert(row >= 0 && row < dim->rows);
-        assert(col >= 0 && col < dim->cols);
-        if (row < 0 || col < 0) return false;
-        if (row >= dim->rows || col >= dim->cols) return false;
-        return true;
-}
-
-
 bool dimensions_match(const struct cats_dimension *dim1, const struct cats_dimension *dim2)
 {
         if (dim1->rows == dim2->rows && dim1->cols == dim2->cols) {
diff --git a/src/cats/grids/dimensions.h b/src/cats/grids/dimensions.h
index b25912c..064b644 100644
--- a/src/cats/grids/dimensions.h
+++ b/src/cats/grids/dimensions.h
@@ -2,6 +2,19 @@
 #define CATS_DIMENSIONS_H
 
 #include "memory/arrays.h"
+#include "assert.h"
+
+
+static inline bool valid_coordinates(const struct cats_dimension *dim, cats_dt_coord row, cats_dt_coord col)
+{
+        assert(dim != NULL);
+        assert(row >= 0 && row < dim->rows);
+        assert(col >= 0 && col < dim->cols);
+        if (row < 0 || col < 0) return false;
+        if (row >= dim->rows || col >= dim->cols) return false;
+        return true;
+}
+
 
 void copy_dimensions_from_to(const struct cats_dimension *from, struct cats_dimension *to);
 
diff --git a/src/cats/inline.h b/src/cats/inline.h
index 2f3f406..5c17dc4 100644
--- a/src/cats/inline.h
+++ b/src/cats/inline.h
@@ -52,6 +52,15 @@ static inline bool valid_dispersed_seed_grid(const struct cats_grid *grid, cats_
         return true;
 }
 
+static inline bool valid_produced_seed_grid(const struct cats_grid *grid, cats_dt_coord row)
+{
+        if (grid == NULL) return false;
+        if (grid->seeds_produced == NULL) return false;
+        if (grid->seeds_produced[row] == NULL) return false;       // validator [valid_produced_seed_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)
@@ -70,6 +79,14 @@ get_dispersed_seeds(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coo
         return grid->dispersed_seeds[row][col];  // get [get_dispersed_seeds]
 }
 
+static inline cats_dt_seeds
+get_produced_seeds(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col)
+{
+        assert(valid_coordinates(&grid->dimension, row, col));
+        assert(valid_produced_seed_grid(grid, row));
+        return grid->seeds_produced[row][col];  // get [get_produced_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/inline_overlays.h b/src/cats/inline_overlays.h
index 5f73167..1de2612 100644
--- a/src/cats/inline_overlays.h
+++ b/src/cats/inline_overlays.h
@@ -64,5 +64,17 @@ cell_excluded_by_overlay(const struct cats_configuration *config, cats_dt_coord
         exit_cats(EXIT_FAILURE);
 }
 
+static inline double get_overlay_habitat_cc_value(const struct cats_configuration *conf, cats_dt_coord row, cats_dt_coord col)
+{
+        assert(conf->overlays.overlay[OL_HABITAT_TYPE_CC].enabled);
+        return conf->overlays.habitat_cc->data[row][col]; // getter [get_overlay_habitat_cc_value]
+}
+
+static inline double get_overlay_resource_value(const struct cats_configuration *conf, cats_dt_coord row, cats_dt_coord col)
+{
+        assert(conf->overlays.overlay[OL_RESOURCE].enabled);
+        return conf->overlays.resources->data[row][col]; // getter [get_overlay_resource_value]
+}
+
 
 #endif //CATS_INLINE_OVERLAYS_H
diff --git a/src/cats/inline_population.h b/src/cats/inline_population.h
index 65f4c54..0a1c7d2 100644
--- a/src/cats/inline_population.h
+++ b/src/cats/inline_population.h
@@ -44,6 +44,23 @@ static inline bool valid_population_grid(const struct cats_grid *grid, cats_dt_c
         return true;
 }
 
+static inline bool valid_juvenile_grid(const struct cats_grid *grid, cats_dt_coord row)
+{
+        if (grid == NULL) return false;
+        if (grid->juveniles == NULL) return false;
+        if (grid->juveniles[row] == NULL) return false;       // validator [valid_juvenile_grid]
+        return true;
+}
+
+
+static inline cats_dt_population get_juveniles(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col, int year)
+{
+        assert(valid_juvenile_grid(grid, row));
+        assert(valid_coordinates(&grid->dimension, row, col));
+        if (grid->juveniles[row][col] == NULL) return 0;
+        return grid->juveniles[row][col][year];
+}
+
 
 static inline cats_dt_population
 get_adult_population(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col)
-- 
GitLab