File tree Expand file tree Collapse file tree 2 files changed +31
-29
lines changed
include/boost/static_string Expand file tree Collapse file tree 2 files changed +31
-29
lines changed Original file line number Diff line number Diff line change 14
14
// Are we dependent on Boost?
15
15
// #define BOOST_STATIC_STRING_STANDALONE
16
16
17
+ #include < cstdint>
18
+
19
+ // detect 32/64 bit
20
+ #if UINTPTR_MAX == UINT64_MAX
21
+ #define BOOST_STATIC_STRING_ARCH 64
22
+ #elif UINTPTR_MAX == UINT32_MAX
23
+ #define BOOST_STATIC_STRING_ARCH 32
24
+ #else
25
+ #error Unknown or unsupported architecture, please open an issue
26
+ #endif
27
+
17
28
// Can we have deduction guides?
18
29
#if __cpp_deduction_guides >= 201703L
19
30
#define BOOST_STATIC_STRING_USE_DEDUCT
Original file line number Diff line number Diff line change @@ -6376,39 +6376,30 @@ struct hash<
6376
6376
return std::hash<view_type>()(view_type (str.data (), str.size ()));
6377
6377
#else
6378
6378
std::size_t seed = 0 ;
6379
- for (CharT const & c : str) {
6380
- mix_impl (std::integral_constant<bool , sizeof (std::size_t ) >= 8 >{}, seed, c);
6379
+ for (CharT const & c : str)
6380
+ {
6381
+ #if BOOST_STATIC_STRING_ARCH == 64
6382
+ seed += 0x9e3779b9 + std::hash<CharT>()( c );
6383
+ std::size_t const m = (std::size_t (0xe9846af ) << 32 ) + 0x9b1a615d ;
6384
+ seed ^= seed >> 32 ;
6385
+ seed *= m;
6386
+ seed ^= seed >> 32 ;
6387
+ seed *= m;
6388
+ seed ^= seed >> 28 ;
6389
+ #elif BOOST_STATIC_STRING_ARCH == 32
6390
+ seed += 0x9e3779b9 + std::hash<CharT>()( c );
6391
+ std::size_t const m1 = 0x21f0aaad ;
6392
+ std::size_t const m2 = 0x735a2d97 ;
6393
+ seed ^= seed >> 16 ;
6394
+ seed *= m1;
6395
+ seed ^= seed >> 15 ;
6396
+ seed *= m2;
6397
+ seed ^= seed >> 15 ;
6398
+ #endif
6381
6399
}
6382
6400
return seed;
6383
6401
#endif
6384
6402
}
6385
-
6386
- static
6387
- void
6388
- mix_impl (std::true_type, std::size_t & seed, CharT c)
6389
- {
6390
- seed += 0x9e3779b9 + std::hash<CharT>()( c );
6391
- std::size_t const m = (std::size_t (0xe9846af ) << 32 ) + 0x9b1a615d ;
6392
- seed ^= seed >> 32 ;
6393
- seed *= m;
6394
- seed ^= seed >> 32 ;
6395
- seed *= m;
6396
- seed ^= seed >> 28 ;
6397
- }
6398
-
6399
- static
6400
- void
6401
- mix_impl (std::false_type, std::size_t & seed, CharT c)
6402
- {
6403
- seed += 0x9e3779b9 + std::hash<CharT>()( c );
6404
- std::size_t const m1 = 0x21f0aaad ;
6405
- std::size_t const m2 = 0x735a2d97 ;
6406
- seed ^= seed >> 16 ;
6407
- seed *= m1;
6408
- seed ^= seed >> 15 ;
6409
- seed *= m2;
6410
- seed ^= seed >> 15 ;
6411
- }
6412
6403
};
6413
6404
} // std
6414
6405
You can’t perform that action at this time.
0 commit comments