libdballe  9.11
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, int& sec) = 0;
42  virtual void setdate(int year, int month, int day, int hour, int min, int sec) = 0;
43  virtual void setdatemin(int year, int month, int day, int hour, int min, int sec) = 0;
44  virtual void setdatemax(int year, int month, int day, int hour, int min, int sec) = 0;
45  virtual void unset(const char* param) = 0;
46  virtual void unsetall() = 0;
47  virtual void unsetb() = 0;
48  virtual int query_stations() = 0;
49  virtual void next_station() = 0;
50  virtual int query_data() = 0;
51  virtual wreport::Varcode next_data() = 0;
52  virtual void insert_data() = 0;
53  virtual void remove_data() = 0;
54  virtual int query_attributes() = 0;
55  virtual const char* next_attribute() = 0;
56  virtual void insert_attributes() = 0;
57  virtual void remove_attributes() = 0;
58  virtual void messages_open_input(const char* filename, const char* mode, Encoding format, bool simplified=true) = 0;
59  virtual void messages_open_output(const char* filename, const char* mode, Encoding format) = 0;
60  virtual bool messages_read_next() = 0;
61  virtual void messages_write_next(const char* template_name=0) = 0;
62  virtual const char* describe_level(int ltype1, int l1, int ltype2, int l2) = 0;
63  virtual const char* describe_timerange(int ptype, int p1, int p2) = 0;
64  virtual const char* describe_var(const char* varcode, const char* value) = 0;
65  virtual void commit() = 0;
66 
74  const char* test_enqc(const char* param, unsigned len);
75 
76  static void to_fortran(int32_t val, char* buf, unsigned buf_len);
77  static void to_fortran(const char* str, char* buf, unsigned buf_len);
78  static void to_fortran(const std::string& str, char* buf, unsigned buf_len);
79 };
80 
81 }
82 }
83 #endif
Definition: cmdline.h:18
C++ implementation for the Fortran API.
Definition: api.h:15
uint16_t Varcode
const char * test_enqc(const char *param, unsigned len)
Wrap enqc in a way that makes it easier to use in unit tests.