libdballe  9.14
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 
10 namespace dballe {
11 namespace db {
12 namespace summary {
13 
17 struct 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 
70 template <typename Station> class BaseSummary
71 {
72 public:
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
155  iter_filtered(const dballe::Query& query,
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 
172 
177 
178 extern template class BaseSummary<dballe::Station>;
179 extern template class BaseSummary<dballe::DBStation>;
180 
181 } // namespace db
182 } // namespace dballe
183 
184 #endif
Common base types used by most of DB-All.e code.
virtual void add_cursor(const dballe::CursorSummary &cur)
Add an entry to the summary taken from the current status of cur.
Definition: json.h:162
Station information.
Definition: types.h:878
Description of a variable, independent of where and when it was measured.
Definition: summary.h:17
virtual void clear()=0
Completely empty the summary.
Information on how a value has been sampled or computed with regards to time.
Definition: types.h:688
Cursor iterating over summary entries.
Definition: cursor.h:98
virtual Datetime datetime_min() const =0
Recompute reports, levels, tranges, and varcodes.
Definition: cmdline.h:18
virtual void add_message(const dballe::Message &message, bool station_data=true, bool data=true)
Add the contents of a Message.
virtual void to_json(core::JSONWriter &writer) const =0
Serialize to JSON.
Vertical level or layer.
Definition: types.h:624
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_summary(const BaseSummary< dballe::Station > &summary)
Merge the copy of another summary into this one.
A bulletin that has been decoded and physically interpreted.
Definition: message.h:28
Range of datetimes.
Definition: types.h:296
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(const Station &station, const summary::VarDesc &vd, const dballe::DatetimeRange &dtrange, size_t count)=0
Add an entry to the summary.
High level objects for working with DB-All.e DB summaries.
Definition: summary.h:70
Date and time.
Definition: types.h:163
virtual void commit()=0
Write changes to disk.
JSON serializer.
Definition: json.h:29
virtual void load_json(core::json::Stream &in)
Load contents from JSON, merging with the current contents.
virtual void add_filtered(const BaseSummary< Station > &summary, const dballe::Query &query)
Merge the copy of another summary into this one.
Common definitions.
Query used to filter DB-All.e data.
Definition: query.h:16
virtual std::shared_ptr< dballe::CursorSummary > query_summary(const Query &query) const
Query the contents of the summary.
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.