libdballe 9.13
summary_memory.h
1#ifndef DBALLE_DB_SUMMARY_MEMORY_H
2#define DBALLE_DB_SUMMARY_MEMORY_H
3
4#include <dballe/core/fwd.h>
5#include <dballe/db/summary.h>
6#include <dballe/db/summary_utils.h>
7#include <filesystem>
8
9namespace dballe {
10namespace db {
11
15template <typename Station>
16class BaseSummaryMemory : public BaseSummary<Station>
17{
18protected:
19 // Summary of items for the currently active filter
21
22 std::filesystem::path path;
23
28 mutable dballe::DatetimeRange dtrange;
29 mutable size_t count = 0;
30
31 mutable bool dirty = false;
32
33 void recompute_summaries() const;
34
35public:
36 BaseSummaryMemory();
37 explicit BaseSummaryMemory(const std::filesystem::path& path);
38
39 const summary::StationEntries<Station>& _entries() const
40 {
41 if (dirty)
42 recompute_summaries();
43 return entries.sorted();
44 }
45
46 bool stations(std::function<bool(const Station&)>) const override;
47 bool reports(std::function<bool(const std::string&)>) const override;
48 bool levels(std::function<bool(const Level&)>) const override;
49 bool tranges(std::function<bool(const Trange&)>) const override;
50 bool varcodes(std::function<bool(const wreport::Varcode&)>) const override;
51
52 Datetime datetime_min() const override
53 {
54 if (dirty)
55 recompute_summaries();
56 return dtrange.min;
57 }
58 Datetime datetime_max() const override
59 {
60 if (dirty)
61 recompute_summaries();
62 return dtrange.max;
63 }
64 unsigned data_count() const override
65 {
66 if (dirty)
67 recompute_summaries();
68 return count;
69 }
70
81 std::shared_ptr<dballe::CursorSummary>
82 query_summary(const Query& query) const override;
83
84 bool iter(std::function<bool(const Station&, const summary::VarDesc&,
85 const DatetimeRange&, size_t)>) const override;
87 const dballe::Query& query,
88 std::function<bool(const Station&, const summary::VarDesc&,
89 const DatetimeRange&, size_t)>) const override;
90
91 void clear() override;
92
94 void add(const Station& station, const summary::VarDesc& vd,
95 const dballe::DatetimeRange& dtrange, size_t count) override;
96
98 void add_summary(const BaseSummary<dballe::Station>& summary) override;
99
101 void add_summary(const BaseSummary<dballe::DBStation>& summary) override;
102
104 void add_filtered(const BaseSummary<Station>& summary,
105 const dballe::Query& query) override;
106
107 void commit() override;
108
110 void to_json(core::JSONWriter& writer) const override;
111
113 void load_json(core::json::Stream& in) override;
114
115 DBALLE_TEST_ONLY void dump(FILE* out) const override;
116};
117
121typedef BaseSummaryMemory<dballe::Station> SummaryMemory;
122
126typedef BaseSummaryMemory<dballe::DBStation> DBSummaryMemory;
127
128extern template class BaseSummaryMemory<dballe::Station>;
129extern template class BaseSummaryMemory<dballe::DBStation>;
130
131} // namespace db
132} // namespace dballe
133
134#endif
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_memory.h:17
void to_json(core::JSONWriter &writer) const override
Serialize to JSON.
void clear() override
Completely empty the summary.
void add(const Station &station, const summary::VarDesc &vd, const dballe::DatetimeRange &dtrange, size_t count) override
Add an entry to the summary.
Datetime datetime_min() const override
Recompute reports, levels, tranges, and varcodes.
Definition summary_memory.h:52
void add_filtered(const BaseSummary< Station > &summary, const dballe::Query &query) override
Merge the copy of another summary into this one.
void load_json(core::json::Stream &in) override
Load contents from JSON, merging with the current contents.
bool iter_filtered(const dballe::Query &query, std::function< bool(const Station &, const summary::VarDesc &, const DatetimeRange &, size_t)>) const override
Iterate the contents of this summary.
void add_summary(const BaseSummary< dballe::Station > &summary) override
Merge the copy of another summary into this one.
std::shared_ptr< dballe::CursorSummary > query_summary(const Query &query) const override
Query the contents of the summary.
void add_summary(const BaseSummary< dballe::DBStation > &summary) override
Merge the copy of another summary into this one.
bool iter(std::function< bool(const Station &, const summary::VarDesc &, const DatetimeRange &, size_t)>) const override
Iterate the contents of this summary.
void commit() override
Write changes to disk.
Range of datetimes.
Definition types.h:297
Datetime max
Upper bound of the range.
Definition types.h:301
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
Index of all stations known to a summary.
Definition summary_utils.h:152
Description of a variable, independent of where and when it was measured.
Definition summary.h:18