FireSTARR
Loading...
Searching...
No Matches
Observer.h
1/* Copyright (c) Queen's Printer for Ontario, 2020. */
2/* Copyright (c) His Majesty the King in Right of Canada as represented by the Minister of Natural Resources, 2025. */
3
4/* SPDX-License-Identifier: AGPL-3.0-or-later */
5
6#pragma once
7#include <memory>
8#include <string>
9#include "Event.h"
10#include "GridMap.h"
11#include "Scenario.h"
12namespace fs::sim
13{
14class Event;
15class Scenario;
20{
21public:
22 virtual ~IObserver() = default;
23 IObserver(const IObserver& rhs) = delete;
24 IObserver(IObserver&& rhs) = delete;
25 IObserver& operator=(const IObserver& rhs) = delete;
26 IObserver& operator=(IObserver&& rhs) = delete;
32 virtual void handleEvent(const Event& event) = 0;
39 virtual void save(const string& dir, const string& base_name) const = 0;
44 virtual void reset() = 0;
51 static string makeName(const string& base_name, const string& suffix);
52protected:
53 IObserver() = default;
54};
59template <typename T>
61 : public IObserver
62{
63public:
64 ~MapObserver() override = default;
65 MapObserver(const MapObserver& rhs) = delete;
66 MapObserver(MapObserver&& rhs) = delete;
67 MapObserver& operator=(const MapObserver& rhs) = delete;
68 MapObserver& operator=(MapObserver&& rhs) = delete;
75 MapObserver(const Scenario& scenario, T nodata, string suffix)
76 : map_(scenario.model().environment().makeMap<T>(nodata)),
77 scenario_(scenario),
78 suffix_(std::move(suffix))
79 {
80 }
86 [[nodiscard]] virtual T getValue(const Event& event) const = 0;
91 void handleEvent(const Event& event) override
92 {
93 map_->set(event.cell(), getValue(event));
94 }
100 void save(const string& dir, const string& base_name) const override
101 {
102 map_->saveToFile(dir, makeName(base_name, suffix_));
103 }
107 void reset() noexcept override
108 {
109 map_->clear();
110 }
111protected:
115 unique_ptr<data::GridMap<T>> map_;
123 string suffix_;
124};
129 : public MapObserver<DurationSize>
130{
131public:
132 ~ArrivalObserver() override = default;
133 ArrivalObserver(const ArrivalObserver& rhs) = delete;
134 ArrivalObserver(ArrivalObserver&& rhs) = delete;
135 ArrivalObserver& operator=(const ArrivalObserver& rhs) = delete;
136 ArrivalObserver& operator=(ArrivalObserver&& rhs) = delete;
141 explicit ArrivalObserver(const Scenario& scenario);
142 [[nodiscard]] DurationSize getValue(const Event& event) const noexcept override;
143};
147class SourceObserver final
148 : public MapObserver<CellIndex>
149{
150public:
151 ~SourceObserver() override = default;
152 SourceObserver(const SourceObserver& rhs) = delete;
153 SourceObserver(SourceObserver&& rhs) = delete;
154 SourceObserver& operator=(const SourceObserver& rhs) = delete;
155 SourceObserver& operator=(SourceObserver&& rhs) = delete;
160 explicit SourceObserver(const Scenario& scenario);
161 [[nodiscard]] CellIndex getValue(const Event& event) const noexcept override;
162};
167 : public MapObserver<IntensitySize>
168{
169public:
170 ~IntensityObserver() override = default;
171 IntensityObserver(const IntensityObserver& rhs) = delete;
172 IntensityObserver(IntensityObserver&& rhs) = delete;
173 IntensityObserver& operator=(const IntensityObserver& rhs) = delete;
174 IntensityObserver& operator=(IntensityObserver&& rhs) = delete;
180 explicit IntensityObserver(const Scenario& scenario) noexcept;
181 [[nodiscard]] IntensitySize getValue(const Event& event) const noexcept override;
187 void save(const string& dir, const string& base_name) const override;
188};
189}
Tracks when fire initially arrives in a Cell.
Definition Observer.h:130
DurationSize getValue(const Event &event) const noexcept override
Function that returns the value we care about regarding the Event.
Definition Observer.cpp:38
A specific Event scheduled in a specific Scenario.
Definition Event.h:19
constexpr const Cell & cell() const
Cell Event takes place in.
Definition Event.h:224
Interface for observers that get notified when cells burn so they can track things.
Definition Observer.h:20
virtual void reset()=0
Clear all observations.
virtual void handleEvent(const Event &event)=0
Handle given event.
virtual void save(const string &dir, const string &base_name) const =0
Save observations.
static string makeName(const string &base_name, const string &suffix)
Make name to save file as.
Definition Observer.cpp:10
Tracks the intensity that Cells burn at.
Definition Observer.h:168
void save(const string &dir, const string &base_name) const override
Save observations.
Definition Observer.cpp:64
IntensitySize getValue(const Event &event) const noexcept override
Function that returns the value we care about regarding the Event.
Definition Observer.cpp:60
An IObserver that tracks notification data using a GridMap.
Definition Observer.h:62
unique_ptr< data::GridMap< T > > map_
Map of observations.
Definition Observer.h:115
void reset() noexcept override
Clear all observations.
Definition Observer.h:107
virtual T getValue(const Event &event) const =0
Function that returns the value we care about regarding the Event.
string suffix_
Suffix to append to file during save.
Definition Observer.h:123
void handleEvent(const Event &event) override
Handle given event.
Definition Observer.h:91
MapObserver(const Scenario &scenario, T nodata, string suffix)
Keeps observations in a map.
Definition Observer.h:75
const Scenario & scenario_
Scenario being observed.
Definition Observer.h:119
void save(const string &dir, const string &base_name) const override
Save observations.
Definition Observer.h:100
A single Scenario in an Iteration using a specific FireWeather stream.
Definition Scenario.h:38
Tracks source Cell that fire arrived in Cell from.
Definition Observer.h:149
CellIndex getValue(const Event &event) const noexcept override
Function that returns the value we care about regarding the Event.
Definition Observer.cpp:52