diff --git a/src/Init/GridInit.cpp b/src/Init/GridInit.cpp index 65d788eea..dcd28db75 100644 --- a/src/Init/GridInit.cpp +++ b/src/Init/GridInit.cpp @@ -4,8 +4,6 @@ #include #include #include -#include -#include #include #include #include @@ -77,8 +75,10 @@ getModuleSizes(IPhreeqcPOET &phreeqc, const Rcpp::List &initial_grid) { void InitialList::initGrid(const Rcpp::List &grid_input) { // parse input values - const std::string script = Rcpp::as(grid_input["pqc_in"]); - const std::string database = Rcpp::as(grid_input["pqc_db"]); + const std::string script = Rcpp::as( + grid_input[getGridMemberString(GridMembers::PQC_SCRIPT_FILE)]); + const std::string database = Rcpp::as( + grid_input[getGridMemberString(GridMembers::PQC_DB_FILE)]); std::string script_rp(PATH_MAX, '\0'); std::string database_rp(PATH_MAX, '\0'); @@ -93,8 +93,10 @@ void InitialList::initGrid(const Rcpp::List &grid_input) { database); } - Rcpp::NumericMatrix grid_def = grid_input["grid_def"]; - Rcpp::NumericVector grid_size = grid_input["grid_size"]; + Rcpp::NumericMatrix grid_def = + grid_input[getGridMemberString(GridMembers::GRID_DEF)]; + Rcpp::NumericVector grid_size = + grid_input[getGridMemberString(GridMembers::GRID_SIZE)]; // Rcpp::NumericVector constant_cells = grid["constant_cells"].; this->n_rows = grid_def.nrow(); diff --git a/src/Init/InitialList.cpp b/src/Init/InitialList.cpp index d37fee1fc..a433097a2 100644 --- a/src/Init/InitialList.cpp +++ b/src/Init/InitialList.cpp @@ -2,7 +2,7 @@ namespace poet { void InitialList::initializeFromList(const Rcpp::List &setup) { - initGrid(setup["grid"]); - initDiffusion(setup["diffusion"]); + initGrid(setup[grid_key]); + initDiffusion(setup[diffusion_key]); } } // namespace poet \ No newline at end of file diff --git a/src/Init/InitialList.hpp b/src/Init/InitialList.hpp index 30289c252..b75a9b2d8 100644 --- a/src/Init/InitialList.hpp +++ b/src/Init/InitialList.hpp @@ -3,9 +3,12 @@ #include #include #include +#include +#include #include #include +#include #include #include @@ -26,6 +29,32 @@ private: RInside &R; // Grid members + static constexpr const char *grid_key = "Grid"; + + enum class GridMembers { + PQC_SCRIPT_STRING, + PQC_SCRIPT_FILE, + PQC_DB_STRING, + PQC_DB_FILE, + GRID_DEF, + GRID_SIZE, + CONSTANT_CELLS, + POROSITY, + ENUM_SIZE + }; + + static constexpr std::size_t size_GridMembers = + static_cast(InitialList::GridMembers::ENUM_SIZE); + + static constexpr std::array + GridMembersString = {"pqc_in_string", "pqc_in_file", "pqc_db_string", + "pqc_db_file", "grid_def", "grid_size", + "constant_cells", "porosity"}; + + constexpr const char *getGridMemberString(GridMembers member) const { + return GridMembersString[static_cast(member)]; + } + void initGrid(const Rcpp::List &grid_input); std::uint8_t dim; @@ -49,6 +78,9 @@ private: IPhreeqcPOET::ModulesArray module_sizes; // Diffusion members + + static constexpr const char *diffusion_key = "Diffusion"; + void initDiffusion(const Rcpp::List &diffusion_input); Rcpp::List boundaries;