1 #include <config.h>
2 #include <model/MonitorControl.h>
3 #include <model/Monitor.h>
4 
5 #include <stdexcept>
6 
7 using std::invalid_argument;
8 using std::string;
9 
10 namespace jags {
11 
MonitorControl(Monitor * monitor,unsigned int start,unsigned int thin)12 MonitorControl::MonitorControl (Monitor *monitor, unsigned int start,
13 				unsigned int thin)
14     : _monitor(monitor), _start(start), _thin(thin), _niter(0)
15 {
16    if (thin == 0) {
17 	throw invalid_argument("Illegal thinning interval");
18     }
19 }
20 
start() const21 unsigned int MonitorControl::start() const
22 {
23     return _start;
24 }
25 
end() const26 unsigned int MonitorControl::end() const
27 {
28     return _start + _thin * _niter;
29 }
30 
niter() const31 unsigned int MonitorControl::niter() const
32 {
33     return _niter;
34 }
35 
thin() const36 unsigned int MonitorControl::thin() const
37 {
38     return _thin;
39 }
40 
monitor() const41 Monitor const *MonitorControl::monitor() const
42 {
43     return _monitor;
44 }
45 
update(unsigned int iteration)46 void MonitorControl::update(unsigned int iteration)
47 {
48     if (iteration < _start || (iteration - _start) % _thin != 0) {
49 	return;
50     }
51     else {
52 	_monitor->update();
53 	_niter++;
54     }
55 }
56 
operator ==(MonitorControl const & rhs) const57 bool MonitorControl::operator==(MonitorControl const &rhs) const
58 {
59     return (_monitor == rhs._monitor &&
60 	    _start == rhs._start &&
61 	    _thin == rhs._thin &&
62 	    _niter == rhs._niter);
63 }
64 
65 } //namespace jags
66