libdballe  9.14
db/v7/fwd.h
1 #ifndef DBALLE_DB_V7_FWD_H
2 #define DBALLE_DB_V7_FWD_H
3 
4 namespace dballe {
5 namespace db {
6 namespace v7 {
7 
8 struct Transaction;
9 struct QueryBuilder;
10 struct StationQueryBuilder;
11 struct DataQueryBuilder;
12 struct SummaryQueryBuilder;
13 struct IdQueryBuilder;
14 struct DB;
15 struct Repinfo;
16 struct Station;
17 struct LevTr;
18 struct LevTrEntry;
19 struct SQLTrace;
20 struct Driver;
21 
22 namespace cursor {
23 struct Stations;
24 struct StationData;
25 struct Data;
26 struct Summary;
27 } // namespace cursor
28 
29 namespace batch {
30 struct Station;
31 struct StationDatum;
32 struct MeasuredDatum;
33 } // namespace batch
34 
35 namespace trace {
36 struct Step;
37 struct Transaction;
38 } // namespace trace
39 
44 template <typename Step = trace::Step> class Tracer
45 {
46 protected:
47  Step* step;
48 
49 public:
50  Tracer() : step(nullptr) {}
51  Tracer(Step* step) : step(step) {}
52  Tracer(const Tracer&) = delete;
53  Tracer(Tracer&& o) : step(o.step) { o.step = nullptr; }
54  Tracer& operator=(const Tracer&) = delete;
55  Tracer& operator=(Tracer&&) = delete;
56  ~Tracer()
57  {
58  if (step)
59  step->done();
60  }
61  void reset(Step* step) { this->step = step; }
62  void done()
63  {
64  if (step)
65  step->done();
66  step = nullptr;
67  }
68  Step* operator->() { return step; }
69  operator bool() const { return step; }
70 };
71 
72 } // namespace v7
73 } // namespace db
74 } // namespace dballe
75 
76 #endif
Definition: cmdline.h:18
Smart pointer for trace::Step objects, which calls done() when going out of scope.
Definition: db/v7/fwd.h:44