X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=src%2Fcpp-common%2Fuuid-view.hpp;h=d719d877a3b87b306cd226845aa2e7d02a8485e8;hb=9bdf67d7e10e435e427d85fc534cc8980b3443e2;hp=78116642a6186e87d2d8d673c84cdde739f75d7c;hpb=b239731a3e335b5f7371fcfcfa553013a58733e3;p=babeltrace.git diff --git a/src/cpp-common/uuid-view.hpp b/src/cpp-common/uuid-view.hpp index 78116642..d719d877 100644 --- a/src/cpp-common/uuid-view.hpp +++ b/src/cpp-common/uuid-view.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Philippe Proulx + * SPDX-FileCopyrightText: 2020 Philippe Proulx * * SPDX-License-Identifier: MIT */ @@ -7,24 +7,57 @@ #ifndef BABELTRACE_CPP_COMMON_UUID_VIEW_HPP #define BABELTRACE_CPP_COMMON_UUID_VIEW_HPP +#include #include +#include #include "common/assert.h" #include "common/uuid.h" namespace bt2_common { -class UuidView +class Uuid; + +/* + * A view on existing UUID data. + * + * A `UuidView` object doesn't contain its UUID data: see `Uuid` for a + * UUID data container. + */ +class UuidView final { public: - explicit UuidView(const std::uint8_t * const uuid) noexcept : _mUuid {uuid} + using Val = std::uint8_t; + using ConstIter = const Val *; + +public: + explicit UuidView(const Val * const uuid) noexcept : _mUuid {uuid} { BT_ASSERT_DBG(uuid); } + explicit UuidView(const Uuid& uuid) noexcept; UuidView(const UuidView&) noexcept = default; UuidView& operator=(const UuidView&) noexcept = default; + UuidView& operator=(const Val * const uuid) noexcept + { + _mUuid = uuid; + return *this; + } + + operator Uuid() const noexcept; + + std::string str() const + { + std::string s; + + s.resize(BT_UUID_STR_LEN); + bt_uuid_to_str(_mUuid, &s[0]); + + return s; + } + bool operator==(const UuidView& other) const noexcept { return bt_uuid_compare(_mUuid, other._mUuid) == 0; @@ -35,28 +68,47 @@ public: return !(*this == other); } - std::string string() const + bool operator<(const UuidView& other) const noexcept { - std::array buf; - - bt_uuid_to_str(_mUuid, buf.data()); - return {buf.data(), buf.size()}; + return bt_uuid_compare(_mUuid, other._mUuid) < 0; } - static std::size_t size() noexcept + static constexpr std::size_t size() noexcept { return BT_UUID_LEN; } - const std::uint8_t *data() const noexcept + const Val *data() const noexcept + { + return _mUuid; + } + + Val operator[](const std::size_t index) const noexcept + { + return _mUuid[index]; + } + + ConstIter begin() const noexcept { return _mUuid; } + ConstIter end() const noexcept + { + return _mUuid + this->size(); + } + + bool isNil() const noexcept + { + return std::all_of(this->begin(), this->end(), [](const std::uint8_t byte) { + return byte == 0; + }); + } + private: - const std::uint8_t *_mUuid; + const Val *_mUuid; }; -} // namespace bt2_common +} /* namespace bt2_common */ -#endif // BABELTRACE_CPP_COMMON_UUID_VIEW_HPP +#endif /* BABELTRACE_CPP_COMMON_UUID_VIEW_HPP */