libdballe  9.14
api.h
1 #ifndef DBALLE_FORTRAN_API_H
2 #define DBALLE_FORTRAN_API_H
3 
4 #include <dballe/fwd.h>
5 #include <wreport/varinfo.h>
6 
7 namespace dballe {
8 namespace fortran {
9 
15 struct API
16 {
17  static const signed char missing_byte;
18  static const int missing_int;
19  static const float missing_float;
20  static const double missing_double;
21 
22  virtual ~API() {}
23 
24  virtual void reinit_db(const char* repinfofile = nullptr) = 0;
25  virtual void remove_all() = 0;
26  virtual int enqi(const char* param) = 0;
27  virtual signed char enqb(const char* param) = 0;
28  virtual float enqr(const char* param) = 0;
29  virtual double enqd(const char* param) = 0;
30  virtual bool enqc(const char* param, char* res, unsigned res_len) = 0;
31  virtual void seti(const char* param, int value) = 0;
32  virtual void setb(const char* param, signed char value) = 0;
33  virtual void setr(const char* param, float value) = 0;
34  virtual void setd(const char* param, double value) = 0;
35  virtual void setc(const char* param, const char* value) = 0;
36  virtual void set_station_context() = 0;
37  virtual void enqlevel(int& ltype1, int& l1, int& ltype2, int& l2) = 0;
38  virtual void setlevel(int ltype1, int l1, int ltype2, int l2) = 0;
39  virtual void enqtimerange(int& ptype, int& p1, int& p2) = 0;
40  virtual void settimerange(int ptype, int p1, int p2) = 0;
41  virtual void enqdate(int& year, int& month, int& day, int& hour, int& min,
42  int& sec) = 0;
43  virtual void setdate(int year, int month, int day, int hour, int min,
44  int sec) = 0;
45  virtual void setdatemin(int year, int month, int day, int hour, int min,
46  int sec) = 0;
47  virtual void setdatemax(int year, int month, int day, int hour, int min,
48  int sec) = 0;
49  virtual void unset(const char* param) = 0;
50  virtual void unsetall() = 0;
51  virtual void unsetb() = 0;
52  virtual int query_stations() = 0;
53  virtual void next_station() = 0;
54  virtual int query_data() = 0;
55  virtual wreport::Varcode next_data() = 0;
56  virtual void insert_data() = 0;
57  virtual void remove_data() = 0;
58  virtual int query_attributes() = 0;
59  virtual const char* next_attribute() = 0;
60  virtual void insert_attributes() = 0;
61  virtual void remove_attributes() = 0;
62  virtual void messages_open_input(const char* filename, const char* mode,
63  Encoding format,
64  bool simplified = true) = 0;
65  virtual void messages_open_output(const char* filename, const char* mode,
66  Encoding format) = 0;
67  virtual bool messages_read_next() = 0;
68  virtual void messages_write_next(const char* template_name = 0) = 0;
69  virtual const char* describe_level(int ltype1, int l1, int ltype2,
70  int l2) = 0;
71  virtual const char* describe_timerange(int ptype, int p1, int p2) = 0;
72  virtual const char* describe_var(const char* varcode,
73  const char* value) = 0;
74  virtual void commit() = 0;
75 
83  const char* test_enqc(const char* param, unsigned len);
84 
85  static void to_fortran(int32_t val, char* buf, unsigned buf_len);
86  static void to_fortran(const char* str, char* buf, unsigned buf_len);
87  static void to_fortran(const std::string& str, char* buf, unsigned buf_len);
88 };
89 
90 } // namespace fortran
91 } // namespace dballe
92 #endif
Definition: cmdline.h:18
C++ implementation for the Fortran API.
Definition: api.h:15
const char * test_enqc(const char *param, unsigned len)
Wrap enqc in a way that makes it easier to use in unit tests.