libdballe  9.11
traced.h
1 #ifndef DBALLE_FORTRAN_TRACED_H
2 #define DBALLE_FORTRAN_TRACED_H
3 
4 #include <dballe/fortran/api.h>
5 #include <memory>
6 
7 namespace dballe {
8 namespace fortran {
9 
10 struct Tracer
11 {
12  virtual ~Tracer() {}
13 
14  virtual std::unique_ptr<API> wrap_api(int handle, std::unique_ptr<API> api) = 0;
15 
16  std::unique_ptr<API> begin(int dbahandle, int handle, const DBConnectOptions& options, const char* anaflag, const char* dataflag, const char* attrflag);
17  std::unique_ptr<API> begin_messages(int handle, const char* filename, const char* mode, const char* type);
18 
19  virtual void log_connect_url(int handle, const char* chosen_dsn) = 0;
20  virtual void log_disconnect(int handle) = 0;
21  virtual void log_begin(int dbahandle, int handle, const char* anaflag, const char* dataflag, const char* attrflag) = 0;
22  virtual void log_begin_messages(int handle, const char* filename, const char* mode, const char* type) = 0;
23 
24  static std::unique_ptr<Tracer> create();
25 };
26 
27 struct FileTracer;
28 
29 struct TracedAPI : public API
30 {
31  FileTracer& tracer;
32  std::string name;
33  std::unique_ptr<API> api;
34 
35  TracedAPI(FileTracer& tracer, const std::string& name, std::unique_ptr<API> api);
36 
37  void reinit_db(const char* repinfofile=0) override;
38  void remove_all() override;
39  int enqi(const char* param) override;
40  signed char enqb(const char* param) override;
41  float enqr(const char* param) override;
42  double enqd(const char* param) override;
43  bool enqc(const char* param, char* res, unsigned res_len) override;
44  void seti(const char* param, int value) override;
45  void setb(const char* param, signed char value) override;
46  void setr(const char* param, float value) override;
47  void setd(const char* param, double value) override;
48  void setc(const char* param, const char* value) override;
49  void set_station_context() override;
50  void enqlevel(int& ltype1, int& l1, int& ltype2, int& l2) override;
51  void setlevel(int ltype1, int l1, int ltype2, int l2) override;
52  void enqtimerange(int& pind, int& p1, int& p2) override;
53  void settimerange(int pind, int p1, int p2) override;
54  void enqdate(int& year, int& month, int& day, int& hour, int& min, int& sec) override;
55  void setdate(int year, int month, int day, int hour, int min, int sec) override;
56  void setdatemin(int year, int month, int day, int hour, int min, int sec) override;
57  void setdatemax(int year, int month, int day, int hour, int min, int sec) override;
58  void unset(const char* param) override;
59  void unsetall() override;
60  void unsetb() override;
61  int query_stations() override;
62  void next_station() override;
63  int query_data() override;
64  wreport::Varcode next_data() override;
65  void insert_data() override;
66  void remove_data() override;
67  int query_attributes() override;
68  const char* next_attribute() override;
69  void insert_attributes() override;
70  void remove_attributes() override;
71  void messages_open_input(const char* filename, const char* mode, Encoding format, bool simplified=true) override;
72  void messages_open_output(const char* filename, const char* mode, Encoding format) override;
73  bool messages_read_next() override;
74  void messages_write_next(const char* template_name=0) override;
75  const char* describe_level(int ltype1, int l1, int ltype2, int l2) override;
76  const char* describe_timerange(int ptype, int p1, int p2) override;
77  const char* describe_var(const char* varcode, const char* value) override;
78  void commit() override;
79 };
80 
81 }
82 }
83 
84 #endif
Definition: cmdline.h:18
C++ implementation for the Fortran API.
Definition: api.h:15
Definition: traced.h:10
Definition: traced.h:29
uint16_t Varcode
Options controlling how to connect to a database.
Definition: db.h:17