From 906b503b40e9c6e2bb3798641af86d0a00752ab9 Mon Sep 17 00:00:00 2001 From: Matthew Fidler Date: Wed, 23 Oct 2024 13:12:51 -0500 Subject: [PATCH] Use the rxInner global def only and make this a R like fun --- src/poped.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/poped.cpp b/src/poped.cpp index 3f76ecb..200ec59 100644 --- a/src/poped.cpp +++ b/src/poped.cpp @@ -276,7 +276,9 @@ struct rxSolveF { }; rxSolveF rxInner; -SEXP rxUpdateFuns(SEXP trans, rxSolveF *inner){ + +SEXP rxUpdateFn(SEXP trans) { + rxSolveF *inner = &rxInner; const char *lib, *s_dydt, *s_calc_jac, *s_calc_lhs, *s_inis, *s_dydt_lsoda_dum, *s_dydt_jdum_lsoda, *s_ode_solver_solvedata, *s_ode_solver_get_solvedata, *s_dydt_liblsoda; lib = CHAR(STRING_ELT(trans, 0)); @@ -311,6 +313,7 @@ SEXP rxUpdateFuns(SEXP trans, rxSolveF *inner){ return R_NilValue; } + void rxClearFuns(rxSolveF *inner){ inner->calc_lhs = NULL; inner->dydt = NULL; @@ -374,7 +377,7 @@ RObject popedSetup(Environment e, Environment eglobal, bool full) { List mvp = rxode2::rxModelVars_(model); CharacterVector trans = mvp["trans"]; _popedEglobal["curTrans"] = trans; - rxUpdateFuns(as(trans), &rxInner); + rxUpdateFn(as(trans)); // initial value of parameters CharacterVector pars = mvp[RxMv_params]; @@ -457,7 +460,7 @@ static inline bool solveCached(NumericVector &theta, int &id) { } void popedSolveFidMat(arma::mat &matMT, NumericVector &theta, int id, int nrow, int nend) { - rxUpdateFuns(_popedEglobal["curTrans"], &rxInner); + rxUpdateFn(_popedEglobal["curTrans"]); // arma::vec ret(retD, nobs, false, true); rx_solving_options_ind *ind = updateParamRetInd(theta, id); rx_solving_options *op = getSolvingOptions(rx); @@ -509,7 +512,7 @@ Rcpp::DataFrame popedSolveIdME(NumericVector &theta, NumericVector &mt, IntegerVector &ms, int nend, int id, int totn) { if (solveCached(theta, id)) return(as(_popedE["s"])); - rxUpdateFuns(_popedEglobal["curTrans"], &rxInner); + rxUpdateFn(_popedEglobal["curTrans"]); NumericVector t(totn); arma::vec f(totn); arma::vec w(totn);