forked from mirrors/gecko-dev
Bug 1480660 - Remove ConstExprHash{UntilZero,String}(). r=froydnj
They were workarounds for bugs in GCC 4.9, which is no longer supported. --HG-- extra : rebase_source : b793b4643e1e44199afdb8e8b35f930e02664be8
This commit is contained in:
parent
b0b2b901d0
commit
097b276f5c
2 changed files with 5 additions and 30 deletions
|
|
@ -249,29 +249,16 @@ HashGeneric(Args... aArgs)
|
||||||
namespace detail {
|
namespace detail {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
HashNumber
|
constexpr HashNumber
|
||||||
HashUntilZero(const T* aStr)
|
HashUntilZero(const T* aStr)
|
||||||
{
|
{
|
||||||
HashNumber hash = 0;
|
HashNumber hash = 0;
|
||||||
for (T c; (c = *aStr); aStr++) {
|
for (; T c = *aStr; aStr++) {
|
||||||
hash = AddToHash(hash, c);
|
hash = AddToHash(hash, c);
|
||||||
}
|
}
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is a `constexpr` alternative to HashUntilZero(const T*). It should
|
|
||||||
// only be used for compile-time computation because it uses recursion.
|
|
||||||
// XXX: once support for GCC 4.9 is dropped, this function should be removed
|
|
||||||
// and HashUntilZero(const T*) should be made `constexpr`.
|
|
||||||
template<typename T>
|
|
||||||
constexpr HashNumber
|
|
||||||
ConstExprHashUntilZero(const T* aStr, HashNumber aHash)
|
|
||||||
{
|
|
||||||
return !*aStr
|
|
||||||
? aHash
|
|
||||||
: ConstExprHashUntilZero(aStr + 1, AddToHash(aHash, *aStr));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
HashNumber
|
HashNumber
|
||||||
HashKnownLength(const T* aStr, size_t aLength)
|
HashKnownLength(const T* aStr, size_t aLength)
|
||||||
|
|
@ -310,25 +297,13 @@ HashString(const unsigned char* aStr, size_t aLength)
|
||||||
return detail::HashKnownLength(aStr, aLength);
|
return detail::HashKnownLength(aStr, aLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
MOZ_MUST_USE inline HashNumber
|
|
||||||
HashString(const char16_t* aStr)
|
|
||||||
{
|
|
||||||
return detail::HashUntilZero(aStr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is a `constexpr` alternative to HashString(const char16_t*). It should
|
|
||||||
// only be used for compile-time computation because it uses recursion.
|
|
||||||
//
|
|
||||||
// You may need to use the
|
// You may need to use the
|
||||||
// MOZ_{PUSH,POP}_DISABLE_INTEGRAL_CONSTANT_OVERFLOW_WARNING macros if you use
|
// MOZ_{PUSH,POP}_DISABLE_INTEGRAL_CONSTANT_OVERFLOW_WARNING macros if you use
|
||||||
// this function. See the comment on those macros' definitions for more detail.
|
// this function. See the comment on those macros' definitions for more detail.
|
||||||
//
|
|
||||||
// XXX: once support for GCC 4.9 is dropped, this function should be removed
|
|
||||||
// and HashString(const char16_t*) should be made `constexpr`.
|
|
||||||
MOZ_MUST_USE constexpr HashNumber
|
MOZ_MUST_USE constexpr HashNumber
|
||||||
ConstExprHashString(const char16_t* aStr)
|
HashString(const char16_t* aStr)
|
||||||
{
|
{
|
||||||
return detail::ConstExprHashUntilZero(aStr, 0);
|
return detail::HashUntilZero(aStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
MOZ_MUST_USE inline HashNumber
|
MOZ_MUST_USE inline HashNumber
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ protected:
|
||||||
constexpr nsAtom(const char16_t* aStr, uint32_t aLength)
|
constexpr nsAtom(const char16_t* aStr, uint32_t aLength)
|
||||||
: mLength(aLength)
|
: mLength(aLength)
|
||||||
, mKind(static_cast<uint32_t>(nsAtom::AtomKind::Static))
|
, mKind(static_cast<uint32_t>(nsAtom::AtomKind::Static))
|
||||||
, mHash(mozilla::ConstExprHashString(aStr))
|
, mHash(mozilla::HashString(aStr))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
// Used by nsDynamicAtom.
|
// Used by nsDynamicAtom.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue