phylopomp
Phylodynamics for POMPs
Loading...
Searching...
No Matches
structure.cc
Go to the documentation of this file.
1
2
3#include "ball.h"
4#include "pocket.h"
5#include "node.h"
6#include "nodeseq.h"
7#include "genealogy.h"
8#include "internal.h"
9
10#include <R.h>
11#include <Rmath.h>
12#include <Rdefines.h>
13
14SEXP
16(void) const
17{
18 SEXP O, On, Name, Color, Deme;
19 int size = (is(black)) ? 3 : 2;
20 PROTECT(O = NEW_LIST(size));
21 PROTECT(On = NEW_CHARACTER(size));
22 PROTECT(Name = NEW_INTEGER(1));
23 *INTEGER(Name) = int(uniq);
24 PROTECT(Color = NEW_CHARACTER(1));
25 SET_STRING_ELT(Color,0,mkChar(color_symbol().c_str()));
26 set_list_elem(O,On,Name,"name",0);
27 set_list_elem(O,On,Color,"color",1);
28 if (is(black)) {
29 PROTECT(Deme = NEW_INTEGER(1));
30 *INTEGER(Deme) = int(deme());
31 set_list_elem(O,On,Deme,"deme",2);
32 UNPROTECT(1);
33 }
34 SET_NAMES(O,On);
35 UNPROTECT(4);
36 return O;
37}
38
39SEXP
41(void) const
42{
43 SEXP o;
44 PROTECT(o = NEW_LIST(size()));
45 int k = 0;
46 for (ball_rev_it i = crbegin(); i != crend(); i++) {
47 SET_ELEMENT(o,k++,(*i)->structure());
48 }
49 UNPROTECT(1);
50 return o;
51}
52
53SEXP
55(void) const
56{
57 SEXP O, On;
58 PROTECT(O = NEW_LIST(4));
59 PROTECT(On = NEW_CHARACTER(4));
60 set_list_elem(O,On,ScalarInteger(int(uniq)),"name",0);
61 set_list_elem(O,On,ScalarReal(double(slate)),"time",1);
62 set_list_elem(O,On,ScalarInteger(int(deme())),"deme",2);
63 set_list_elem(O,On,pocket_t::structure(),"pocket",3);
64 SET_NAMES(O,On);
65 UNPROTECT(2);
66 return O;
67}
68
69SEXP
71(void) const
72{
73 SEXP Nodes;
74 PROTECT(Nodes = NEW_LIST(size()));
75 int k = 0;
76 for (node_t *p : *this) {
77 SET_ELEMENT(Nodes,k++,p->structure());
78 }
79 UNPROTECT(1);
80 return Nodes;
81}
82
83SEXP
85(void) const
86{
87 SEXP O, On, T0, Time, Nodes, Ndeme;
88 PROTECT(O = NEW_LIST(4));
89 PROTECT(On = NEW_CHARACTER(4));
90 PROTECT(Time = NEW_NUMERIC(1));
91 *REAL(Time) = double(time());
92 PROTECT(T0 = NEW_NUMERIC(1));
93 *REAL(T0) = double(timezero());
94 PROTECT(Ndeme = NEW_INTEGER(1));
95 *INTEGER(Ndeme) = int(ndeme());
96 PROTECT(Nodes = nodeseq_t::structure());
97 set_list_elem(O,On,Time,"time",0);
98 set_list_elem(O,On,T0,"t0",1);
99 set_list_elem(O,On,Ndeme,"ndeme",2);
100 set_list_elem(O,On,Nodes,"nodes",3);
101 SET_NAMES(O,On);
102 UNPROTECT(6);
103 return O;
104}
@ black
Definition ball.h:12
name_t deme(void) const
view deme
Definition ball.h:84
name_t uniq
Definition ball.h:35
SEXP structure(void) const
R list description.
Definition structure.cc:16
bool is(color_t c) const
is a given ball of the given color?
Definition ball.h:115
string_t color_symbol(void) const
machine-readable color symbols
Definition ball.h:123
SEXP structure(void) const
R list description.
Definition structure.cc:85
size_t ndeme(void) const
number of demes
Definition genealogy.h:59
slate_t & timezero(void)
view/set zero time.
Definition genealogy.h:153
slate_t & time(void)
view/set current time.
Definition genealogy.h:145
Encodes a genealogical node.
Definition node.h:21
SEXP structure(void) const
R list description.
Definition structure.cc:55
name_t deme(void) const
view deme
Definition node.h:96
name_t uniq
Definition node.h:32
slate_t slate
Definition node.h:33
SEXP structure(void) const
R list description.
Definition structure.cc:71
SEXP structure(void) const
R list description.
Definition structure.cc:41
static int set_list_elem(SEXP list, SEXP names, SEXP element, const char *name, int pos)
Definition internal.h:76
std::set< ball_t *, ball_order >::const_reverse_iterator ball_rev_it
Definition pocket.h:25