hydrobricks
Loading...
Searching...
No Matches
Splitter.h
1#ifndef HYDROBRICKS_SPLITTER_H
2#define HYDROBRICKS_SPLITTER_H
3
4#include <memory>
5
6#include "Flux.h"
7#include "Forcing.h"
8#include "Includes.h"
9#include "SettingsModel.h"
10
11class HydroUnit;
12
13class Splitter : public wxObject {
14 public:
15 explicit Splitter();
16
17 ~Splitter() override = default;
18
25 static Splitter* Factory(const SplitterSettings& splitterSettings);
26
32 [[nodiscard]] virtual bool IsValid() const = 0;
33
40 virtual void Validate() const;
41
47 virtual void SetParameters(const SplitterSettings& splitterSettings) = 0;
48
56 const float* GetParameterValuePointer(const SplitterSettings& splitterSettings, const string& name);
57
63 virtual void AttachForcing(Forcing*) {
64 throw ShouldNotHappen("Splitter::AttachForcing - Should not be called (virtual)");
65 }
66
72 void AttachFluxIn(Flux* flux) {
73 wxASSERT(flux);
74 _inputs.push_back(flux);
75 }
76
82 void AttachFluxOut(std::unique_ptr<Flux> flux) {
83 wxASSERT(flux);
84 _outputs.push_back(std::move(flux));
85 }
86
92 virtual double* GetValuePointer(const string& name) = 0;
93
97 virtual void Compute() = 0;
98
104 const string& GetName() const {
105 return _name;
106 }
107
113 void SetName(const string& name) {
114 _name = name;
115 }
116
117 protected:
118 string _name;
119 vector<Flux*> _inputs; // non-owning: owned by processes
120 std::vector<std::unique_ptr<Flux>> _outputs; // owning
121};
122
123#endif // HYDROBRICKS_SPLITTER_H
Definition Flux.h:9
Definition Forcing.h:7
Definition HydroUnit.h:18
Exception for code paths that should never be reached.
Definition Exceptions.h:147
Definition Splitter.h:13
virtual void AttachForcing(Forcing *)
Definition Splitter.h:63
virtual double * GetValuePointer(const string &name)=0
virtual void Compute()=0
virtual void SetParameters(const SplitterSettings &splitterSettings)=0
virtual bool IsValid() const =0
virtual void Validate() const
Definition Splitter.cpp:53
void AttachFluxIn(Flux *flux)
Definition Splitter.h:72
const string & GetName() const
Definition Splitter.h:104
void AttachFluxOut(std::unique_ptr< Flux > flux)
Definition Splitter.h:82
void SetName(const string &name)
Definition Splitter.h:113
static Splitter * Factory(const SplitterSettings &splitterSettings)
Definition Splitter.cpp:25
const float * GetParameterValuePointer(const SplitterSettings &splitterSettings, const string &name)
Definition Splitter.cpp:42
Definition SettingsModel.h:38