From ea705e89e0eb502eaa8893fbb65c851f1c4d5617 Mon Sep 17 00:00:00 2001 From: Fletcher Dunn Date: Fri, 10 Sep 2021 19:21:59 -0700 Subject: [PATCH] Refactor some hash stuff. Move SteamNetworkingIdentityHash to be inline. Add SteamNetworkingIPAddrHash P4:6761702 --- .../steamnetworkingsockets_internal.h | 25 +++++++++++++++++-- .../steamnetworkingsockets_shared.cpp | 12 --------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/steamnetworkingsockets/steamnetworkingsockets_internal.h b/src/steamnetworkingsockets/steamnetworkingsockets_internal.h index 034f9b4..d3f3185 100644 --- a/src/steamnetworkingsockets/steamnetworkingsockets_internal.h +++ b/src/steamnetworkingsockets/steamnetworkingsockets_internal.h @@ -559,10 +559,31 @@ inline int64 NearestWithSameLowerBits( T nLowerBits, int64 nReference ) return nReference + nDiff; } -/// Calculate hash of identity. +/// Calculate hash of SteamNetworkingIdentity struct SteamNetworkingIdentityHash { - uint32 operator()( const SteamNetworkingIdentity &x ) const; + uint32 operator()(struct SteamNetworkingIdentity const &x ) const + { + // Make sure we don't have any packing or alignment issues + COMPILE_TIME_ASSERT( offsetof( SteamNetworkingIdentity, m_eType ) == 0 ); + COMPILE_TIME_ASSERT( sizeof( x.m_eType ) == 4 ); + COMPILE_TIME_ASSERT( offsetof( SteamNetworkingIdentity, m_cbSize ) == 4 ); + COMPILE_TIME_ASSERT( sizeof( x.m_cbSize ) == 4 ); + COMPILE_TIME_ASSERT( offsetof( SteamNetworkingIdentity, m_steamID64 ) == 8 ); + + return Murmorhash32( &x, sizeof( x.m_eType ) + sizeof( x.m_cbSize ) + x.m_cbSize ); + } +}; + +/// Calculate hash of SteamNetworkingIPAddr +struct SteamNetworkingIPAddrHash +{ + uint32 operator()( struct SteamNetworkingIPAddr const &x ) const + { + // Make sure we don't have any packing or alignment issues + COMPILE_TIME_ASSERT( sizeof( SteamNetworkingIPAddr ) == 16+2 ); + return Murmorhash32( &x, sizeof( SteamNetworkingIPAddr ) ); + }; }; inline bool IsValidSteamIDForIdentity( CSteamID steamID ) diff --git a/src/steamnetworkingsockets/steamnetworkingsockets_shared.cpp b/src/steamnetworkingsockets/steamnetworkingsockets_shared.cpp index 6119516..7f39116 100644 --- a/src/steamnetworkingsockets/steamnetworkingsockets_shared.cpp +++ b/src/steamnetworkingsockets/steamnetworkingsockets_shared.cpp @@ -107,18 +107,6 @@ uint32 Murmorhash32( const void *data, size_t len ) return h; } -uint32 SteamNetworkingIdentityHash::operator()(struct SteamNetworkingIdentity const &x ) const -{ - // Make sure we don't have any packing or alignment issues - COMPILE_TIME_ASSERT( offsetof( SteamNetworkingIdentity, m_eType ) == 0 ); - COMPILE_TIME_ASSERT( sizeof( x.m_eType ) == 4 ); - COMPILE_TIME_ASSERT( offsetof( SteamNetworkingIdentity, m_cbSize ) == 4 ); - COMPILE_TIME_ASSERT( sizeof( x.m_cbSize ) == 4 ); - COMPILE_TIME_ASSERT( offsetof( SteamNetworkingIdentity, m_steamID64 ) == 8 ); - - return Murmorhash32( &x, sizeof( x.m_eType ) + sizeof( x.m_cbSize ) + x.m_cbSize ); -} - } // namespace SteamNetworkingSocketsLib using namespace SteamNetworkingSocketsLib;