libdballe  9.14
matcher.h
1 #ifndef DBALLE_CORE_MATCHER_H
2 #define DBALLE_CORE_MATCHER_H
3 
4 #include <dballe/core/fwd.h>
5 #include <dballe/types.h>
6 #include <memory>
7 
8 namespace dballe {
9 namespace matcher {
10 
11 enum Result {
12  MATCH_YES, // Item matches
13  MATCH_NO, // Item does not match
14  MATCH_NA // Match not applicable to this item
15 };
16 
18 std::string result_format(Result res);
19 
20 } // namespace matcher
21 
29 struct Matched
30 {
31  virtual ~Matched() {}
32 
38  virtual matcher::Result match_var_id(int val) const;
39 
45  virtual matcher::Result match_station_id(int val) const;
46 
52  virtual matcher::Result match_station_wmo(int block,
53  int station = -1) const;
54 
56  virtual matcher::Result match_datetime(const DatetimeRange& range) const;
57 
64  virtual matcher::Result match_coords(const LatRange& latrange,
65  const LonRange& lonrange) const;
66 
72  virtual matcher::Result match_rep_memo(const char* memo) const;
73 
80  static matcher::Result int_in_range(int val, int min, int max);
81 
85  static matcher::Result lon_in_range(int val, int min, int max);
86 };
87 
92 struct Matcher
93 {
94  virtual ~Matcher() {}
95 
96  virtual matcher::Result match(const Matched& item) const = 0;
97  virtual void to_query(dballe::core::Query& query) const = 0;
98 
99  static std::unique_ptr<Matcher> create(const dballe::Query& query);
100 };
101 
102 } // namespace dballe
103 
104 #endif
Common base types used by most of DB-All.e code.
static matcher::Result int_in_range(int val, int min, int max)
Match if min <= val <= max.
Common interface for things that are matched.
Definition: matcher.h:29
Standard dballe::Query implementation.
Definition: core/query.h:35
Definition: cmdline.h:18
virtual matcher::Result match_station_wmo(int block, int station=-1) const
Match station WMO code.
virtual matcher::Result match_var_id(int val) const
Match variable ID.
virtual matcher::Result match_station_id(int val) const
Match station ID.
static matcher::Result lon_in_range(int val, int min, int max)
Match if val is contained inside the given longitude range.
Range of datetimes.
Definition: types.h:296
virtual matcher::Result match_datetime(const DatetimeRange &range) const
Match datetime.
Match DB-All.e objects using the same queries that can be made on DB-All.e databases.
Definition: matcher.h:92
virtual matcher::Result match_rep_memo(const char *memo) const
Match rep_memo.
Range of latitudes.
Definition: types.h:469
virtual matcher::Result match_coords(const LatRange &latrange, const LonRange &lonrange) const
Match coordinates, with bounds in 1/100000 of degree.
Range of longitudes.
Definition: types.h:552
Query used to filter DB-All.e data.
Definition: query.h:16