Sort includes in C++ files
[babeltrace.git] / src / cpp-common / uuid-view.hpp
index 35b0b0624180e2b0654fc6a4bf3c5c2d3c02622e..e39a40e085ae1f00b67c4e9a457c0051628a4a18 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Philippe Proulx <pproulx@efficios.com>
+ * SPDX-FileCopyrightText: 2020 Philippe Proulx <pproulx@efficios.com>
  *
  * SPDX-License-Identifier: MIT
  */
@@ -7,24 +7,58 @@
 #ifndef BABELTRACE_CPP_COMMON_UUID_VIEW_HPP
 #define BABELTRACE_CPP_COMMON_UUID_VIEW_HPP
 
+#include <algorithm>
+#include <array>
 #include <cstdint>
+#include <string>
 
 #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 +69,45 @@ public:
         return !(*this == other);
     }
 
-    std::string string() const
+    bool operator<(const UuidView& other) const noexcept
     {
-        std::string s;
+        return bt_uuid_compare(_mUuid, other._mUuid) < 0;
+    }
 
-        s.resize(BT_UUID_STR_LEN);
-        bt_uuid_to_str(_mUuid, s.data());
+    static constexpr std::size_t size() noexcept
+    {
+        return BT_UUID_LEN;
+    }
 
-        return s;
+    const Val *data() const noexcept
+    {
+        return _mUuid;
     }
 
-    static std::size_t size() noexcept
+    Val operator[](const std::size_t index) const noexcept
     {
-        return BT_UUID_LEN;
+        return _mUuid[index];
     }
 
-    const std::uint8_t *data() const noexcept
+    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 */
This page took 0.025709 seconds and 4 git commands to generate.