libdballe 9.6
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, 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
uint16_t Varcode
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.