[PATCH] D109205: [NFC][support] Extract `IsHashableData` out of class

Alexandre Rames via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 2 16:10:30 PDT 2021


arames created this revision.
arames added a reviewer: dexonsmith.
arames requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Extract `HashBuilder::IsHashableData` out of class; it does not depend on
template parametres.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D109205

Files:
  llvm/include/llvm/Support/HashBuilder.h


Index: llvm/include/llvm/Support/HashBuilder.h
===================================================================
--- llvm/include/llvm/Support/HashBuilder.h
+++ llvm/include/llvm/Support/HashBuilder.h
@@ -26,6 +26,15 @@
 
 namespace llvm {
 
+namespace hashbuilder_detail {
+/// Trait to indicate whether a type's bits can be hashed directly (after
+/// endianness correction).
+template <typename U>
+struct IsHashableData
+    : std::integral_constant<bool, is_integral_or_enum<U>::value> {};
+
+} // namespace hashbuilder_detail
+
 /// Declares the hasher member, and functions forwarding directly to the hasher.
 template <typename HasherT> class HashBuilderBase {
 public:
@@ -80,11 +89,6 @@
 class HashBuilderImpl : public HashBuilderBase<HasherT> {
   static_assert(Endianness != support::endianness::native,
                 "HashBuilder should canonicalize endianness");
-  /// Trait to indicate whether a type's bits can be hashed directly (after
-  /// endianness correction).
-  template <typename U>
-  struct IsHashableData
-      : std::integral_constant<bool, is_integral_or_enum<U>::value> {};
 
 public:
   explicit HashBuilderImpl(HasherT &Hasher)
@@ -95,7 +99,7 @@
 
   /// Implement hashing for hashable data types, e.g. integral or enum values.
   template <typename T>
-  std::enable_if_t<IsHashableData<T>::value, HashBuilderImpl &> add(T Value) {
+  std::enable_if_t<hashbuilder_detail::IsHashableData<T>::value, HashBuilderImpl &> add(T Value) {
     return adjustForEndiannessAndAdd(Value);
   }
 
@@ -118,7 +122,7 @@
     // details of `ArrayRef::begin()` and `ArrayRef::end()`. Explicitly call
     // `update` to guarantee the fast path.
     add(Value.size());
-    if (IsHashableData<T>::value &&
+    if (hashbuilder_detail::IsHashableData<T>::value &&
         Endianness == support::endian::system_endianness()) {
       this->update(
           makeArrayRef(reinterpret_cast<const uint8_t *>(Value.begin()),
@@ -242,7 +246,7 @@
   /// ```
   template <typename T>
   std::enable_if_t<is_detected<HasAddHashT, T>::value &&
-                       !IsHashableData<T>::value,
+                       !hashbuilder_detail::IsHashableData<T>::value,
                    HashBuilderImpl &>
   add(const T &Value) {
     addHash(*this, Value);
@@ -334,7 +338,7 @@
   }
 
   template <typename T>
-  std::enable_if_t<IsHashableData<T>::value &&
+  std::enable_if_t<hashbuilder_detail::IsHashableData<T>::value &&
                        Endianness == support::endian::system_endianness(),
                    HashBuilderImpl &>
   addRangeElementsImpl(T *First, T *Last, std::forward_iterator_tag) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D109205.370441.patch
Type: text/x-patch
Size: 2629 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210902/65301aed/attachment.bin>


More information about the llvm-commits mailing list