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 {
14 public:
15 explicit Splitter();
16
17 virtual ~Splitter() = default;
18
25 static std::unique_ptr<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
73 virtual void SetHydroUnitProperties(HydroUnit* /*unit*/) {}
74
80 void AttachFluxIn(Flux* flux) {
81 assert(flux);
82 _inputs.push_back(flux);
83 }
84
90 void AttachFluxOut(std::unique_ptr<Flux> flux) {
91 assert(flux);
92 _outputs.push_back(std::move(flux));
93 }
94
100 virtual double* GetValuePointer(const string& name) = 0;
101
105 virtual void Compute() = 0;
106
112 const string& GetName() const {
113 return _name;
114 }
115
121 void SetName(const string& name) {
122 _name = name;
123 }
124
125 protected:
126 string _name;
127 vector<Flux*> _inputs; // non-owning: owned by processes
128 std::vector<std::unique_ptr<Flux>> _outputs; // owning
129};
130
131#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:133
Definition Splitter.h:13
static std::unique_ptr< Splitter > Factory(const SplitterSettings &splitterSettings)
Definition Splitter.cpp:69
virtual void AttachForcing(Forcing *)
Definition Splitter.h:63
virtual void SetHydroUnitProperties(HydroUnit *)
Definition Splitter.h:73
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:90
void AttachFluxIn(Flux *flux)
Definition Splitter.h:80
const string & GetName() const
Definition Splitter.h:112
void AttachFluxOut(std::unique_ptr< Flux > flux)
Definition Splitter.h:90
void SetName(const string &name)
Definition Splitter.h:121
const float * GetParameterValuePointer(const SplitterSettings &splitterSettings, const string &name)
Definition Splitter.cpp:79
Definition SettingsModel.h:38