25#ifndef OPENSWMM_ENGINE_OUTPUT_READER_HPP
26#define OPENSWMM_ENGINE_OUTPUT_READER_HPP
52 bool open(
const char* path);
60 bool is_open() const noexcept {
return file_ !=
nullptr; }
64 int version() const noexcept {
return version_; }
71 double start_date() const noexcept {
return start_date_; }
83 const char*
node_id(
int index)
const;
84 const char*
link_id(
int index)
const;
107 int start_period,
int end_period,
108 float* values)
const;
111 int start_period,
int end_period,
112 float* values)
const;
115 int start_period,
int end_period,
116 float* values)
const;
119 int start_period,
int end_period,
120 float* values)
const;
126 float* values,
int* count)
const;
130 float* values,
int* count)
const;
134 float* values,
int* count)
const;
142 static constexpr int32_t MAGIC_NUMBER = 516114522;
144 FILE* file_ =
nullptr;
155 int n_subcatch_vars_ = 0;
156 int n_node_vars_ = 0;
157 int n_link_vars_ = 0;
158 int n_system_vars_ = 0;
161 double start_date_ = 0.0;
162 int report_step_ = 0;
165 long id_start_pos_ = 0;
166 long input_start_pos_ = 0;
167 long output_start_pos_ = 0;
172 long bytes_per_period_ = 0;
175 std::vector<std::string> subcatch_ids_;
176 std::vector<std::string> node_ids_;
177 std::vector<std::string> link_ids_;
184 bool readVariableCodes();
186 bool readInt4(int32_t& value)
const;
187 bool readReal4(
float& value)
const;
188 bool readReal8(
double& value)
const;
191 long periodOffset(
int period)
const;
199 bool seekToVar(
int period,
int obj_type,
int obj_idx,
int var)
const;
Reads SWMM 5.x binary .out files produced by DefaultOutputPlugin.
Definition OutputReader.hpp:39
bool get_subcatch_attribute(int obj_idx, int period, float *values, int *count) const
All variables for one subcatchment at one period.
Definition OutputReader.cpp:214
int node_var_count() const noexcept
Definition OutputReader.hpp:76
bool get_subcatch_series(int obj_idx, int var, int start_period, int end_period, float *values) const
Definition OutputReader.cpp:151
OutputReader & operator=(const OutputReader &)=delete
int system_var_count() const noexcept
Definition OutputReader.hpp:78
int subcatch_var_count() const noexcept
Definition OutputReader.hpp:75
const char * subcatch_id(int index) const
Definition OutputReader.cpp:83
bool get_link_result(int period, int var, float *values) const
Read one link variable for all links at a period.
Definition OutputReader.cpp:126
double start_date() const noexcept
Definition OutputReader.hpp:71
bool get_link_attribute(int obj_idx, int period, float *values, int *count) const
All variables for one link at one period.
Definition OutputReader.cpp:242
int node_count() const noexcept
Definition OutputReader.hpp:67
void close()
Close the file and release resources.
Definition OutputReader.cpp:68
const char * link_id(int index) const
Definition OutputReader.cpp:93
const char * node_id(int index) const
Definition OutputReader.cpp:88
bool get_node_series(int obj_idx, int var, int start_period, int end_period, float *values) const
Definition OutputReader.cpp:166
bool get_link_series(int obj_idx, int var, int start_period, int end_period, float *values) const
Definition OutputReader.cpp:181
bool get_node_result(int period, int var, float *values) const
Read one node variable for all nodes at a period.
Definition OutputReader.cpp:114
int pollut_count() const noexcept
Definition OutputReader.hpp:69
int flow_units() const noexcept
Definition OutputReader.hpp:65
int link_count() const noexcept
Definition OutputReader.hpp:68
bool open(const char *path)
Open and parse the header/footer of a binary output file.
Definition OutputReader.cpp:34
bool get_system_result(int period, int var, float *value) const
Read one system variable at a period.
Definition OutputReader.cpp:138
int report_step() const noexcept
Definition OutputReader.hpp:72
int link_var_count() const noexcept
Definition OutputReader.hpp:77
bool get_period_time(int period, double *time) const
Get the simulation time for a given period.
Definition OutputReader.cpp:260
int version() const noexcept
Definition OutputReader.hpp:64
int subcatch_count() const noexcept
Definition OutputReader.hpp:66
bool is_open() const noexcept
Whether the reader has a file open and valid.
Definition OutputReader.hpp:60
bool get_node_attribute(int obj_idx, int period, float *values, int *count) const
All variables for one node at one period.
Definition OutputReader.cpp:228
OutputReader(const OutputReader &)=delete
int error_code() const noexcept
Definition OutputReader.hpp:73
~OutputReader()
Definition OutputReader.cpp:30
bool get_subcatch_result(int period, int var, float *values) const
Read one subcatch variable for all subcatchments at a period.
Definition OutputReader.cpp:102
bool get_system_series(int var, int start_period, int end_period, float *values) const
Definition OutputReader.cpp:196
int period_count() const noexcept
Definition OutputReader.hpp:70
Definition Controls.cpp:24