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)12MonitorControl::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() const21unsigned int MonitorControl::start() const 22 { 23 return _start; 24 } 25 end() const26unsigned int MonitorControl::end() const 27 { 28 return _start + _thin * _niter; 29 } 30 niter() const31unsigned int MonitorControl::niter() const 32 { 33 return _niter; 34 } 35 thin() const36unsigned int MonitorControl::thin() const 37 { 38 return _thin; 39 } 40 monitor() const41Monitor const *MonitorControl::monitor() const 42 { 43 return _monitor; 44 } 45 update(unsigned int iteration)46void 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) const57bool 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