Common: Add convenience function for hashing a struct
This commit is contained in:
parent
7f77820460
commit
d93ee65164
3 changed files with 15 additions and 5 deletions
|
@ -20,4 +20,17 @@ static inline u64 ComputeHash64(const void* data, size_t len) {
|
|||
return CityHash64(static_cast<const char*>(data), len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes a 64-bit hash of a struct. In addition to being POD (trivially copyable and having
|
||||
* standard layout), it is also critical that either the struct includes no padding, or that any
|
||||
* padding is initialized to a known value by memsetting the struct to 0 before filling it in.
|
||||
*/
|
||||
template <typename T>
|
||||
static inline u64 ComputeStructHash64(const T& data) {
|
||||
static_assert(
|
||||
std::is_trivially_copyable<T>::value && std::is_standard_layout<T>::value,
|
||||
"Type passed to ComputeStructHash64 must be trivially copyable and standard layout");
|
||||
return ComputeHash64(&data, sizeof(data));
|
||||
}
|
||||
|
||||
} // namespace Common
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue