libdballe 9.9
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:
37 explicit BaseSummaryMemory(const std::filesystem::path& path);
38
39 const summary::StationEntries<Station>& _entries() const { if (dirty) recompute_summaries(); return entries.sorted(); }
40
41 bool stations(std::function<bool(const Station&)>) const override;
42 bool reports(std::function<bool(const std::string&)>) const override;
43 bool levels(std::function<bool(const Level&)>) const override;
44 bool tranges(std::function<bool(const Trange&)>) const override;
45 bool varcodes(std::function<bool(const wreport::Varcode&)>) const override;
46
47 Datetime datetime_min() const override { if (dirty) recompute_summaries(); return dtrange.min; }
48 Datetime datetime_max() const override { if (dirty) recompute_summaries(); return dtrange.max; }
49 unsigned data_count() const override { if (dirty) recompute_summaries(); return count; }
50
61 std::shared_ptr<dballe::CursorSummary> query_summary(const Query& query) const override;
62
63 bool iter(std::function<bool(const Station&, const summary::VarDesc&, const DatetimeRange&, size_t)>) const override;
64 bool iter_filtered(const dballe::Query& query, std::function<bool(const Station&, const summary::VarDesc&, const DatetimeRange&, size_t)>) const override;
65
66 void clear() override;
67
69 void add(const Station& station, const summary::VarDesc& vd, const dballe::DatetimeRange& dtrange, size_t count) override;
70
72 void add_summary(const BaseSummary<dballe::Station>& summary) override;
73
75 void add_summary(const BaseSummary<dballe::DBStation>& summary) override;
76
78 void add_filtered(const BaseSummary<Station>& summary, const dballe::Query& query) override;
79
80 void commit() override;
81
83 void to_json(core::JSONWriter& writer) const override;
84
86 void load_json(core::json::Stream& in) override;
87
88 DBALLE_TEST_ONLY void dump(FILE* out) const override;
89};
90
95
100
101extern template class BaseSummaryMemory<dballe::Station>;
102extern template class BaseSummaryMemory<dballe::DBStation>;
103
104}
105}
106
107#endif
Query used to filter DB-All.e data.
Definition query.h:15
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:47
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. There is no guarantee on sorting order.
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. There is no guarantee on sorting order.
void commit() override
Write changes to disk.
High level objects for working with DB-All.e DB summaries.
Definition summary.h:45
uint16_t Varcode
Range of datetimes.
Definition types.h:295
Datetime min
Lower bound of the range.
Definition types.h:297
Datetime max
Upper bound of the range.
Definition types.h:299
Date and time.
Definition types.h:165
Vertical level or layer.
Definition types.h:625
Station information.
Definition types.h:794
Information on how a value has been sampled or computed with regards to time.
Definition types.h:687
Definition json.h:166
Index of all stations known to a summary.
Definition summary_utils.h:123
Description of a variable, independent of where and when it was measured.
Definition summary.h:18