libdballe 9.13
summary.h
1#ifndef DBALLE_DB_SUMMARY_H
2#define DBALLE_DB_SUMMARY_H
3
4#include <dballe/core/defs.h>
5#include <dballe/core/fwd.h>
6#include <dballe/types.h>
7#include <functional>
8#include <vector>
9
10namespace dballe {
11namespace db {
12namespace summary {
13
17struct VarDesc
18{
19 dballe::Level level;
20 dballe::Trange trange;
21 wreport::Varcode varcode;
22
23 VarDesc() = default;
24
25 VarDesc(const dballe::Level& level, const dballe::Trange& trange,
26 wreport::Varcode varcode)
27 : level(level), trange(trange), varcode(varcode)
28 {
29 }
30
31 VarDesc(const VarDesc&) = default;
32
33 bool operator==(const VarDesc& o) const
34 {
35 return std::tie(level, trange, varcode) ==
36 std::tie(o.level, o.trange, o.varcode);
37 }
38 bool operator!=(const VarDesc& o) const
39 {
40 return std::tie(level, trange, varcode) !=
41 std::tie(o.level, o.trange, o.varcode);
42 }
43 bool operator<(const VarDesc& o) const
44 {
45 return std::tie(level, trange, varcode) <
46 std::tie(o.level, o.trange, o.varcode);
47 }
48 bool operator<=(const VarDesc& o) const
49 {
50 return std::tie(level, trange, varcode) <=
51 std::tie(o.level, o.trange, o.varcode);
52 }
53 bool operator>(const VarDesc& o) const
54 {
55 return std::tie(level, trange, varcode) >
56 std::tie(o.level, o.trange, o.varcode);
57 }
58 bool operator>=(const VarDesc& o) const
59 {
60 return std::tie(level, trange, varcode) >=
61 std::tie(o.level, o.trange, o.varcode);
62 }
63};
64
65} // namespace summary
66
70template <typename Station> class BaseSummary
71{
72public:
73 typedef Station station_type;
74
75 BaseSummary();
76 BaseSummary(const BaseSummary&) = delete;
77 BaseSummary(BaseSummary&&) = delete;
78 BaseSummary& operator=(const BaseSummary&) = delete;
79 BaseSummary& operator=(BaseSummary&&) = delete;
80 virtual ~BaseSummary();
81
82 // virtual bool operator==(const BaseSummary<Station>& o) const = 0;
83
84 virtual bool stations(std::function<bool(const Station&)>) const = 0;
85 virtual bool reports(std::function<bool(const std::string&)>) const = 0;
86 virtual bool levels(std::function<bool(const Level&)>) const = 0;
87 virtual bool tranges(std::function<bool(const Trange&)>) const = 0;
88 virtual bool
89 varcodes(std::function<bool(const wreport::Varcode&)>) const = 0;
90
97 virtual Datetime datetime_min() const = 0;
98 virtual Datetime datetime_max() const = 0;
99 virtual unsigned data_count() const = 0;
100
111 virtual std::shared_ptr<dballe::CursorSummary>
112 query_summary(const Query& query) const;
113
115 virtual void clear() = 0;
116
118 virtual void add(const Station& station, const summary::VarDesc& vd,
119 const dballe::DatetimeRange& dtrange, size_t count) = 0;
120
122 virtual void add_cursor(const dballe::CursorSummary& cur);
123
125 virtual void add_message(const dballe::Message& message,
126 bool station_data = true, bool data = true);
127
129 virtual void
130 add_messages(const std::vector<std::shared_ptr<dballe::Message>>& messages,
131 bool station_data = true, bool data = true);
132
134 virtual void add_summary(const BaseSummary<dballe::Station>& summary);
135
137 virtual void add_summary(const BaseSummary<dballe::DBStation>& summary);
138
140 virtual void add_filtered(const BaseSummary<Station>& summary,
141 const dballe::Query& query);
142
144 virtual void commit() = 0;
145
148 virtual bool
149 iter(std::function<bool(const Station&, const summary::VarDesc&,
150 const DatetimeRange&, size_t)>) const = 0;
151
154 virtual bool
156 std::function<bool(const Station&, const summary::VarDesc&,
157 const DatetimeRange&, size_t)>) const = 0;
158
160 virtual void to_json(core::JSONWriter& writer) const = 0;
161
163 virtual void load_json(core::json::Stream& in);
164
165 DBALLE_TEST_ONLY virtual void dump(FILE* out) const = 0;
166};
167
171typedef BaseSummary<dballe::Station> Summary;
172
176typedef BaseSummary<dballe::DBStation> DBSummary;
177
178extern template class BaseSummary<dballe::Station>;
179extern template class BaseSummary<dballe::DBStation>;
180
181} // namespace db
182} // namespace dballe
183
184#endif
Cursor iterating over summary entries.
Definition cursor.h:99
A bulletin that has been decoded and physically interpreted.
Definition message.h:29
Query used to filter DB-All.e data.
Definition query.h:17
JSON serializer.
Definition json.h:30
High level objects for working with DB-All.e DB summaries.
Definition summary.h:71
virtual std::shared_ptr< dballe::CursorSummary > query_summary(const Query &query) const
Query the contents of the summary.
virtual Datetime datetime_min() const =0
Recompute reports, levels, tranges, and varcodes.
virtual bool iter_filtered(const dballe::Query &query, std::function< bool(const Station &, const summary::VarDesc &, const DatetimeRange &, size_t)>) const =0
Iterate the contents of this summary.
virtual void to_json(core::JSONWriter &writer) const =0
Serialize to JSON.
virtual void add_cursor(const dballe::CursorSummary &cur)
Add an entry to the summary taken from the current status of cur.
virtual void add_messages(const std::vector< std::shared_ptr< dballe::Message > > &messages, bool station_data=true, bool data=true)
Add the contents of a Messages.
virtual void add_summary(const BaseSummary< dballe::DBStation > &summary)
Merge the copy of another summary into this one.
virtual void add_message(const dballe::Message &message, bool station_data=true, bool data=true)
Add the contents of a Message.
virtual void load_json(core::json::Stream &in)
Load contents from JSON, merging with the current contents.
virtual void add_summary(const BaseSummary< dballe::Station > &summary)
Merge the copy of another summary into this one.
virtual void clear()=0
Completely empty the summary.
virtual bool iter(std::function< bool(const Station &, const summary::VarDesc &, const DatetimeRange &, size_t)>) const =0
Iterate the contents of this summary.
virtual void add(const Station &station, const summary::VarDesc &vd, const dballe::DatetimeRange &dtrange, size_t count)=0
Add an entry to the summary.
virtual void add_filtered(const BaseSummary< Station > &summary, const dballe::Query &query)
Merge the copy of another summary into this one.
virtual void commit()=0
Write changes to disk.
Common definitions.
Range of datetimes.
Definition types.h:297
Date and time.
Definition types.h:164
Vertical level or layer.
Definition types.h:625
Station information.
Definition types.h:879
Information on how a value has been sampled or computed with regards to time.
Definition types.h:689
Definition json.h:163
Description of a variable, independent of where and when it was measured.
Definition summary.h:18
Common base types used by most of DB-All.e code.