constexpr hash compatible with c++11

This commit is contained in:
Paul Fd 2020-03-10 13:30:43 +01:00
parent 8861e0e8dc
commit 17f6967509

View file

@ -56,10 +56,7 @@ constexpr uint64_t Fnv1aPrime = 0x01000193;
*/ */
constexpr uint64_t hash(absl::string_view s, uint64_t h = Fnv1aBasis) constexpr uint64_t hash(absl::string_view s, uint64_t h = Fnv1aBasis)
{ {
if (s.length() > 0) return (s.length() == 0) ? h : hash( { s.data() + 1, s.length() - 1 }, (h ^ s.front()) * Fnv1aPrime );
return hash( { s.data() + 1, s.length() - 1 }, (h ^ s.front()) * Fnv1aPrime );
return h;
} }
/** /**
@ -73,12 +70,9 @@ constexpr uint64_t hash(absl::string_view s, uint64_t h = Fnv1aBasis)
*/ */
constexpr uint64_t hashNoAmpersand(absl::string_view s, uint64_t h = Fnv1aBasis) constexpr uint64_t hashNoAmpersand(absl::string_view s, uint64_t h = Fnv1aBasis)
{ {
if (s.length() > 0) { return (s.length() == 0) ? h : (
if (s.front() == '&') (s.front() == '&')
return hashNoAmpersand( { s.data() + 1, s.length() - 1 }, h ); ? hashNoAmpersand( { s.data() + 1, s.length() - 1 }, h )
else : hashNoAmpersand( { s.data() + 1, s.length() - 1 }, (h ^ s.front()) * Fnv1aPrime )
return hashNoAmpersand( { s.data() + 1, s.length() - 1 }, (h ^ s.front()) * Fnv1aPrime ); );
}
return h;
} }