Commit | Line | Data |
---|---|---|
d7bfb9b0 JG |
1 | /* |
2 | * Copyright (C) 2022 Jérémie Galarneau <jeremie.galarneau@efficios.com> | |
3 | * | |
4 | * SPDX-License-Identifier: GPL-2.0-only | |
5 | * | |
6 | */ | |
7 | ||
8 | #ifndef LTTNG_TSDL_TRACE_CLASS_VISITOR_H | |
9 | #define LTTNG_TSDL_TRACE_CLASS_VISITOR_H | |
10 | ||
11 | #include "trace-class.hpp" | |
12 | #include "stream-class.hpp" | |
13 | #include "event-class.hpp" | |
14 | ||
15 | #include <vendor/optional.hpp> | |
16 | ||
17 | #include <functional> | |
18 | ||
19 | namespace lttng { | |
20 | namespace sessiond { | |
21 | namespace tsdl { | |
22 | ||
23 | using append_metadata_fragment_function = std::function<void(const std::string& fragment)>; | |
24 | ||
25 | class trace_class_visitor : public lttng::sessiond::trace::trace_class_visitor { | |
26 | public: | |
27 | trace_class_visitor(const lttng::sessiond::trace::abi& trace_abi, | |
28 | append_metadata_fragment_function append_metadata); | |
29 | ||
30 | /* trace class visitor interface. */ | |
31 | virtual void visit(const lttng::sessiond::trace::trace_class& trace_class) override final; | |
32 | ||
33 | /* clock class visitor interface. */ | |
34 | virtual void visit(const lttng::sessiond::trace::clock_class& clock_class) override final; | |
35 | ||
36 | /* environment visitor interface. */ | |
37 | virtual void environment_begin() override final; | |
38 | virtual void visit(const lttng::sessiond::trace::environment_field<int64_t>& field) override final; | |
39 | virtual void visit(const lttng::sessiond::trace::environment_field<const char *>& field) override final; | |
40 | virtual void environment_end() override final; | |
41 | ||
42 | /* stream class visitor interface. */ | |
43 | virtual void visit(const lttng::sessiond::trace::stream_class& stream_class) override final; | |
44 | ||
45 | /* event class visitor interface. */ | |
46 | virtual void visit(const lttng::sessiond::trace::event_class& event_class) override final; | |
47 | ||
48 | private: | |
49 | /* Coherent (parseable) fragments must be appended. */ | |
50 | void append_metadata_fragment(const std::string& fragment) const; | |
51 | ||
52 | const lttng::sessiond::trace::abi& _trace_abi; | |
53 | const append_metadata_fragment_function _append_metadata_fragment; | |
54 | std::string _environment; | |
55 | }; | |
56 | ||
57 | } /* namespace tsdl */ | |
58 | } /* namespace sessiond */ | |
59 | } /* namespace lttng */ | |
60 | ||
61 | #endif /* LTTNG_TSDL_TRACE_CLASS_VISITOR_H */ |