From: Alexandre Rames Date: Thu, 2 Sep 2021 23:13:28 +0000 (-0700) Subject: [NFC][support] Extract `IsHashableData` out of class X-Git-Tag: upstream/15.0.7~32084 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0e627c93be8c87c4ccc245ff86457a7b4f581144;p=platform%2Fupstream%2Fllvm.git [NFC][support] Extract `IsHashableData` out of class Extract `HashBuilder::IsHashableData` out of class; it does not depend on template parametres. Reviewed By: dexonsmith Differential Revision: https://reviews.llvm.org/D109205 --- diff --git a/llvm/include/llvm/Support/HashBuilder.h b/llvm/include/llvm/Support/HashBuilder.h index 23f73f1..9ff5acf 100644 --- a/llvm/include/llvm/Support/HashBuilder.h +++ b/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 +struct IsHashableData + : std::integral_constant::value> {}; + +} // namespace hashbuilder_detail + /// Declares the hasher member, and functions forwarding directly to the hasher. template class HashBuilderBase { public: @@ -80,11 +89,6 @@ template class HashBuilderImpl : public HashBuilderBase { 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 - struct IsHashableData - : std::integral_constant::value> {}; public: explicit HashBuilderImpl(HasherT &Hasher) @@ -95,7 +99,9 @@ public: /// Implement hashing for hashable data types, e.g. integral or enum values. template - std::enable_if_t::value, HashBuilderImpl &> add(T Value) { + std::enable_if_t::value, + HashBuilderImpl &> + add(T Value) { return adjustForEndiannessAndAdd(Value); } @@ -118,7 +124,7 @@ public: // details of `ArrayRef::begin()` and `ArrayRef::end()`. Explicitly call // `update` to guarantee the fast path. add(Value.size()); - if (IsHashableData::value && + if (hashbuilder_detail::IsHashableData::value && Endianness == support::endian::system_endianness()) { this->update( makeArrayRef(reinterpret_cast(Value.begin()), @@ -242,7 +248,7 @@ public: /// ``` template std::enable_if_t::value && - !IsHashableData::value, + !hashbuilder_detail::IsHashableData::value, HashBuilderImpl &> add(const T &Value) { addHash(*this, Value); @@ -334,7 +340,7 @@ private: } template - std::enable_if_t::value && + std::enable_if_t::value && Endianness == support::endian::system_endianness(), HashBuilderImpl &> addRangeElementsImpl(T *First, T *Last, std::forward_iterator_tag) {