From 2e07420571301f11ae2a7efa57d7594fe8bc35e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 5 Aug 2018 00:00:26 +0200 Subject: [PATCH 1/7] Add missing include for memcmp memcmp is defined in cstring, yet it wasn't included in the files that tried using it. --- include/uuid.h | 3 ++- test/test_uuid.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/uuid.h b/include/uuid.h index 10d63e4..69f587d 100644 --- a/include/uuid.h +++ b/include/uuid.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -869,4 +870,4 @@ namespace std return static_cast(hasher(uuids::to_string(uuid))); } }; -} \ No newline at end of file +} diff --git a/test/test_uuid.cpp b/test/test_uuid.cpp index 8e418b1..f7a601e 100644 --- a/test/test_uuid.cpp +++ b/test/test_uuid.cpp @@ -1,6 +1,7 @@ #include "uuid.h" #include "catch.hpp" +#include #include #include #include @@ -288,4 +289,4 @@ TEST_CASE("Test as_bytes", "[ops]") REQUIRE(memcmp(view.data(), arr.data(), arr.size()) == 0); } -} \ No newline at end of file +} From adb24b3d9d0369387b93f5112146dec12769514b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 5 Aug 2018 00:01:20 +0200 Subject: [PATCH 2/7] Ensure structs get defined in correct order uuid_version tried to use (yet) unknown uuid_error. Reorder their definitions to address this issue. --- include/uuid.h | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/include/uuid.h b/include/uuid.h index 69f587d..8661053 100644 --- a/include/uuid.h +++ b/include/uuid.h @@ -283,6 +283,19 @@ namespace uuids reserved }; + struct uuid_error : public std::runtime_error + { + explicit uuid_error(std::string_view message) + : std::runtime_error(message.data()) + { + } + + explicit uuid_error(char const * message) + : std::runtime_error(message) + { + } + }; + // indicated by a bit pattern in octet 6, marked with M in xxxxxxxx-xxxx-Mxxx-xxxx-xxxxxxxxxxxx enum class uuid_version { @@ -573,19 +586,6 @@ namespace uuids friend std::basic_ostream & operator<<(std::basic_ostream &s, uuid const & id); }; - struct uuid_error : public std::runtime_error - { - explicit uuid_error(std::string_view message) - : std::runtime_error(message.data()) - { - } - - explicit uuid_error(char const * message) - : std::runtime_error(message) - { - } - }; - inline bool operator== (uuid const& lhs, uuid const& rhs) noexcept { return lhs.data == rhs.data; From f7d5d69fd7dc0dfe5a8fb749f4f81dfba7256987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 5 Aug 2018 00:05:34 +0200 Subject: [PATCH 3/7] Mark unused variables in test --- test/test_uuid.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_uuid.cpp b/test/test_uuid.cpp index f7a601e..bb9564b 100644 --- a/test/test_uuid.cpp +++ b/test/test_uuid.cpp @@ -234,10 +234,10 @@ TEST_CASE("Test iterators", "[iter]") TEST_CASE("Test constexpr", "[const]") { constexpr uuid empty; - constexpr bool isnil = empty.is_nil(); - constexpr size_t size = empty.size(); - constexpr uuid_variant variant = empty.variant(); - constexpr uuid_version version = empty.version(); + [[maybe_unused]] constexpr bool isnil = empty.is_nil(); + [[maybe_unused]] constexpr size_t size = empty.size(); + [[maybe_unused]] constexpr uuid_variant variant = empty.variant(); + [[maybe_unused]] constexpr uuid_version version = empty.version(); } TEST_CASE("Test size", "[operators]") From 4bcf7136a57c4230d021da8efa8c3b23ae530760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 5 Aug 2018 00:07:42 +0200 Subject: [PATCH 4/7] Avoid clash with libuuid's uuid_variant symbol https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/tree/lib/uuid/uuid.h.in?id=94f20cd51522dd718bc4a459ea65d72a722d1874#n97 --- test/test_uuid.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_uuid.cpp b/test/test_uuid.cpp index bb9564b..4387968 100644 --- a/test/test_uuid.cpp +++ b/test/test_uuid.cpp @@ -236,7 +236,7 @@ TEST_CASE("Test constexpr", "[const]") constexpr uuid empty; [[maybe_unused]] constexpr bool isnil = empty.is_nil(); [[maybe_unused]] constexpr size_t size = empty.size(); - [[maybe_unused]] constexpr uuid_variant variant = empty.variant(); + [[maybe_unused]] constexpr uuids::uuid_variant variant = empty.variant(); [[maybe_unused]] constexpr uuid_version version = empty.version(); } From 43ff649cfe3ce9cef607314f1359390c5332064f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 5 Aug 2018 00:16:55 +0200 Subject: [PATCH 5/7] Mark cmake project as C++-only --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46a4e8a..a192031 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.7.0) -project(test_uuid) +project(test_uuid CXX) include_directories(${CMAKE_SOURCE_DIR}/include) include_directories(${CMAKE_SOURCE_DIR}/catch) From 99d1fade3a5a0ecd024895425711971ecc6344fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 5 Aug 2018 00:23:08 +0200 Subject: [PATCH 6/7] Explicitly initialise member fields, as required by constexpr --- include/uuid.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/uuid.h b/include/uuid.h index 8661053..1a0dc51 100644 --- a/include/uuid.h +++ b/include/uuid.h @@ -457,7 +457,7 @@ namespace uuids using value_type = uint8_t; public: - constexpr uuid() noexcept = default; + constexpr uuid() noexcept : data({}) {}; explicit uuid(gsl::span bytes) { From 257fec44b65e41083610e06a7110876d6b487a1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 5 Aug 2018 00:26:59 +0200 Subject: [PATCH 7/7] Drop constexpr from uuid::as_bytes() due to reinterpret_cast --- include/uuid.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/uuid.h b/include/uuid.h index 1a0dc51..cccd57c 100644 --- a/include/uuid.h +++ b/include/uuid.h @@ -515,7 +515,7 @@ namespace uuids constexpr uuid_const_iterator begin() const noexcept { return uuid_const_iterator(&data[0], 0); } constexpr uuid_const_iterator end() const noexcept { return uuid_const_iterator(&data[0], 16); } - constexpr inline gsl::span as_bytes() const + inline gsl::span as_bytes() const { return gsl::span(reinterpret_cast(data.data()), 16); }