21 uint32_t
mix( uint32_t state ) {
22 state += ( state << 16 );
23 state ^= ( state >> 13 );
24 state += ( state << 4 );
25 state ^= ( state >> 7 );
26 state += ( state << 10 );
27 state ^= ( state >> 5 );
28 state += ( state << 8 );
29 state ^= ( state >> 16 );
33 uint32_t
mix32( uint32_t state, uint32_t extra ) {
return mix( state + extra ); }
35 uint32_t
mix64( uint32_t state, uint64_t extra ) {
36 typedef boost::low_bits_mask_t<32> mask_t;
37 state =
mix32( state, uint32_t( extra & mask_t::sig_bits_fast ) );
38 return mix32( state, uint32_t( ( extra >> 32 ) & mask_t::sig_bits_fast ) );
41 uint32_t
mixString( uint32_t state,
const std::string& extra ) {
43 std::string s = std::string( ( 4 - extra.size() % 4 ) % 4,
' ' ) + extra;
44 for (
size_t i = 0; i < s.size() / 4; ++i ) {
46 uint32_t x = uint32_t( s[i * 4] ) | uint32_t( s[i * 4 + 1] ) << 8 | uint32_t( s[i * 4 + 2] ) << 16 |
47 uint32_t( s[i * 4 + 3] ) << 24;
48 state =
mix32( state, x );
uint32_t mix64(uint32_t state, uint64_t extra)
mix some 'extra' entropy into 'state' and return result
uint32_t mix32(uint32_t state, uint32_t extra)
mix some 'extra' entropy into 'state' and return result
uint32_t mixString(uint32_t state, const std::string &extra)
mix some 'extra' entropy into 'state' and return result
uint32_t mix(uint32_t state)
Create a hash with a large avalanche effect from a 32 bit integer.
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...