27 lines
		
	
	
		
			569 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			27 lines
		
	
	
		
			569 B
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								#include <string_view>
							 | 
						||
| 
								 | 
							
								namespace meta
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									template <class T>
							 | 
						||
| 
								 | 
							
									constexpr inline void hash_combine(size_t& seed, const T& v) noexcept
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										std::hash<T> hasher;
							 | 
						||
| 
								 | 
							
										seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									constexpr inline size_t string_hash(std::string_view str) noexcept
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										constexpr size_t fnv_offset_basis = 0xcbf29ce484222325;
							 | 
						||
| 
								 | 
							
										constexpr size_t fnv_prime = 0x100000001b3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										auto hash = fnv_offset_basis;
							 | 
						||
| 
								 | 
							
										for (auto& elem : str)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											hash *= fnv_prime;
							 | 
						||
| 
								 | 
							
											hash ^= elem;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										hash *= fnv_prime;
							 | 
						||
| 
								 | 
							
										hash ^= 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return hash;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |