phylopomp
Phylodynamics for POMPs
Loading...
Searching...
No Matches
generics.h
Go to the documentation of this file.
1#ifndef _GENERICS_H_
2#define _GENERICS_H_
3
4#include "internal.h"
5
6template <class TYPE>
7SEXP ndeme (TYPE& X) {
8 return ScalarInteger(X.ndeme());
9}
10
11template <class TYPE>
12SEXP nsample (TYPE& X) {
13 return ScalarInteger(X.nsample());
14}
15
16template <class TYPE>
17SEXP nroot (TYPE& X) {
18 return ScalarInteger(X.nroot());
19}
20
21template <class TYPE>
22SEXP timezero (TYPE& X) {
23 return ScalarReal(X.timezero());
24}
25
26template <class TYPE>
27SEXP time (TYPE& X) {
28 return ScalarReal(X.time());
29}
30
32template <class TYPE>
33SEXP serial (const TYPE& X) {
34 SEXP out;
35 PROTECT(out = NEW_RAW(X.bytesize()));
36 X >> RAW(out);
37 UNPROTECT(1);
38 return out;
39}
40
42template <class TYPE>
43SEXP yaml (const TYPE& X) {
44 return mkString(X.yaml().c_str());
45}
46
48template <class TYPE>
49SEXP structure (const TYPE& X) {
50 return X.structure();
51}
52
54template <class TYPE>
55SEXP newick (const TYPE& X, bool extended) {
56 return mkString(X.newick(extended).c_str());
57}
58
60template <class TYPE>
61SEXP lineage_count (const TYPE& G) {
62 return G.lineage_count();
63}
64
66template <class TYPE>
67SEXP gendat (const TYPE& G) {
68 return G.gendat();
69}
70
72template<class TYPE>
73SEXP make (SEXP Params, SEXP IVPs, SEXP T0) {
74 SEXP o;
75 PROTECT(Params = AS_NUMERIC(Params));
76 PROTECT(IVPs = AS_NUMERIC(IVPs));
77 PROTECT(T0 = AS_NUMERIC(T0));
78 GetRNGstate();
79 TYPE X = *REAL(T0);
80 X.update_params(REAL(Params),LENGTH(Params));
81 X.update_IVPs(REAL(IVPs),LENGTH(IVPs));
82 X.rinit();
83 X.update_clocks();
84 PutRNGstate();
85 PROTECT(o = serial(X));
86 UNPROTECT(4);
87 return o;
88}
89
91template<class TYPE>
92SEXP revive (SEXP State, SEXP Params) {
93 SEXP o;
94 TYPE X = State;
95 PROTECT(Params = AS_NUMERIC(Params));
96 X.update_params(REAL(Params),LENGTH(Params));
97 PROTECT(o = serial(X));
98 UNPROTECT(2);
99 return o;
100}
101
103template<class TYPE>
104SEXP run (SEXP State, SEXP Tout) {
105 SEXP out;
106 TYPE X = State;
107 PROTECT(Tout = AS_NUMERIC(Tout));
108 GetRNGstate();
109 X.valid();
110 X.play(*REAL(Tout));
111 PutRNGstate();
112 PROTECT(out = serial(X));
113 UNPROTECT(2);
114 return out;
115}
116
117#define MAKEFN(X,TYPE) SEXP make ## X (SEXP Params, SEXP IVPs, SEXP T0) { \
118 return make<TYPE>(Params,IVPs,T0); \
119 } \
120
121#define REVIVEFN(X,TYPE) SEXP revive ## X (SEXP State, SEXP Params) { \
122 return revive<TYPE>(State,Params); \
123 } \
124
125#define RUNFN(X,TYPE) SEXP run ## X (SEXP State, SEXP Times) { \
126 return run<TYPE>(State,Times); \
127 } \
128
129#define YAMLFN(X,TYPE) SEXP yaml ## X (SEXP State) { \
130 return yaml<TYPE>(State); \
131 } \
132
133#define GENERICS(X,TYPE) \
134 extern "C" { \
135 \
136 MAKEFN(X,TYPE) \
137 \
138 REVIVEFN(X,TYPE) \
139 \
140 RUNFN(X,TYPE) \
141 \
142 YAMLFN(X,TYPE) \
143 \
144 } \
145
146#endif
SEXP ndeme(TYPE &X)
Definition generics.h:7
SEXP run(SEXP State, SEXP Tout)
run simulations
Definition generics.h:104
SEXP revive(SEXP State, SEXP Params)
refresh parameters
Definition generics.h:92
SEXP nroot(TYPE &X)
Definition generics.h:17
SEXP timezero(TYPE &X)
Definition generics.h:22
SEXP time(TYPE &X)
Definition generics.h:27
SEXP structure(const TYPE &X)
structure in R list format
Definition generics.h:49
SEXP serial(const TYPE &X)
binary serialization
Definition generics.h:33
SEXP gendat(const TYPE &G)
data-frame format
Definition generics.h:67
SEXP yaml(const TYPE &X)
human/machine readable output
Definition generics.h:43
SEXP lineage_count(const TYPE &G)
number of lineages through time
Definition generics.h:61
SEXP make(SEXP Params, SEXP IVPs, SEXP T0)
initialization
Definition generics.h:73
SEXP nsample(TYPE &X)
Definition generics.h:12
SEXP newick(const TYPE &X, bool extended)
tree in newick format
Definition generics.h:55