mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-22 11:38:51 +00:00
made HashFnv functions constexpr (#4640)
* added FLATBUFFERS_CONSTEXPR_CPP14 define for C++14 and above constexpr * made HashFnv functions constexpr (depending on FLATBUFFERS_CONSTEXPR)
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
48d8232584
commit
ec74f58b94
@@ -121,6 +121,13 @@
|
|||||||
#define FLATBUFFERS_CONSTEXPR
|
#define FLATBUFFERS_CONSTEXPR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (defined(__cplusplus) && __cplusplus >= 201402L) || \
|
||||||
|
(defined(__cpp_constexpr) && __cpp_constexpr >= 201304)
|
||||||
|
#define FLATBUFFERS_CONSTEXPR_CPP14 FLATBUFFERS_CONSTEXPR
|
||||||
|
#else
|
||||||
|
#define FLATBUFFERS_CONSTEXPR_CPP14
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46 || \
|
#if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46 || \
|
||||||
defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026
|
defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026
|
||||||
#define FLATBUFFERS_NOEXCEPT noexcept
|
#define FLATBUFFERS_NOEXCEPT noexcept
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ template<> struct FnvTraits<uint64_t> {
|
|||||||
static const uint64_t kOffsetBasis = 0xcbf29ce484222645ULL;
|
static const uint64_t kOffsetBasis = 0xcbf29ce484222645ULL;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T> T HashFnv1(const char *input) {
|
template<typename T> FLATBUFFERS_CONSTEXPR_CPP14 T HashFnv1(const char *input) {
|
||||||
T hash = FnvTraits<T>::kOffsetBasis;
|
T hash = FnvTraits<T>::kOffsetBasis;
|
||||||
for (const char *c = input; *c; ++c) {
|
for (const char *c = input; *c; ++c) {
|
||||||
hash *= FnvTraits<T>::kFnvPrime;
|
hash *= FnvTraits<T>::kFnvPrime;
|
||||||
@@ -48,7 +48,7 @@ template<typename T> T HashFnv1(const char *input) {
|
|||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T> T HashFnv1a(const char *input) {
|
template<typename T> FLATBUFFERS_CONSTEXPR_CPP14 T HashFnv1a(const char *input) {
|
||||||
T hash = FnvTraits<T>::kOffsetBasis;
|
T hash = FnvTraits<T>::kOffsetBasis;
|
||||||
for (const char *c = input; *c; ++c) {
|
for (const char *c = input; *c; ++c) {
|
||||||
hash ^= static_cast<unsigned char>(*c);
|
hash ^= static_cast<unsigned char>(*c);
|
||||||
@@ -57,12 +57,12 @@ template<typename T> T HashFnv1a(const char *input) {
|
|||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> inline uint16_t HashFnv1<uint16_t>(const char *input) {
|
template <> FLATBUFFERS_CONSTEXPR_CPP14 inline uint16_t HashFnv1<uint16_t>(const char *input) {
|
||||||
uint32_t hash = HashFnv1<uint32_t>(input);
|
uint32_t hash = HashFnv1<uint32_t>(input);
|
||||||
return (hash >> 16) ^ (hash & 0xffff);
|
return (hash >> 16) ^ (hash & 0xffff);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> inline uint16_t HashFnv1a<uint16_t>(const char *input) {
|
template <> FLATBUFFERS_CONSTEXPR_CPP14 inline uint16_t HashFnv1a<uint16_t>(const char *input) {
|
||||||
uint32_t hash = HashFnv1a<uint32_t>(input);
|
uint32_t hash = HashFnv1a<uint32_t>(input);
|
||||||
return (hash >> 16) ^ (hash & 0xffff);
|
return (hash >> 16) ^ (hash & 0xffff);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user