31 SEXP S, SEXP P, SEXP O, SEXP C)
35 SEXP sidx, pidx, oidx, cidx;
37 *
mode = *(INTEGER(GET_SLOT(pfun,install(
"mode"))));
43 PROTECT(f = GET_SLOT(pfun,install(
"R.fun"))); nprotect++;
49 if (*(LOGICAL(gnsi))) {
52 PROTECT(nf = GET_SLOT(pfun,install(
"native.fun")));
53 PROTECT(pack = GET_SLOT(pfun,install(
"PACKAGE")));
56 if (LENGTH(pack) < 1) {
57 PROTECT(pack = mkString(
"")); nprotect++;
63 PROTECT(nsi = eval(PROTECT(lang3(install(
"getNativeSymbolInfo"),nf,pack)),R_BaseEnv));
69 const char *fname, *pkg;
70 fname = (
const char *) CHAR(STRING_ELT(nf,0));
71 pkg = (
const char *) CHAR(STRING_ELT(pack,0));
73 fn = R_GetCCallable(pkg,fname);
74 PROTECT(f = R_MakeExternalPtrFn(
fn,R_NilValue,R_NilValue)); nprotect++;
78 SET_SLOT(pfun,install(
"address"),f);
81 PROTECT(sidx =
name_index(S,pfun,
"statenames",
"state variables")); nprotect++;
82 SET_SLOT(pfun,install(
"stateindex"),sidx);
86 PROTECT(pidx =
name_index(P,pfun,
"paramnames",
"parameters")); nprotect++;
87 SET_SLOT(pfun,install(
"paramindex"),pidx);
91 PROTECT(oidx =
name_index(O,pfun,
"obsnames",
"observables")); nprotect++;
92 SET_SLOT(pfun,install(
"obsindex"),oidx);
96 PROTECT(cidx =
name_index(C,pfun,
"covarnames",
"covariates")); nprotect++;
97 SET_SLOT(pfun,install(
"covarindex"),cidx);
102 PROTECT(f = GET_SLOT(pfun,install(
"address"))); nprotect++;
110 PROTECT(f = R_NilValue); nprotect++;
SEXP pomp_fun_handler(SEXP pfun, SEXP gnsi, pompfunmode *mode, SEXP S, SEXP P, SEXP O, SEXP C)