libdballe 9.13
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
7namespace dballe {
8namespace fortran {
9
15struct 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
C++ implementation for the Fortran API.
Definition api.h:16
const char * test_enqc(const char *param, unsigned len)
Wrap enqc in a way that makes it easier to use in unit tests.