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