X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Ftsdl-trace-class-visitor.hpp;fp=src%2Fbin%2Flttng-sessiond%2Ftsdl-trace-class-visitor.hpp;h=6d629e2beff51dbe35268ca8b8f4721bf7e4031b;hb=d7bfb9b0fa35679d3e728b9165699d9faf905539;hp=0000000000000000000000000000000000000000;hpb=0220be14254fac4f7af642fd6630282b29776a70;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/tsdl-trace-class-visitor.hpp b/src/bin/lttng-sessiond/tsdl-trace-class-visitor.hpp new file mode 100644 index 000000000..6d629e2be --- /dev/null +++ b/src/bin/lttng-sessiond/tsdl-trace-class-visitor.hpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2022 Jérémie Galarneau + * + * SPDX-License-Identifier: GPL-2.0-only + * + */ + +#ifndef LTTNG_TSDL_TRACE_CLASS_VISITOR_H +#define LTTNG_TSDL_TRACE_CLASS_VISITOR_H + +#include "trace-class.hpp" +#include "stream-class.hpp" +#include "event-class.hpp" + +#include + +#include + +namespace lttng { +namespace sessiond { +namespace tsdl { + +using append_metadata_fragment_function = std::function; + +class trace_class_visitor : public lttng::sessiond::trace::trace_class_visitor { +public: + trace_class_visitor(const lttng::sessiond::trace::abi& trace_abi, + append_metadata_fragment_function append_metadata); + + /* trace class visitor interface. */ + virtual void visit(const lttng::sessiond::trace::trace_class& trace_class) override final; + + /* clock class visitor interface. */ + virtual void visit(const lttng::sessiond::trace::clock_class& clock_class) override final; + + /* environment visitor interface. */ + virtual void environment_begin() override final; + virtual void visit(const lttng::sessiond::trace::environment_field& field) override final; + virtual void visit(const lttng::sessiond::trace::environment_field& field) override final; + virtual void environment_end() override final; + + /* stream class visitor interface. */ + virtual void visit(const lttng::sessiond::trace::stream_class& stream_class) override final; + + /* event class visitor interface. */ + virtual void visit(const lttng::sessiond::trace::event_class& event_class) override final; + +private: + /* Coherent (parseable) fragments must be appended. */ + void append_metadata_fragment(const std::string& fragment) const; + + const lttng::sessiond::trace::abi& _trace_abi; + const append_metadata_fragment_function _append_metadata_fragment; + std::string _environment; +}; + +} /* namespace tsdl */ +} /* namespace sessiond */ +} /* namespace lttng */ + +#endif /* LTTNG_TSDL_TRACE_CLASS_VISITOR_H */