X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Fcpp-common%2Fbt2%2Ftrace-ir.hpp;h=f2678f89e95efedef5c6a0c24893989fffd40707;hb=2a24eba8b45ab4bd62dfb2cd95f31e4c2a7a91a8;hp=5881092b384b1b2a12943149105dc1126fa903ce;hpb=39278ebc70d57de534466c533d6c543a318dfdac;p=babeltrace.git diff --git a/src/cpp-common/bt2/trace-ir.hpp b/src/cpp-common/bt2/trace-ir.hpp index 5881092b..f2678f89 100644 --- a/src/cpp-common/bt2/trace-ir.hpp +++ b/src/cpp-common/bt2/trace-ir.hpp @@ -7,19 +7,22 @@ #ifndef BABELTRACE_CPP_COMMON_BT2_TRACE_IR_HPP #define BABELTRACE_CPP_COMMON_BT2_TRACE_IR_HPP -#include #include +#include + #include -#include "internal/borrowed-obj.hpp" -#include "cpp-common/optional.hpp" -#include "cpp-common/string_view.hpp" +#include "cpp-common/bt2c/c-string-view.hpp" +#include "cpp-common/bt2s/optional.hpp" + +#include "borrowed-object.hpp" #include "clock-class.hpp" -#include "clock-snapshot.hpp" #include "field-class.hpp" #include "field.hpp" -#include "value.hpp" #include "internal/utils.hpp" +#include "optional-borrowed-object.hpp" +#include "shared-object.hpp" +#include "value.hpp" namespace bt2 { @@ -119,120 +122,65 @@ struct CommonEventSpec final } }; +template +using DepStructField = DepType; + } /* namespace internal */ template -class CommonEvent final : public internal::BorrowedObj +class CommonEvent final : public BorrowedObject { private: - using typename internal::BorrowedObj::_ThisBorrowedObj; - using typename internal::BorrowedObj::_LibObjPtr; - using _ConstSpec = internal::CommonEventSpec; + using typename BorrowedObject::_ThisBorrowedObject; using _Spec = internal::CommonEventSpec; - - using _Packet = - typename std::conditional::value, CommonPacket, - CommonPacket>::type; - - using _Stream = - typename std::conditional::value, CommonStream, - CommonStream>::type; - - using _StructureField = typename std::conditional::value, - ConstStructureField, StructureField>::type; + using _Packet = internal::DepPacket; + using _Stream = internal::DepStream; + using _StructureField = internal::DepStructField; public: - using Class = typename std::conditional::value, - CommonEventClass, - CommonEventClass>::type; + using typename BorrowedObject::LibObjPtr; + + using Class = internal::DepType, + CommonEventClass>; - explicit CommonEvent(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObj {libObjPtr} + explicit CommonEvent(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } template - CommonEvent(const CommonEvent& event) noexcept : _ThisBorrowedObj {event} + CommonEvent(const CommonEvent event) noexcept : _ThisBorrowedObject {event} { } template - CommonEvent& operator=(const CommonEvent& event) noexcept + CommonEvent operator=(const CommonEvent event) noexcept { - _ThisBorrowedObj::operator=(event); + _ThisBorrowedObject::operator=(event); return *this; } - CommonEventClass cls() const noexcept; - Class cls() noexcept; - CommonStream stream() const noexcept; - _Stream stream() noexcept; - nonstd::optional> packet() const noexcept; - nonstd::optional<_Packet> packet() noexcept; - - nonstd::optional payloadField() const noexcept + CommonEvent asConst() const noexcept { - const auto libObjPtr = _ConstSpec::payloadField(this->libObjPtr()); - - if (libObjPtr) { - return ConstStructureField {libObjPtr}; - } - - return nonstd::nullopt; + return CommonEvent {*this}; } - nonstd::optional<_StructureField> payloadField() noexcept - { - const auto libObjPtr = _Spec::payloadField(this->libObjPtr()); + Class cls() const noexcept; + _Stream stream() const noexcept; + OptionalBorrowedObject<_Packet> packet() const noexcept; - if (libObjPtr) { - return _StructureField {libObjPtr}; - } - - return nonstd::nullopt; - } - - nonstd::optional specificContextField() const noexcept + OptionalBorrowedObject<_StructureField> payloadField() const noexcept { - const auto libObjPtr = _ConstSpec::specificContextField(this->libObjPtr()); - - if (libObjPtr) { - return ConstStructureField {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::payloadField(this->libObjPtr()); } - nonstd::optional<_StructureField> specificContextField() noexcept + OptionalBorrowedObject<_StructureField> specificContextField() const noexcept { - const auto libObjPtr = _Spec::specificContextField(this->libObjPtr()); - - if (libObjPtr) { - return _StructureField {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::specificContextField(this->libObjPtr()); } - nonstd::optional commonContextField() const noexcept + OptionalBorrowedObject<_StructureField> commonContextField() const noexcept { - const auto libObjPtr = _ConstSpec::commonContextField(this->libObjPtr()); - - if (libObjPtr) { - return ConstStructureField {libObjPtr}; - } - - return nonstd::nullopt; - } - - nonstd::optional<_StructureField> commonContextField() noexcept - { - const auto libObjPtr = _Spec::commonContextField(this->libObjPtr()); - - if (libObjPtr) { - return _StructureField {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::commonContextField(this->libObjPtr()); } }; @@ -259,12 +207,12 @@ struct TypeDescr : public EventTypeDescr struct PacketRefFuncs final { - static void get(const bt_packet * const libObjPtr) + static void get(const bt_packet * const libObjPtr) noexcept { bt_packet_get_ref(libObjPtr); } - static void put(const bt_packet * const libObjPtr) + static void put(const bt_packet * const libObjPtr) noexcept { bt_packet_put_ref(libObjPtr); } @@ -306,64 +254,44 @@ struct CommonPacketSpec final } /* namespace internal */ template -class CommonPacket final : public internal::BorrowedObj +class CommonPacket final : public BorrowedObject { private: - using typename internal::BorrowedObj::_ThisBorrowedObj; - using typename internal::BorrowedObj::_LibObjPtr; - using _ConstSpec = internal::CommonPacketSpec; + using typename BorrowedObject::_ThisBorrowedObject; using _Spec = internal::CommonPacketSpec; - using _ThisCommonPacket = CommonPacket; - - using _Stream = - typename std::conditional::value, CommonStream, - CommonStream>::type; - - using _StructureField = typename std::conditional::value, - ConstStructureField, StructureField>::type; + using _Stream = internal::DepStream; + using _StructureField = internal::DepStructField; public: - using Shared = internal::SharedObj<_ThisCommonPacket, LibObjT, internal::PacketRefFuncs>; + using typename BorrowedObject::LibObjPtr; + using Shared = SharedObject; - explicit CommonPacket(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObj {libObjPtr} + explicit CommonPacket(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } template - CommonPacket(const CommonPacket& packet) noexcept : _ThisBorrowedObj {packet} + CommonPacket(const CommonPacket packet) noexcept : _ThisBorrowedObject {packet} { } template - _ThisCommonPacket& operator=(const CommonPacket& packet) noexcept + CommonPacket operator=(const CommonPacket packet) noexcept { - _ThisBorrowedObj::operator=(packet); + _ThisBorrowedObject::operator=(packet); return *this; } - CommonStream stream() const noexcept; - _Stream stream() noexcept; - - nonstd::optional contextField() const noexcept + CommonPacket asConst() const noexcept { - const auto libObjPtr = _ConstSpec::contextField(this->libObjPtr()); - - if (libObjPtr) { - return ConstStructureField {libObjPtr}; - } - - return nonstd::nullopt; + return CommonPacket {*this}; } - nonstd::optional<_StructureField> contextField() noexcept - { - const auto libObjPtr = _Spec::contextField(this->libObjPtr()); + _Stream stream() const noexcept; - if (libObjPtr) { - return _StructureField {libObjPtr}; - } - - return nonstd::nullopt; + OptionalBorrowedObject<_StructureField> contextField() const noexcept + { + return _Spec::contextField(this->libObjPtr()); } Shared shared() const noexcept @@ -396,39 +324,22 @@ struct TypeDescr : public PacketTypeDescr } /* namespace internal */ template -nonstd::optional CommonEvent::packet() const noexcept -{ - const auto libObjPtr = _ConstSpec::packet(this->libObjPtr()); - - if (libObjPtr) { - return ConstPacket {libObjPtr}; - } - - return nonstd::nullopt; -} - -template -nonstd::optional::_Packet> CommonEvent::packet() noexcept +OptionalBorrowedObject::_Packet> +CommonEvent::packet() const noexcept { - const auto libObjPtr = _Spec::packet(this->libObjPtr()); - - if (libObjPtr) { - return _Packet {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::packet(this->libObjPtr()); } namespace internal { struct StreamRefFuncs final { - static void get(const bt_stream * const libObjPtr) + static void get(const bt_stream * const libObjPtr) noexcept { bt_stream_get_ref(libObjPtr); } - static void put(const bt_stream * const libObjPtr) + static void put(const bt_stream * const libObjPtr) noexcept { bt_stream_put_ref(libObjPtr); } @@ -480,48 +391,45 @@ struct CommonStreamSpec final } /* namespace internal */ template -class CommonStream final : public internal::BorrowedObj +class CommonStream final : public BorrowedObject { private: - using typename internal::BorrowedObj::_ThisBorrowedObj; - using typename internal::BorrowedObj::_LibObjPtr; - using _ConstSpec = internal::CommonStreamSpec; + using typename BorrowedObject::_ThisBorrowedObject; using _Spec = internal::CommonStreamSpec; - using _ThisCommonStream = CommonStream; - - using _Trace = - typename std::conditional::value, CommonTrace, - CommonTrace>::type; + using _Trace = internal::DepType, CommonTrace>; public: - using Shared = internal::SharedObj<_ThisCommonStream, LibObjT, internal::StreamRefFuncs>; + using typename BorrowedObject::LibObjPtr; + using Shared = SharedObject; + using UserAttributes = internal::DepUserAttrs; - using Class = typename std::conditional::value, - CommonStreamClass, - CommonStreamClass>::type; + using Class = internal::DepType, + CommonStreamClass>; - using UserAttributes = - typename std::conditional::value, ConstMapValue, MapValue>::type; - - explicit CommonStream(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObj {libObjPtr} + explicit CommonStream(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } template - CommonStream(const CommonStream& stream) noexcept : _ThisBorrowedObj {stream} + CommonStream(const CommonStream stream) noexcept : _ThisBorrowedObject {stream} { } template - _ThisCommonStream& operator=(const CommonStream& stream) noexcept + CommonStream operator=(const CommonStream stream) noexcept { - _ThisBorrowedObj::operator=(stream); + _ThisBorrowedObject::operator=(stream); return *this; } - Packet::Shared createPacket() + CommonStream asConst() const noexcept + { + return CommonStream {*this}; + } + + Packet::Shared createPacket() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstStream`."); const auto libObjPtr = bt_packet_create(this->libObjPtr()); @@ -529,57 +437,42 @@ public: return Packet::Shared::createWithoutRef(libObjPtr); } - CommonStreamClass cls() const noexcept; - Class cls() noexcept; - CommonTrace trace() const noexcept; - _Trace trace() noexcept; + Class cls() const noexcept; + _Trace trace() const noexcept; std::uint64_t id() const noexcept { return bt_stream_get_id(this->libObjPtr()); } - void name(const char * const name) + CommonStream name(const bt2c::CStringView name) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstStream`."); const auto status = bt_stream_set_name(this->libObjPtr(), name); if (status == BT_STREAM_SET_NAME_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - void name(const std::string& name) - { - this->name(name.data()); + return *this; } - nonstd::optional name() const noexcept + bt2c::CStringView name() const noexcept { - const auto name = bt_stream_get_name(this->libObjPtr()); - - if (name) { - return name; - } - - return nonstd::nullopt; + return bt_stream_get_name(this->libObjPtr()); } template - void userAttributes(const CommonMapValue& userAttrs) + CommonStream userAttributes(const CommonMapValue userAttrs) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstStream`."); bt_stream_set_user_attributes(this->libObjPtr(), userAttrs.libObjPtr()); + return *this; } - ConstMapValue userAttributes() const noexcept - { - return ConstMapValue {_ConstSpec::userAttributes(this->libObjPtr())}; - } - - UserAttributes userAttributes() noexcept + UserAttributes userAttributes() const noexcept { return UserAttributes {_Spec::userAttributes(this->libObjPtr())}; } @@ -614,25 +507,13 @@ struct TypeDescr : public StreamTypeDescr } /* namespace internal */ template -ConstStream CommonEvent::stream() const noexcept -{ - return ConstStream {_ConstSpec::stream(this->libObjPtr())}; -} - -template -typename CommonEvent::_Stream CommonEvent::stream() noexcept +typename CommonEvent::_Stream CommonEvent::stream() const noexcept { return _Stream {_Spec::stream(this->libObjPtr())}; } template -ConstStream CommonPacket::stream() const noexcept -{ - return ConstStream {_ConstSpec::stream(this->libObjPtr())}; -} - -template -typename CommonPacket::_Stream CommonPacket::stream() noexcept +typename CommonPacket::_Stream CommonPacket::stream() const noexcept { return _Stream {_Spec::stream(this->libObjPtr())}; } @@ -641,12 +522,12 @@ namespace internal { struct TraceRefFuncs final { - static void get(const bt_trace * const libObjPtr) + static void get(const bt_trace * const libObjPtr) noexcept { bt_trace_get_ref(libObjPtr); } - static void put(const bt_trace * const libObjPtr) + static void put(const bt_trace * const libObjPtr) noexcept { bt_trace_put_ref(libObjPtr); } @@ -710,177 +591,124 @@ struct CommonTraceSpec final } /* namespace internal */ template -class CommonTrace final : public internal::BorrowedObj +class CommonTrace final : public BorrowedObject { - /* Allow instantiate() to call `trace.libObjPtr()` */ - friend class CommonStreamClass; - private: - using typename internal::BorrowedObj::_ThisBorrowedObj; - using typename internal::BorrowedObj::_LibObjPtr; - using _ConstSpec = internal::CommonTraceSpec; + using typename BorrowedObject::_ThisBorrowedObject; using _Spec = internal::CommonTraceSpec; - using _ThisCommonTrace = CommonTrace; - - using _Stream = - typename std::conditional::value, CommonStream, - CommonStream>::type; + using _Stream = internal::DepStream; public: - using Shared = internal::SharedObj<_ThisCommonTrace, LibObjT, internal::TraceRefFuncs>; + using typename BorrowedObject::LibObjPtr; + using Shared = SharedObject; + using UserAttributes = internal::DepUserAttrs; - using Class = typename std::conditional::value, - CommonTraceClass, - CommonTraceClass>::type; - - using UserAttributes = - typename std::conditional::value, ConstMapValue, MapValue>::type; + using Class = internal::DepType, + CommonTraceClass>; struct ConstEnvironmentEntry { - bpstd::string_view name; + bt2c::CStringView name; ConstValue value; }; - explicit CommonTrace(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObj {libObjPtr} + explicit CommonTrace(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } template - CommonTrace(const CommonTrace& trace) noexcept : _ThisBorrowedObj {trace} + CommonTrace(const CommonTrace trace) noexcept : _ThisBorrowedObject {trace} { } template - _ThisCommonTrace& operator=(const CommonTrace& trace) noexcept + CommonTrace operator=(const CommonTrace trace) noexcept { - _ThisBorrowedObj::operator=(trace); + _ThisBorrowedObject::operator=(trace); return *this; } - CommonTraceClass cls() const noexcept; - Class cls() noexcept; + CommonTrace asConst() const noexcept + { + return CommonTrace {*this}; + } + + Class cls() const noexcept; - void name(const char * const name) + CommonTrace name(const bt2c::CStringView name) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTrace`."); const auto status = bt_trace_set_name(this->libObjPtr(), name); if (status == BT_TRACE_SET_NAME_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - void name(const std::string& name) - { - this->name(name.data()); + return *this; } - nonstd::optional name() const noexcept + bt2c::CStringView name() const noexcept { - const auto name = bt_trace_get_name(this->libObjPtr()); - - if (name) { - return name; - } - - return nonstd::nullopt; + return bt_trace_get_name(this->libObjPtr()); } - void uuid(const std::uint8_t * const uuid) noexcept + CommonTrace uuid(const bt2c::UuidView& uuid) const noexcept { - bt_trace_set_uuid(this->libObjPtr(), uuid); + bt_trace_set_uuid(this->libObjPtr(), uuid.begin()); + return *this; } - nonstd::optional uuid() const noexcept + bt2s::optional uuid() const noexcept { const auto uuid = bt_trace_get_uuid(this->libObjPtr()); if (uuid) { - return bt2_common::UuidView {uuid}; + return bt2c::UuidView {uuid}; } - return nonstd::nullopt; + return bt2s::nullopt; } - std::uint64_t size() const noexcept + std::uint64_t length() const noexcept { return bt_trace_get_stream_count(this->libObjPtr()); } - ConstStream operator[](const std::uint64_t index) const noexcept - { - return ConstStream {_ConstSpec::streamByIndex(this->libObjPtr(), index)}; - } - - _Stream operator[](const std::uint64_t index) noexcept + _Stream operator[](const std::uint64_t index) const noexcept { return _Stream {_Spec::streamByIndex(this->libObjPtr(), index)}; } - nonstd::optional streamById(const std::uint64_t id) const noexcept + OptionalBorrowedObject<_Stream> streamById(const std::uint64_t id) const noexcept { - const auto libObjPtr = _ConstSpec::streamById(this->libObjPtr(), id); - - if (libObjPtr) { - return ConstStream {libObjPtr}; - } - - return nonstd::nullopt; - } - - nonstd::optional<_Stream> streamById(const std::uint64_t id) noexcept - { - const auto libObjPtr = _Spec::streamById(this->libObjPtr(), id); - - if (libObjPtr) { - return _Stream {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::streamById(this->libObjPtr(), id); } - void environmentEntry(const char * const name, const std::int64_t val) + CommonTrace environmentEntry(const bt2c::CStringView name, const std::int64_t val) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTrace`."); const auto status = bt_trace_set_environment_entry_integer(this->libObjPtr(), name, val); if (status == BT_TRACE_SET_ENVIRONMENT_ENTRY_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - void environmentEntry(const std::string& name, const std::int64_t val) - { - this->environmentEntry(name.data(), val); + return *this; } - void environmentEntry(const char * const name, const char * const val) + CommonTrace environmentEntry(const bt2c::CStringView name, const bt2c::CStringView val) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTrace`."); const auto status = bt_trace_set_environment_entry_string(this->libObjPtr(), name, val); if (status == BT_TRACE_SET_ENVIRONMENT_ENTRY_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - void environmentEntry(const std::string& name, const char * const val) - { - this->environmentEntry(name.data(), val); - } - - void environmentEntry(const char * const name, const std::string& val) - { - this->environmentEntry(name, val.data()); - } - - void environmentEntry(const std::string& name, const std::string& val) - { - this->environmentEntry(name.data(), val.data()); + return *this; } std::uint64_t environmentSize() const noexcept @@ -898,37 +726,21 @@ public: return ConstEnvironmentEntry {name, ConstValue {libObjPtr}}; } - nonstd::optional environmentEntry(const char * const name) const noexcept - { - const auto libObjPtr = - bt_trace_borrow_environment_entry_value_by_name_const(this->libObjPtr(), name); - - if (libObjPtr) { - return ConstValue {libObjPtr}; - } - - return nonstd::nullopt; - } - - nonstd::optional environmentEntry(const std::string& name) const noexcept + OptionalBorrowedObject environmentEntry(const bt2c::CStringView name) const noexcept { - return this->environmentEntry(name.data()); + return bt_trace_borrow_environment_entry_value_by_name_const(this->libObjPtr(), name); } template - void userAttributes(const CommonMapValue& userAttrs) + CommonTrace userAttributes(const CommonMapValue userAttrs) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTrace`."); bt_trace_set_user_attributes(this->libObjPtr(), userAttrs.libObjPtr()); + return *this; } - ConstMapValue userAttributes() const noexcept - { - return ConstMapValue {_ConstSpec::userAttributes(this->libObjPtr())}; - } - - UserAttributes userAttributes() noexcept + UserAttributes userAttributes() const noexcept { return UserAttributes {_Spec::userAttributes(this->libObjPtr())}; } @@ -963,13 +775,7 @@ struct TypeDescr : public TraceTypeDescr } /* namespace internal */ template -ConstTrace CommonStream::trace() const noexcept -{ - return ConstTrace {_ConstSpec::trace(this->libObjPtr())}; -} - -template -typename CommonStream::_Trace CommonStream::trace() noexcept +typename CommonStream::_Trace CommonStream::trace() const noexcept { return _Trace {_Spec::trace(this->libObjPtr())}; } @@ -978,12 +784,12 @@ namespace internal { struct EventClassRefFuncs final { - static void get(const bt_event_class * const libObjPtr) + static void get(const bt_event_class * const libObjPtr) noexcept { bt_event_class_get_ref(libObjPtr); } - static void put(const bt_event_class * const libObjPtr) + static void put(const bt_event_class * const libObjPtr) noexcept { bt_event_class_put_ref(libObjPtr); } @@ -1043,32 +849,26 @@ struct CommonEventClassSpec final } }; +template +using DepStructFc = DepType; + } /* namespace internal */ template -class CommonEventClass final : public internal::BorrowedObj +class CommonEventClass final : public BorrowedObject { private: - using typename internal::BorrowedObj::_ThisBorrowedObj; - using typename internal::BorrowedObj::_LibObjPtr; - using _ConstSpec = internal::CommonEventClassSpec; + using typename BorrowedObject::_ThisBorrowedObject; using _Spec = internal::CommonEventClassSpec; - using _ThisCommonEventClass = CommonEventClass; - - using _StreamClass = typename std::conditional::value, - CommonStreamClass, - CommonStreamClass>::type; + using _StructureFieldClass = internal::DepStructFc; - using _StructureFieldClass = - typename std::conditional::value, ConstStructureFieldClass, - StructureFieldClass>::type; + using _StreamClass = internal::DepType, + CommonStreamClass>; public: - using Shared = - internal::SharedObj<_ThisCommonEventClass, LibObjT, internal::EventClassRefFuncs>; - - using UserAttributes = - typename std::conditional::value, ConstMapValue, MapValue>::type; + using typename BorrowedObject::LibObjPtr; + using Shared = SharedObject; + using UserAttributes = internal::DepUserAttrs; enum class LogLevel { @@ -1089,108 +889,94 @@ public: DEBUG = BT_EVENT_CLASS_LOG_LEVEL_DEBUG, }; - explicit CommonEventClass(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObj {libObjPtr} + explicit CommonEventClass(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } template - CommonEventClass(const CommonEventClass& eventClass) noexcept : - _ThisBorrowedObj {eventClass} + CommonEventClass(const CommonEventClass eventClass) noexcept : + _ThisBorrowedObject {eventClass} { } template - _ThisCommonEventClass& operator=(const CommonEventClass& eventClass) noexcept + CommonEventClass operator=(const CommonEventClass eventClass) noexcept { - _ThisBorrowedObj::operator=(eventClass); + _ThisBorrowedObject::operator=(eventClass); return *this; } - CommonStreamClass streamClass() const noexcept; - _StreamClass streamClass() noexcept; + CommonEventClass asConst() const noexcept + { + return CommonEventClass {*this}; + } + + _StreamClass streamClass() const noexcept; std::uint64_t id() const noexcept { return bt_event_class_get_id(this->libObjPtr()); } - void name(const char * const name) + CommonEventClass name(const bt2c::CStringView name) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstEventClass`."); const auto status = bt_event_class_set_name(this->libObjPtr(), name); if (status == BT_EVENT_CLASS_SET_NAME_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - void name(const std::string& name) - { - this->name(name.data()); + return *this; } - nonstd::optional name() const noexcept + bt2c::CStringView name() const noexcept { - const auto name = bt_event_class_get_name(this->libObjPtr()); - - if (name) { - return name; - } - - return nonstd::nullopt; + return bt_event_class_get_name(this->libObjPtr()); } - void logLevel(const LogLevel logLevel) noexcept + CommonEventClass logLevel(const LogLevel logLevel) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstEventClass`."); bt_event_class_set_log_level(this->libObjPtr(), static_cast(logLevel)); + return *this; } - nonstd::optional logLevel() const noexcept + bt2s::optional logLevel() const noexcept { bt_event_class_log_level libLogLevel; - const auto avail = bt_event_class_get_log_level(this->libObjPtr(), &libLogLevel); - if (avail == BT_PROPERTY_AVAILABILITY_AVAILABLE) { + if (bt_event_class_get_log_level(this->libObjPtr(), &libLogLevel)) { return static_cast(libLogLevel); } - return nonstd::nullopt; + return bt2s::nullopt; } - void emfUri(const char * const emfUri) + CommonEventClass emfUri(const bt2c::CStringView emfUri) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstEventClass`."); const auto status = bt_event_class_set_emf_uri(this->libObjPtr(), emfUri); if (status == BT_EVENT_CLASS_SET_EMF_URI_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - void emfUri(const std::string& emfUri) - { - this->emfUri(emfUri.data()); + return *this; } - nonstd::optional emfUri() const noexcept + bt2c::CStringView emfUri() const noexcept { - const auto emfUri = bt_event_class_get_emf_uri(this->libObjPtr()); - - if (emfUri) { - return emfUri; - } - - return nonstd::nullopt; + return bt_event_class_get_emf_uri(this->libObjPtr()); } - void payloadFieldClass(const StructureFieldClass& fc) + CommonEventClass payloadFieldClass(const StructureFieldClass fc) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstEventClass`."); const auto status = bt_event_class_set_payload_field_class(this->libObjPtr(), fc.libObjPtr()); @@ -1198,33 +984,18 @@ public: if (status == BT_EVENT_CLASS_SET_FIELD_CLASS_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - - nonstd::optional payloadFieldClass() const noexcept - { - const auto libObjPtr = _ConstSpec::payloadFieldClass(this->libObjPtr()); - - if (libObjPtr) { - return ConstStructureFieldClass {libObjPtr}; - } - return nonstd::nullopt; + return *this; } - nonstd::optional<_StructureFieldClass> payloadFieldClass() noexcept + OptionalBorrowedObject<_StructureFieldClass> payloadFieldClass() const noexcept { - const auto libObjPtr = _Spec::payloadFieldClass(this->libObjPtr()); - - if (libObjPtr) { - return _StructureFieldClass {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::payloadFieldClass(this->libObjPtr()); } - void specificContextFieldClass(const StructureFieldClass& fc) + CommonEventClass specificContextFieldClass(const StructureFieldClass fc) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstEventClass`."); const auto status = bt_event_class_set_specific_context_field_class(this->libObjPtr(), fc.libObjPtr()); @@ -1232,44 +1003,25 @@ public: if (status == BT_EVENT_CLASS_SET_FIELD_CLASS_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - - nonstd::optional specificContextFieldClass() const noexcept - { - const auto libObjPtr = _ConstSpec::specificContextFieldClass(this->libObjPtr()); - - if (libObjPtr) { - return ConstStructureFieldClass {libObjPtr}; - } - return nonstd::nullopt; + return *this; } - nonstd::optional<_StructureFieldClass> specificContextFieldClass() noexcept + OptionalBorrowedObject<_StructureFieldClass> specificContextFieldClass() const noexcept { - const auto libObjPtr = _Spec::specificContextFieldClass(this->libObjPtr()); - - if (libObjPtr) { - return _StructureFieldClass {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::specificContextFieldClass(this->libObjPtr()); } template - void userAttributes(const CommonMapValue& userAttrs) + CommonEventClass userAttributes(const CommonMapValue userAttrs) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstEventClass`."); bt_event_class_set_user_attributes(this->libObjPtr(), userAttrs.libObjPtr()); + return *this; } - ConstMapValue userAttributes() const noexcept - { - return ConstMapValue {_ConstSpec::userAttributes(this->libObjPtr())}; - } - - UserAttributes userAttributes() noexcept + UserAttributes userAttributes() const noexcept { return UserAttributes {_Spec::userAttributes(this->libObjPtr())}; } @@ -1304,13 +1056,7 @@ struct TypeDescr : public EventClassTypeDescr } /* namespace internal */ template -ConstEventClass CommonEvent::cls() const noexcept -{ - return ConstEventClass {_ConstSpec::cls(this->libObjPtr())}; -} - -template -typename CommonEvent::Class CommonEvent::cls() noexcept +typename CommonEvent::Class CommonEvent::cls() const noexcept { return Class {_Spec::cls(this->libObjPtr())}; } @@ -1319,12 +1065,12 @@ namespace internal { struct StreamClassRefFuncs final { - static void get(const bt_stream_class * const libObjPtr) + static void get(const bt_stream_class * const libObjPtr) noexcept { bt_stream_class_get_ref(libObjPtr); } - static void put(const bt_stream_class * const libObjPtr) + static void put(const bt_stream_class * const libObjPtr) noexcept { bt_stream_class_put_ref(libObjPtr); } @@ -1422,57 +1168,52 @@ struct CommonStreamClassSpec final } /* namespace internal */ template -class CommonStreamClass final : public internal::BorrowedObj +class CommonStreamClass final : public BorrowedObject { private: - using typename internal::BorrowedObj::_ThisBorrowedObj; - using typename internal::BorrowedObj::_LibObjPtr; - using _ConstSpec = internal::CommonStreamClassSpec; + using typename BorrowedObject::_ThisBorrowedObject; using _Spec = internal::CommonStreamClassSpec; - using _ThisCommonStreamClass = CommonStreamClass; - - using _TraceClass = typename std::conditional::value, - CommonTraceClass, - CommonTraceClass>::type; + using _StructureFieldClass = internal::DepStructFc; - using _EventClass = typename std::conditional::value, - CommonEventClass, - CommonEventClass>::type; + using _TraceClass = internal::DepType, + CommonTraceClass>; - using _StructureFieldClass = - typename std::conditional::value, ConstStructureFieldClass, - StructureFieldClass>::type; + using _EventClass = internal::DepType, + CommonEventClass>; - using _ClockClass = - typename std::conditional::value, ConstClockClass, ClockClass>::type; + using _ClockClass = internal::DepType; public: - using Shared = - internal::SharedObj<_ThisCommonStreamClass, LibObjT, internal::StreamClassRefFuncs>; + using typename BorrowedObject::LibObjPtr; + using Shared = SharedObject; + using UserAttributes = internal::DepUserAttrs; - using UserAttributes = - typename std::conditional::value, ConstMapValue, MapValue>::type; - - explicit CommonStreamClass(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObj {libObjPtr} + explicit CommonStreamClass(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } template - CommonStreamClass(const CommonStreamClass& streamClass) noexcept : - _ThisBorrowedObj {streamClass} + CommonStreamClass(const CommonStreamClass streamClass) noexcept : + _ThisBorrowedObject {streamClass} { } template - _ThisCommonStreamClass& operator=(const CommonStreamClass& streamClass) noexcept + CommonStreamClass operator=(const CommonStreamClass streamClass) noexcept { - _ThisBorrowedObj::operator=(streamClass); + _ThisBorrowedObject::operator=(streamClass); return *this; } - Stream::Shared instantiate(const Trace& trace) + CommonStreamClass asConst() const noexcept + { + return CommonStreamClass {*this}; + } + + Stream::Shared instantiate(const Trace trace) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); const auto libObjPtr = bt_stream_create(this->libObjPtr(), trace.libObjPtr()); @@ -1480,9 +1221,10 @@ public: return Stream::Shared::createWithoutRef(libObjPtr); } - Stream::Shared instantiate(const Trace& trace, const std::uint64_t id) + Stream::Shared instantiate(const Trace trace, const std::uint64_t id) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); const auto libObjPtr = bt_stream_create_with_id(this->libObjPtr(), trace.libObjPtr(), id); @@ -1490,9 +1232,10 @@ public: return Stream::Shared::createWithoutRef(libObjPtr); } - EventClass::Shared createEventClass() + EventClass::Shared createEventClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); const auto libObjPtr = bt_event_class_create(this->libObjPtr()); @@ -1500,9 +1243,10 @@ public: return EventClass::Shared::createWithoutRef(libObjPtr); } - EventClass::Shared createEventClass(const std::uint64_t id) + EventClass::Shared createEventClass(const std::uint64_t id) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); const auto libObjPtr = bt_event_class_create_with_id(this->libObjPtr(), id); @@ -1510,47 +1254,40 @@ public: return EventClass::Shared::createWithoutRef(libObjPtr); } - CommonTraceClass traceClass() const noexcept; - _TraceClass traceClass() noexcept; + _TraceClass traceClass() const noexcept; std::uint64_t id() const noexcept { return bt_stream_class_get_id(this->libObjPtr()); } - void name(const char * const name) + CommonStreamClass name(const bt2c::CStringView name) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); const auto status = bt_stream_class_set_name(this->libObjPtr(), name); if (status == BT_STREAM_CLASS_SET_NAME_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - void name(const std::string& name) - { - this->name(name.data()); + return *this; } - nonstd::optional name() const noexcept + bt2c::CStringView name() const noexcept { - const auto name = bt_stream_class_get_name(this->libObjPtr()); - - if (name) { - return name; - } - - return nonstd::nullopt; + return bt_stream_class_get_name(this->libObjPtr()); } - void assignsAutomaticEventClassId(const bool val) noexcept + CommonStreamClass assignsAutomaticEventClassId(const bool val) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); bt_stream_class_set_assigns_automatic_event_class_id(this->libObjPtr(), static_cast(val)); + return *this; } bool assignsAutomaticEventClassId() const noexcept @@ -1559,12 +1296,14 @@ public: bt_stream_class_assigns_automatic_event_class_id(this->libObjPtr())); } - void assignsAutomaticStreamId(const bool val) noexcept + CommonStreamClass assignsAutomaticStreamId(const bool val) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); bt_stream_class_set_assigns_automatic_stream_id(this->libObjPtr(), static_cast(val)); + return *this; } bool assignsAutomaticStreamId() const noexcept @@ -1572,15 +1311,18 @@ public: return static_cast(bt_stream_class_assigns_automatic_stream_id(this->libObjPtr())); } - void supportsPackets(const bool supportsPackets, const bool withBeginningDefaultClkSnapshot, - const bool withEndDefaultClkSnapshot) noexcept + CommonStreamClass supportsPackets(const bool supportsPackets, + const bool withBeginningDefaultClkSnapshot, + const bool withEndDefaultClkSnapshot) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); bt_stream_class_set_supports_packets(this->libObjPtr(), static_cast(supportsPackets), static_cast(withBeginningDefaultClkSnapshot), static_cast(withEndDefaultClkSnapshot)); + return *this; } bool supportsPackets() const noexcept @@ -1600,14 +1342,16 @@ public: bt_stream_class_packets_have_end_default_clock_snapshot(this->libObjPtr())); } - void supportsDiscardedEvents(const bool supportsDiscardedEvents, - const bool withDefaultClkSnapshots) noexcept + CommonStreamClass supportsDiscardedEvents(const bool supportsDiscardedEvents, + const bool withDefaultClkSnapshots) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); bt_stream_class_set_supports_discarded_events( this->libObjPtr(), static_cast(supportsDiscardedEvents), static_cast(withDefaultClkSnapshots)); + return *this; } bool supportsDiscardedEvents() const noexcept @@ -1621,14 +1365,16 @@ public: bt_stream_class_discarded_events_have_default_clock_snapshots(this->libObjPtr())); } - void supportsDiscardedPackets(const bool supportsDiscardedPackets, - const bool withDefaultClkSnapshots) noexcept + CommonStreamClass supportsDiscardedPackets(const bool supportsDiscardedPackets, + const bool withDefaultClkSnapshots) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); bt_stream_class_set_supports_discarded_packets( this->libObjPtr(), static_cast(supportsDiscardedPackets), static_cast(withDefaultClkSnapshots)); + return *this; } bool supportsDiscardedPackets() const noexcept @@ -1642,78 +1388,42 @@ public: bt_stream_class_discarded_packets_have_default_clock_snapshots(this->libObjPtr())); } - void defaultClockClass(const ClockClass& clkCls) + CommonStreamClass defaultClockClass(const ClockClass clkCls) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); const auto status = bt_stream_class_set_default_clock_class(this->libObjPtr(), clkCls.libObjPtr()); BT_ASSERT(status == BT_STREAM_CLASS_SET_DEFAULT_CLOCK_CLASS_STATUS_OK); + return *this; } - nonstd::optional defaultClockClass() const noexcept - { - const auto libObjPtr = _ConstSpec::defaultClockClass(this->libObjPtr()); - - if (libObjPtr) { - return ConstClockClass {libObjPtr}; - } - - return nonstd::nullopt; - } - - nonstd::optional<_ClockClass> defaultClockClass() noexcept + OptionalBorrowedObject<_ClockClass> defaultClockClass() const noexcept { - const auto libObjPtr = _Spec::defaultClockClass(this->libObjPtr()); - - if (libObjPtr) { - return _ClockClass {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::defaultClockClass(this->libObjPtr()); } - std::uint64_t size() const noexcept + std::uint64_t length() const noexcept { return bt_stream_class_get_event_class_count(this->libObjPtr()); } - ConstEventClass operator[](const std::uint64_t index) const noexcept - { - return ConstEventClass {_ConstSpec::eventClassByIndex(this->libObjPtr(), index)}; - } - - _EventClass operator[](const std::uint64_t index) noexcept + _EventClass operator[](const std::uint64_t index) const noexcept { return _EventClass {_Spec::eventClassByIndex(this->libObjPtr(), index)}; } - nonstd::optional eventClassById(const std::uint64_t id) const noexcept + OptionalBorrowedObject<_EventClass> eventClassById(const std::uint64_t id) const noexcept { - const auto libObjPtr = _ConstSpec::eventClassById(this->libObjPtr(), id); - - if (libObjPtr) { - return ConstEventClass {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::eventClassById(this->libObjPtr(), id); } - nonstd::optional<_EventClass> eventClassById(const std::uint64_t id) noexcept + CommonStreamClass packetContextFieldClass(const StructureFieldClass fc) const { - const auto libObjPtr = _Spec::eventClassById(this->libObjPtr(), id); - - if (libObjPtr) { - return _EventClass {libObjPtr}; - } - - return nonstd::nullopt; - } - - void packetContextFieldClass(const StructureFieldClass& fc) - { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); const auto status = bt_stream_class_set_packet_context_field_class(this->libObjPtr(), fc.libObjPtr()); @@ -1721,33 +1431,19 @@ public: if (status == BT_STREAM_CLASS_SET_FIELD_CLASS_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - nonstd::optional packetContextFieldClass() const noexcept - { - const auto libObjPtr = _ConstSpec::packetContextFieldClass(this->libObjPtr()); - - if (libObjPtr) { - return ConstStructureFieldClass {libObjPtr}; - } - - return nonstd::nullopt; + return *this; } - nonstd::optional<_StructureFieldClass> packetContextFieldClass() noexcept + OptionalBorrowedObject<_StructureFieldClass> packetContextFieldClass() const noexcept { - const auto libObjPtr = _Spec::packetContextFieldClass(this->libObjPtr()); - - if (libObjPtr) { - return _StructureFieldClass {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::packetContextFieldClass(this->libObjPtr()); } - void eventCommonContextFieldClass(const StructureFieldClass& fc) + CommonStreamClass eventCommonContextFieldClass(const StructureFieldClass fc) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); const auto status = bt_stream_class_set_event_common_context_field_class(this->libObjPtr(), fc.libObjPtr()); @@ -1755,44 +1451,26 @@ public: if (status == BT_STREAM_CLASS_SET_FIELD_CLASS_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - - nonstd::optional eventCommonContextFieldClass() const noexcept - { - const auto libObjPtr = _ConstSpec::eventCommonContextFieldClass(this->libObjPtr()); - - if (libObjPtr) { - return ConstStructureFieldClass {libObjPtr}; - } - return nonstd::nullopt; + return *this; } - nonstd::optional<_StructureFieldClass> eventCommonContextFieldClass() noexcept + OptionalBorrowedObject<_StructureFieldClass> eventCommonContextFieldClass() const noexcept { - const auto libObjPtr = _Spec::eventCommonContextFieldClass(this->libObjPtr()); - - if (libObjPtr) { - return _StructureFieldClass {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::eventCommonContextFieldClass(this->libObjPtr()); } template - void userAttributes(const CommonMapValue& userAttrs) + CommonStreamClass userAttributes(const CommonMapValue userAttrs) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStreamClass`."); bt_stream_class_set_user_attributes(this->libObjPtr(), userAttrs.libObjPtr()); + return *this; } - ConstMapValue userAttributes() const noexcept - { - return ConstMapValue {_ConstSpec::userAttributes(this->libObjPtr())}; - } - - UserAttributes userAttributes() noexcept + UserAttributes userAttributes() const noexcept { return UserAttributes {_Spec::userAttributes(this->libObjPtr())}; } @@ -1827,25 +1505,14 @@ struct TypeDescr : public StreamClassTypeDescr } /* namespace internal */ template -ConstStreamClass CommonEventClass::streamClass() const noexcept -{ - return ConstStreamClass {_ConstSpec::streamClass(this->libObjPtr())}; -} - -template -typename CommonEventClass::_StreamClass CommonEventClass::streamClass() noexcept +typename CommonEventClass::_StreamClass +CommonEventClass::streamClass() const noexcept { return _StreamClass {_Spec::streamClass(this->libObjPtr())}; } template -ConstStreamClass CommonStream::cls() const noexcept -{ - return ConstStreamClass {_ConstSpec::cls(this->libObjPtr())}; -} - -template -typename CommonStream::Class CommonStream::cls() noexcept +typename CommonStream::Class CommonStream::cls() const noexcept { return Class {_Spec::cls(this->libObjPtr())}; } @@ -1854,12 +1521,12 @@ namespace internal { struct TraceClassRefFuncs final { - static void get(const bt_trace_class * const libObjPtr) + static void get(const bt_trace_class * const libObjPtr) noexcept { bt_trace_class_get_ref(libObjPtr); } - static void put(const bt_trace_class * const libObjPtr) + static void put(const bt_trace_class * const libObjPtr) noexcept { bt_trace_class_put_ref(libObjPtr); } @@ -1915,46 +1582,46 @@ struct CommonTraceClassSpec final } /* namespace internal */ template -class CommonTraceClass final : public internal::BorrowedObj +class CommonTraceClass final : public BorrowedObject { private: - using typename internal::BorrowedObj::_ThisBorrowedObj; - using typename internal::BorrowedObj::_LibObjPtr; - using _ConstSpec = internal::CommonTraceClassSpec; + using typename BorrowedObject::_ThisBorrowedObject; + using _Spec = internal::CommonTraceClassSpec; - using _ThisCommonTraceClass = CommonTraceClass; - using _StreamClass = typename std::conditional::value, - CommonStreamClass, - CommonStreamClass>::type; + using _StreamClass = internal::DepType, + CommonStreamClass>; public: - using Shared = - internal::SharedObj<_ThisCommonTraceClass, LibObjT, internal::TraceClassRefFuncs>; + using typename BorrowedObject::LibObjPtr; + using Shared = SharedObject; + using UserAttributes = internal::DepUserAttrs; - using UserAttributes = - typename std::conditional::value, ConstMapValue, MapValue>::type; - - explicit CommonTraceClass(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObj {libObjPtr} + explicit CommonTraceClass(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } template - CommonTraceClass(const CommonTraceClass& traceClass) noexcept : - _ThisBorrowedObj {traceClass} + CommonTraceClass(const CommonTraceClass traceClass) noexcept : + _ThisBorrowedObject {traceClass} { } template - _ThisCommonTraceClass& operator=(const CommonTraceClass& traceClass) noexcept + CommonTraceClass operator=(const CommonTraceClass traceClass) noexcept { - _ThisBorrowedObj::operator=(traceClass); + _ThisBorrowedObject::operator=(traceClass); return *this; } - Trace::Shared instantiate(const Trace& trace) + CommonTraceClass asConst() const noexcept + { + return CommonTraceClass {*this}; + } + + Trace::Shared instantiate() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_trace_create(this->libObjPtr()); @@ -1962,9 +1629,9 @@ public: return Trace::Shared::createWithoutRef(libObjPtr); } - StreamClass::Shared createStreamClass() + StreamClass::Shared createStreamClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_stream_class_create(this->libObjPtr()); @@ -1972,9 +1639,9 @@ public: return StreamClass::Shared::createWithoutRef(libObjPtr); } - StreamClass::Shared createStreamClass(const std::uint64_t id) + StreamClass::Shared createStreamClass(const std::uint64_t id) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_stream_class_create_with_id(this->libObjPtr(), id); @@ -1982,9 +1649,9 @@ public: return StreamClass::Shared::createWithoutRef(libObjPtr); } - FieldClass::Shared createBoolFieldClass() + FieldClass::Shared createBoolFieldClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_bool_create(this->libObjPtr()); @@ -1992,9 +1659,9 @@ public: return FieldClass::Shared::createWithoutRef(libObjPtr); } - BitArrayFieldClass::Shared createBitArrayFieldClass(const std::uint64_t length) + BitArrayFieldClass::Shared createBitArrayFieldClass(const std::uint64_t length) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_bit_array_create(this->libObjPtr(), length); @@ -2002,9 +1669,9 @@ public: return BitArrayFieldClass::Shared::createWithoutRef(libObjPtr); } - IntegerFieldClass::Shared createUnsignedIntegerFieldClass() + IntegerFieldClass::Shared createUnsignedIntegerFieldClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_integer_unsigned_create(this->libObjPtr()); @@ -2012,9 +1679,9 @@ public: return IntegerFieldClass::Shared::createWithoutRef(libObjPtr); } - IntegerFieldClass::Shared createSignedIntegerFieldClass() + IntegerFieldClass::Shared createSignedIntegerFieldClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_integer_signed_create(this->libObjPtr()); @@ -2022,9 +1689,9 @@ public: return IntegerFieldClass::Shared::createWithoutRef(libObjPtr); } - UnsignedEnumerationFieldClass::Shared createUnsignedEnumerationFieldClass() + UnsignedEnumerationFieldClass::Shared createUnsignedEnumerationFieldClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_enumeration_unsigned_create(this->libObjPtr()); @@ -2032,9 +1699,9 @@ public: return UnsignedEnumerationFieldClass::Shared::createWithoutRef(libObjPtr); } - SignedEnumerationFieldClass::Shared createSignedEnumerationFieldClass() + SignedEnumerationFieldClass::Shared createSignedEnumerationFieldClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_enumeration_signed_create(this->libObjPtr()); @@ -2042,9 +1709,9 @@ public: return SignedEnumerationFieldClass::Shared::createWithoutRef(libObjPtr); } - FieldClass::Shared createSinglePrecisionRealFieldClass() + FieldClass::Shared createSinglePrecisionRealFieldClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_real_single_precision_create(this->libObjPtr()); @@ -2052,9 +1719,9 @@ public: return FieldClass::Shared::createWithoutRef(libObjPtr); } - FieldClass::Shared createDoublePrecisionRealFieldClass() + FieldClass::Shared createDoublePrecisionRealFieldClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_real_double_precision_create(this->libObjPtr()); @@ -2062,9 +1729,9 @@ public: return FieldClass::Shared::createWithoutRef(libObjPtr); } - FieldClass::Shared createStringFieldClass() + FieldClass::Shared createStringFieldClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_string_create(this->libObjPtr()); @@ -2072,10 +1739,10 @@ public: return FieldClass::Shared::createWithoutRef(libObjPtr); } - StaticArrayFieldClass::Shared createStaticArrayFieldClass(const FieldClass& elementFieldClass, - const std::uint64_t length) + StaticArrayFieldClass::Shared createStaticArrayFieldClass(const FieldClass elementFieldClass, + const std::uint64_t length) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_array_static_create( this->libObjPtr(), elementFieldClass.libObjPtr(), length); @@ -2084,9 +1751,9 @@ public: return StaticArrayFieldClass::Shared::createWithoutRef(libObjPtr); } - ArrayFieldClass::Shared createDynamicArrayFieldClass(const FieldClass& elementFieldClass) + ArrayFieldClass::Shared createDynamicArrayFieldClass(const FieldClass elementFieldClass) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_array_dynamic_create( this->libObjPtr(), elementFieldClass.libObjPtr(), nullptr); @@ -2096,10 +1763,10 @@ public: } DynamicArrayWithLengthFieldClass::Shared - createDynamicArrayFieldClass(const FieldClass& elementFieldClass, - const IntegerFieldClass& lengthFieldClass) + createDynamicArrayFieldClass(const FieldClass elementFieldClass, + const IntegerFieldClass lengthFieldClass) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_array_dynamic_create( this->libObjPtr(), elementFieldClass.libObjPtr(), lengthFieldClass.libObjPtr()); @@ -2108,9 +1775,9 @@ public: return DynamicArrayWithLengthFieldClass::Shared::createWithoutRef(libObjPtr); } - StructureFieldClass::Shared createStructureFieldClass() + StructureFieldClass::Shared createStructureFieldClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_structure_create(this->libObjPtr()); @@ -2118,9 +1785,9 @@ public: return StructureFieldClass::Shared::createWithoutRef(libObjPtr); } - OptionFieldClass::Shared createOptionFieldClass(const FieldClass& optionalFieldClass) + OptionFieldClass::Shared createOptionFieldClass(const FieldClass optionalFieldClass) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_option_without_selector_create( this->libObjPtr(), optionalFieldClass.libObjPtr()); @@ -2130,10 +1797,10 @@ public: } OptionWithBoolSelectorFieldClass::Shared - createOptionWithBoolSelectorFieldClass(const FieldClass& optionalFieldClass, - const FieldClass& selectorFieldClass) + createOptionWithBoolSelectorFieldClass(const FieldClass optionalFieldClass, + const FieldClass selectorFieldClass) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_option_with_selector_field_bool_create( this->libObjPtr(), optionalFieldClass.libObjPtr(), selectorFieldClass.libObjPtr()); @@ -2143,11 +1810,11 @@ public: } OptionWithUnsignedIntegerSelectorFieldClass::Shared - createOptionWithUnsignedIntegerSelectorFieldClass(const FieldClass& optionalFieldClass, - const IntegerFieldClass& selectorFieldClass, - const ConstUnsignedIntegerRangeSet& ranges) + createOptionWithUnsignedIntegerSelectorFieldClass( + const FieldClass optionalFieldClass, const IntegerFieldClass selectorFieldClass, + const ConstUnsignedIntegerRangeSet ranges) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_option_with_selector_field_integer_unsigned_create( this->libObjPtr(), optionalFieldClass.libObjPtr(), selectorFieldClass.libObjPtr(), @@ -2158,11 +1825,11 @@ public: } OptionWithSignedIntegerSelectorFieldClass::Shared - createOptionWithSignedIntegerSelectorFieldClass(const FieldClass& optionalFieldClass, - const IntegerFieldClass& selectorFieldClass, - const ConstSignedIntegerRangeSet& ranges) + createOptionWithSignedIntegerSelectorFieldClass(const FieldClass optionalFieldClass, + const IntegerFieldClass selectorFieldClass, + const ConstSignedIntegerRangeSet ranges) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_option_with_selector_field_integer_signed_create( this->libObjPtr(), optionalFieldClass.libObjPtr(), selectorFieldClass.libObjPtr(), @@ -2172,9 +1839,9 @@ public: return OptionWithSignedIntegerSelectorFieldClass::Shared::createWithoutRef(libObjPtr); } - VariantWithoutSelectorFieldClass::Shared createVariantFieldClass() + VariantWithoutSelectorFieldClass::Shared createVariantFieldClass() const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_variant_create(this->libObjPtr(), nullptr); @@ -2183,27 +1850,28 @@ public: } VariantWithUnsignedIntegerSelectorFieldClass::Shared - createVariantWithUnsignedIntegerSelectorFieldClass(const IntegerFieldClass& selectorFieldClass) + createVariantWithUnsignedIntegerSelectorFieldClass( + const IntegerFieldClass selectorFieldClass) const { - return VariantWithUnsignedIntegerSelectorFieldClass { - this->_createVariantWithIntegerSelectorFieldClass(selectorFieldClass)} - .shared(); + return this->_createVariantWithIntegerSelectorFieldClass< + VariantWithUnsignedIntegerSelectorFieldClass>(selectorFieldClass); } VariantWithSignedIntegerSelectorFieldClass::Shared - createVariantWithSignedIntegerSelectorFieldClass(const IntegerFieldClass& selectorFieldClass) + createVariantWithSignedIntegerSelectorFieldClass( + const IntegerFieldClass selectorFieldClass) const { - return VariantWithSignedIntegerSelectorFieldClass { - this->_createVariantWithIntegerSelectorFieldClass(selectorFieldClass)} - .shared(); + return this->_createVariantWithIntegerSelectorFieldClass< + VariantWithSignedIntegerSelectorFieldClass>(selectorFieldClass); } - void assignsAutomaticStreamClassId(const bool val) noexcept + CommonTraceClass assignsAutomaticStreamClassId(const bool val) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); bt_trace_class_set_assigns_automatic_stream_class_id(this->libObjPtr(), static_cast(val)); + return *this; } bool assignsAutomaticStreamClassId() const noexcept @@ -2212,57 +1880,31 @@ public: bt_trace_class_assigns_automatic_stream_class_id(this->libObjPtr())); } - std::uint64_t size() const noexcept + std::uint64_t length() const noexcept { return bt_trace_class_get_stream_class_count(this->libObjPtr()); } - ConstStreamClass operator[](const std::uint64_t index) const noexcept - { - return ConstStreamClass {_ConstSpec::streamClassByIndex(this->libObjPtr(), index)}; - } - - _StreamClass operator[](const std::uint64_t index) noexcept + _StreamClass operator[](const std::uint64_t index) const noexcept { return _StreamClass {_Spec::streamClassByIndex(this->libObjPtr(), index)}; } - nonstd::optional streamClassById(const std::uint64_t id) const noexcept - { - const auto libObjPtr = _ConstSpec::streamClassById(this->libObjPtr(), id); - - if (libObjPtr) { - return ConstStreamClass {libObjPtr}; - } - - return nonstd::nullopt; - } - - nonstd::optional<_StreamClass> streamClassById(const std::uint64_t id) noexcept + OptionalBorrowedObject<_StreamClass> streamClassById(const std::uint64_t id) const noexcept { - const auto libObjPtr = _Spec::streamClassById(this->libObjPtr(), id); - - if (libObjPtr) { - return _StreamClass {libObjPtr}; - } - - return nonstd::nullopt; + return _Spec::streamClassById(this->libObjPtr(), id); } template - void userAttributes(const CommonMapValue& userAttrs) + CommonTraceClass userAttributes(const CommonMapValue userAttrs) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); bt_trace_class_set_user_attributes(this->libObjPtr(), userAttrs.libObjPtr()); + return *this; } - ConstMapValue userAttributes() const noexcept - { - return ConstMapValue {_ConstSpec::userAttributes(this->libObjPtr())}; - } - - UserAttributes userAttributes() noexcept + UserAttributes userAttributes() const noexcept { return UserAttributes {_Spec::userAttributes(this->libObjPtr())}; } @@ -2273,16 +1915,17 @@ public: } private: - bt_field_class * - _createVariantWithIntegerSelectorFieldClass(const IntegerFieldClass& selectorFieldClass) + template + typename ObjT::Shared + _createVariantWithIntegerSelectorFieldClass(const IntegerFieldClass selectorFieldClass) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstTraceClass`."); const auto libObjPtr = bt_field_class_variant_create(this->libObjPtr(), selectorFieldClass.libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return libObjPtr; + return ObjT::Shared::createWithoutRef(libObjPtr); } }; @@ -2310,25 +1953,14 @@ struct TypeDescr : public TraceClassTypeDescr } /* namespace internal */ template -ConstTraceClass CommonStreamClass::traceClass() const noexcept -{ - return ConstTraceClass {_ConstSpec::traceClass(this->libObjPtr())}; -} - -template -typename CommonStreamClass::_TraceClass CommonStreamClass::traceClass() noexcept +typename CommonStreamClass::_TraceClass +CommonStreamClass::traceClass() const noexcept { return _TraceClass {_Spec::traceClass(this->libObjPtr())}; } template -ConstTraceClass CommonTrace::cls() const noexcept -{ - return ConstTraceClass {_ConstSpec::cls(this->libObjPtr())}; -} - -template -typename CommonTrace::Class CommonTrace::cls() noexcept +typename CommonTrace::Class CommonTrace::cls() const noexcept { return Class {_Spec::cls(this->libObjPtr())}; }