#ifndef RWSIM_TIMESBASE_H #define RWSIM_TIMESBASE_H #include #include namespace times { class BaseDistribution { public: virtual ~BaseDistribution() = default; BaseDistribution(std::string, double, std::mt19937_64&); explicit BaseDistribution(std::string, std::mt19937_64&); [[nodiscard]] double getTau() const { return m_tau; } void setTau(const double tau) { m_tau = tau; } [[nodiscard]] std::string getName() const { return m_name; } virtual void setParameters(const std::unordered_map&); [[nodiscard]] virtual std::unordered_map getParameters() const; virtual void initialize() = 0; virtual void draw_tau() = 0; [[nodiscard]] double tau_wait() const; [[nodiscard]] virtual std::string toString() const = 0; static BaseDistribution* createFromInput(const std::string& input, std::mt19937_64& rng); protected: std::string m_name{"BaseDistribution"}; double m_tau{1.}; double m_tau_jump{1.}; std::mt19937_64& m_rng; }; } #endif //RWSIM_TIMESBASE_H