From 61b93e778bf58f6db4d2f3d8dd6ec67de25598ea Mon Sep 17 00:00:00 2001
From: Henri Beauchamp <sldevel@users.noreply.github.com>
Date: Tue, 7 Feb 2023 00:17:22 +0100
Subject: [PATCH] SL-19110 Make HBXXH* classes no-copy. (#72)

These classes are not trivially copyable because of the mState pointer on an internal
XXH3 state that would have to be explicitely copied.
While it would be possible to add custom copy constructor and operator for them, it
does not really make sense to allow copying an instance of these classes, since all we
care about storing and copying is the digest (which is either an U64 or an LLUUID).
---
 indra/llcommon/hbxxh.h | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/indra/llcommon/hbxxh.h b/indra/llcommon/hbxxh.h
index 236716722ad..9c0e9cf172b 100644
--- a/indra/llcommon/hbxxh.h
+++ b/indra/llcommon/hbxxh.h
@@ -96,6 +96,15 @@ class HBXXH64
         }
     }
 
+    // Make this class no-copy (it would be possible, with custom copy
+    // operators, but it is not trivially copyable, because of the mState
+    // pointer): it does not really make sense to allow copying it anyway,
+    // since all we care about is the resulting digest (so you should only
+    // need and care about storing/copying the digest and not a class
+    // instance).
+    HBXXH64(const HBXXH64&) noexcept = delete;
+    HBXXH64& operator=(const HBXXH64&) noexcept = delete;
+
     ~HBXXH64();
 
     void update(const void* buffer, size_t len);
@@ -199,6 +208,15 @@ class HBXXH128
         }
     }
 
+    // Make this class no-copy (it would be possible, with custom copy
+    // operators, but it is not trivially copyable, because of the mState
+    // pointer): it does not really make sense to allow copying it anyway,
+    // since all we care about is the resulting digest (so you should only
+    // need and care about storing/copying the digest and not a class
+    // instance).
+    HBXXH128(const HBXXH128&) noexcept = delete;
+    HBXXH128& operator=(const HBXXH128&) noexcept = delete;
+
     ~HBXXH128();
 
     void update(const void* buffer, size_t len);
-- 
GitLab