xo-umbrella2/xo-process/include/xo/process/Realization2.hpp
Roland Conybeare 81a8a3dd84 git subrepo clone (merge) git@github.com:Rconybea/xo-process.git xo-process
subrepo:
  subdir:   "xo-process"
  merged:   "ff603471"
upstream:
  origin:   "git@github.com:Rconybea/xo-process.git"
  branch:   "main"
  commit:   "ff603471"
git-subrepo:
  version:  "0.4.9"
  origin:   "???"
  commit:   "???"
2026-06-06 22:17:23 -04:00

91 lines
2.9 KiB
C++

/* file Realization2.hpp
*
* author: Roland Conybeare, Nov 2022
*/
#pragma once
#include "AbstractRealization.hpp"
#include "xo/reflect/Reflect.hpp"
//#include "time/Time.hpp"
namespace xo {
namespace process {
template<typename T>
class Realization2 : public AbstractRealization {
}; /*Realization2*/
/* Rstate: state needed to trace unfolding of a process
* realization; will be process-specific.
*
* Pattern like:
* StochasticProcess p
* Rstate rs
* Realization2 rz
*
* +----+ +----+
* | rz +----| rs |
* +--+-+ +----+
* | ^
* +----+ |
* | p | <----/
* +----+
*
* rz owns rs, sends it to p to be modified as p needs
* p knows type Rstate, initially creates it
* therefore also knows how to create its own realizations
*
*
* Require:
* - Process -isa-> Realizable2Process<T, Rstate>
*/
template<typename T, typename Rstate, typename Process>
class ProcessRealization2 : public Realization2<T> {
public:
using TaggedRcptr = reflect::TaggedRcptr;
using nanos = xo::time::nanos;
public:
ProcessRealization2(Rstate const & rstate, rp<Process> const & process)
: rstate_{rstate}, process_{process} {}
ProcessRealization2(Rstate && rstate, rp<Process> const & process)
: rstate_{std::move(rstate)}, process_{process} {}
Rstate const & rstate() const { return rstate_; }
rp<Process> const & process() const { return process_; }
/* sample process at point .rstate.tk + dt
* Require:
* - dt >= 0
*/
void advance_dt(nanos dt) {
this->process_->rstate_sample_inplace(dt, &(this->rstate_));
} /*advance_dt*/
// ----- inherited from AbstractRealization -----
virtual rp<AbstractStochasticProcess> stochastic_process() const override {
return process_;
} /*stochastic_process*/
// ----- inherited from SelfTagging -----
virtual TaggedRcptr self_tp() override { return reflect::Reflect::make_rctp(this); }
private:
/* realization state
* this type is determined by .process;
* sufficient state to develop faithful realization
*/
Rstate rstate_;
/* process (set of paths + probability measure);
* *this coordinates with .process to constructively samples one such path
*/
rp<Process> process_;
}; /*ProcessRealization2*/
} /*namespace process*/
} /*namespace xo*/
/* end Realization2.hpp */