X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Fcpp-common%2Fbt2%2Fclock-class.hpp;h=5b80890d2e7deaf936bf64872afa35f54e04cbf8;hb=77160ac2dcf3bcc30b079af4baeffee604e11037;hp=1aac1459b94c5d4b47f3e19bc48d96bca3bdea9c;hpb=26b9d24c236956140a3bd8f79d19768b0a5aa006;p=babeltrace.git diff --git a/src/cpp-common/bt2/clock-class.hpp b/src/cpp-common/bt2/clock-class.hpp index 1aac1459..5b80890d 100644 --- a/src/cpp-common/bt2/clock-class.hpp +++ b/src/cpp-common/bt2/clock-class.hpp @@ -8,33 +8,31 @@ #define BABELTRACE_CPP_COMMON_BT2_CLOCK_CLASS_HPP #include -#include #include #include -#include "cpp-common/optional.hpp" -#include "cpp-common/string_view.hpp" -#include "cpp-common/uuid-view.hpp" +#include "cpp-common/bt2c/c-string-view.hpp" +#include "cpp-common/bt2c/uuid.hpp" +#include "cpp-common/bt2s/optional.hpp" #include "borrowed-object.hpp" #include "exc.hpp" #include "internal/utils.hpp" -#include "shared-obj.hpp" +#include "shared-object.hpp" #include "value.hpp" namespace bt2 { - namespace internal { struct ClockClassRefFuncs final { - static void get(const bt_clock_class * const libObjPtr) + static void get(const bt_clock_class * const libObjPtr) noexcept { bt_clock_class_get_ref(libObjPtr); } - static void put(const bt_clock_class * const libObjPtr) + static void put(const bt_clock_class * const libObjPtr) noexcept { bt_clock_class_put_ref(libObjPtr); } @@ -65,17 +63,14 @@ struct CommonClockClassSpec final } /* namespace internal */ -class ClockClassOffset final +class ClockOffset final { public: - explicit ClockClassOffset(const std::int64_t seconds, const std::uint64_t cycles) : + explicit ClockOffset(const std::int64_t seconds, const std::uint64_t cycles) : _mSeconds {seconds}, _mCycles {cycles} { } - ClockClassOffset(const ClockClassOffset&) noexcept = default; - ClockClassOffset& operator=(const ClockClassOffset&) noexcept = default; - std::int64_t seconds() const noexcept { return _mSeconds; @@ -96,16 +91,13 @@ class CommonClockClass final : public BorrowedObject { private: using typename BorrowedObject::_ThisBorrowedObject; - using typename BorrowedObject::_LibObjPtr; - using _ThisCommonClockClass = CommonClockClass; public: - using Shared = SharedObj<_ThisCommonClockClass, LibObjT, internal::ClockClassRefFuncs>; + using typename BorrowedObject::LibObjPtr; + using Shared = SharedObject; + using UserAttributes = internal::DepUserAttrs; - using UserAttributes = - typename std::conditional::value, ConstMapValue, MapValue>::type; - - explicit CommonClockClass(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} + explicit CommonClockClass(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } @@ -116,17 +108,23 @@ public: } template - _ThisCommonClockClass& operator=(const CommonClockClass clkClass) noexcept + CommonClockClass& operator=(const CommonClockClass clkClass) noexcept { _ThisBorrowedObject::operator=(clkClass); return *this; } - void frequency(const std::uint64_t frequency) noexcept + CommonClockClass asConst() const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + return CommonClockClass {*this}; + } + + CommonClockClass frequency(const std::uint64_t frequency) const noexcept + { + static_assert(!std::is_const::value, "Not available with `bt2::ConstClockClass`."); bt_clock_class_set_frequency(this->libObjPtr(), frequency); + return *this; } std::uint64_t frequency() const noexcept @@ -134,27 +132,30 @@ public: return bt_clock_class_get_frequency(this->libObjPtr()); } - void offset(const ClockClassOffset& offset) noexcept + CommonClockClass offsetFromOrigin(const ClockOffset& offsetFromOrigin) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstClockClass`."); - bt_clock_class_set_offset(this->libObjPtr(), offset.seconds(), offset.cycles()); + bt_clock_class_set_offset(this->libObjPtr(), offsetFromOrigin.seconds(), + offsetFromOrigin.cycles()); + return *this; } - ClockClassOffset offset() const noexcept + ClockOffset offsetFromOrigin() const noexcept { std::int64_t seconds; std::uint64_t cycles; bt_clock_class_get_offset(this->libObjPtr(), &seconds, &cycles); - return ClockClassOffset {seconds, cycles}; + return ClockOffset {seconds, cycles}; } - void precision(const std::uint64_t precision) noexcept + CommonClockClass precision(const std::uint64_t precision) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstClockClass`."); bt_clock_class_set_precision(this->libObjPtr(), precision); + return *this; } std::uint64_t precision() const noexcept @@ -162,12 +163,13 @@ public: return bt_clock_class_get_precision(this->libObjPtr()); } - void originIsUnixEpoch(const bool originIsUnixEpoch) noexcept + CommonClockClass originIsUnixEpoch(const bool originIsUnixEpoch) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstClockClass`."); bt_clock_class_set_origin_is_unix_epoch(this->libObjPtr(), static_cast(originIsUnixEpoch)); + return *this; } bool originIsUnixEpoch() const noexcept @@ -175,91 +177,71 @@ public: return static_cast(bt_clock_class_origin_is_unix_epoch(this->libObjPtr())); } - void name(const char * const name) + CommonClockClass 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::ConstClockClass`."); const auto status = bt_clock_class_set_name(this->libObjPtr(), name); if (status == BT_CLOCK_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_clock_class_get_name(this->libObjPtr()); - - if (name) { - return name; - } - - return nonstd::nullopt; + return bt_clock_class_get_name(this->libObjPtr()); } - void description(const char * const description) + CommonClockClass description(const bt2c::CStringView description) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstClockClass`."); const auto status = bt_clock_class_set_description(this->libObjPtr(), description); if (status == BT_CLOCK_CLASS_SET_DESCRIPTION_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - void description(const std::string& description) - { - this->description(description.data()); + return *this; } - nonstd::optional description() const noexcept + bt2c::CStringView description() const noexcept { - const auto description = bt_clock_class_get_description(this->libObjPtr()); - - if (description) { - return description; - } - - return nonstd::nullopt; + return bt_clock_class_get_description(this->libObjPtr()); } - void uuid(const std::uint8_t * const uuid) noexcept + CommonClockClass uuid(const bt2c::UuidView uuid) const noexcept { - bt_clock_class_set_uuid(this->libObjPtr(), uuid); + static_assert(!std::is_const::value, "Not available with `bt2::ConstClockClass`."); + + bt_clock_class_set_uuid(this->libObjPtr(), uuid.data()); + return *this; } - nonstd::optional uuid() const noexcept + bt2s::optional uuid() const noexcept { const auto uuid = bt_clock_class_get_uuid(this->libObjPtr()); if (uuid) { - return bt2_common::UuidView {uuid}; + return bt2c::UuidView {uuid}; } - return nonstd::nullopt; + return bt2s::nullopt; } template - void userAttributes(const CommonMapValue userAttrs) + CommonClockClass 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::ConstClockClass`."); bt_clock_class_set_user_attributes(this->libObjPtr(), userAttrs.libObjPtr()); + return *this; } - ConstMapValue userAttributes() const noexcept - { - return ConstMapValue {internal::CommonClockClassSpec::userAttributes( - this->libObjPtr())}; - } - - UserAttributes userAttributes() noexcept + UserAttributes userAttributes() const noexcept { return UserAttributes { internal::CommonClockClassSpec::userAttributes(this->libObjPtr())};