FinanceSim 0.1.0
Financial Simulation Library
Loading...
Searching...
No Matches
income_base.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "core/model.hpp"
4
5namespace financesim {
6
9class IncomeBase : public Model {
10public:
11 IncomeBase(std::string id, std::string name, Schedule schedule);
12 virtual ~IncomeBase() = default;
13
14 const std::string& id() const override { return id_; }
15 const std::string& name() const override { return name_; }
16 const Schedule& schedule() const override { return schedule_; }
17
18 void initialize(EventBus& bus) override;
19 void update(SimTime time) override;
20 void finalize() override;
21 void reset() override;
22
23protected:
24 EventBus& bus() { return *bus_; }
25
26 template<typename EventType, typename... Args>
27 void emit(SimTime time, Args&&... args) {
28 if (!bus_) {
29 return; // No bus attached, skip event emission
30 }
31 std::shared_ptr<const EventType> event = std::make_shared<EventType>(
32 time, id_, std::forward<Args>(args)...
33 );
35 }
36
37private:
38 std::string id_;
39 std::string name_;
41 EventBus* bus_ = nullptr;
42};
43
44} // namespace financesim
void publish(std::shared_ptr< const EventType > event)
Publish an event to all subscribers.
Definition event_bus.hpp:69
void update(SimTime time) override
void emit(SimTime time, Args &&... args)
void finalize() override
const Schedule & schedule() const override
Get the model's execution schedule.
const std::string & id() const override
Unique identifier for this model instance.
void reset() override
Reset model to initial state (for replay)
virtual ~IncomeBase()=default
void initialize(EventBus &bus) override
const std::string & name() const override
Human-readable name/description.
double SimTime
Represents a point in simulation time (continuous, in days)
Definition time.hpp:6