41#ifndef OPENSWMM_ENGINE_OUTPUT_READER_HPP
42#define OPENSWMM_ENGINE_OUTPUT_READER_HPP
68 bool open(
const char* path);
98 bool is_live() const noexcept {
return live_; }
106 bool is_open() const noexcept {
return file_ !=
nullptr; }
110 int version() const noexcept {
return version_; }
129 const char*
node_id(
int index)
const;
130 const char*
link_id(
int index)
const;
168 int start_period,
int end_period,
169 float* values)
const;
172 int start_period,
int end_period,
173 float* values)
const;
176 int start_period,
int end_period,
177 float* values)
const;
180 int start_period,
int end_period,
181 float* values)
const;
187 float* values,
int* count)
const;
191 float* values,
int* count)
const;
195 float* values,
int* count)
const;
213 static constexpr int32_t MAGIC_NUMBER = 516114522;
215 FILE* file_ =
nullptr;
226 int n_subcatch_vars_ = 0;
227 int n_node_vars_ = 0;
228 int n_link_vars_ = 0;
229 int n_system_vars_ = 0;
232 double start_date_ = 0.0;
233 int report_step_ = 0;
236 long id_start_pos_ = 0;
237 long input_start_pos_ = 0;
238 long output_start_pos_ = 0;
243 long bytes_per_period_ = 0;
249 std::vector<std::string> subcatch_ids_;
250 std::vector<std::string> node_ids_;
251 std::vector<std::string> link_ids_;
252 std::vector<std::string> pollut_ids_;
259 bool readVariableCodes();
261 bool readInt4(int32_t& value)
const;
262 bool readReal4(
float& value)
const;
263 bool readReal8(
double& value)
const;
266 long periodOffset(
int period)
const;
274 bool seekToVar(
int period,
int obj_type,
int obj_idx,
int var)
const;
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:314
int node_var_count() const noexcept
Definition OutputReader.hpp:122
bool get_subcatch_series(int obj_idx, int var, int start_period, int end_period, float *values) const
Definition OutputReader.cpp:251
bool is_live() const noexcept
True while opened via openLive() and the footer has not yet been seen.
Definition OutputReader.hpp:98
bool get_node_stat_max_depth(int node_idx, double *value) const
Definition OutputReader.cpp:653
OutputReader & operator=(const OutputReader &)=delete
int system_var_count() const noexcept
Definition OutputReader.hpp:124
int subcatch_var_count() const noexcept
Definition OutputReader.hpp:121
bool get_node_stat_max_overflow(int node_idx, double *value) const
Definition OutputReader.cpp:670
bool get_node_stat_vol_flooded(int node_idx, double *value) const
Definition OutputReader.cpp:687
const char * subcatch_id(int index) const
Definition OutputReader.cpp:177
bool get_link_result(int period, int var, float *values) const
Read one link variable for all links at a period.
Definition OutputReader.cpp:226
double start_date() const noexcept
Definition OutputReader.hpp:117
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:342
int node_count() const noexcept
Definition OutputReader.hpp:113
const char * pollut_id(int index) const
Species (pollutant) ID at a column index, or nullptr.
Definition OutputReader.cpp:192
void close()
Close the file and release resources.
Definition OutputReader.cpp:161
const char * link_id(int index) const
Definition OutputReader.cpp:187
bool get_node_stat_time_flooded(int node_idx, double *value) const
Definition OutputReader.cpp:710
const char * node_id(int index) const
Definition OutputReader.cpp:182
bool get_node_series(int obj_idx, int var, int start_period, int end_period, float *values) const
Definition OutputReader.cpp:266
bool get_link_series(int obj_idx, int var, int start_period, int end_period, float *values) const
Definition OutputReader.cpp:281
bool get_node_result(int period, int var, float *values) const
Read one node variable for all nodes at a period.
Definition OutputReader.cpp:214
int pollut_count() const noexcept
Definition OutputReader.hpp:115
int flow_units() const noexcept
Definition OutputReader.hpp:111
int link_count() const noexcept
Definition OutputReader.hpp:114
bool open(const char *path)
Open and parse the header/footer of a binary output file.
Definition OutputReader.cpp:50
bool get_system_result(int period, int var, float *value) const
Read one system variable at a period.
Definition OutputReader.cpp:238
int report_step() const noexcept
Definition OutputReader.hpp:118
int link_var_count() const noexcept
Definition OutputReader.hpp:123
int refresh()
Re-count periods on a live file.
Definition OutputReader.cpp:120
bool get_period_time(int period, double *time) const
Get the simulation time for a given period.
Definition OutputReader.cpp:360
int version() const noexcept
Definition OutputReader.hpp:110
int subcatch_count() const noexcept
Definition OutputReader.hpp:112
bool is_open() const noexcept
Whether the reader has a file open and valid.
Definition OutputReader.hpp:106
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:328
bool openLive(const char *path)
Open a file that is still being written (no footer yet).
Definition OutputReader.cpp:84
OutputReader(const OutputReader &)=delete
int error_code() const noexcept
Definition OutputReader.hpp:119
~OutputReader()
Definition OutputReader.cpp:46
bool get_subcatch_result(int period, int var, float *values) const
Read one subcatch variable for all subcatchments at a period.
Definition OutputReader.cpp:202
bool get_system_series(int var, int start_period, int end_period, float *values) const
Definition OutputReader.cpp:296
int period_count() const noexcept
Definition OutputReader.hpp:116
Definition NodeCoupling.cpp:16