KiCad PCB EDA Suite
Loading...
Searching...
No Matches
hash.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright The KiCad Developers, see CHANGELOG.TXT for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 3
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20#pragma once
21
22#include <functional>
23
28static inline constexpr void hash_combine( std::size_t& seed )
29{
30}
31
39template <typename T, typename... Types>
40static inline constexpr void hash_combine( std::size_t& seed, const T& val, const Types&... args )
41{
42 seed ^= std::hash<T>()( val ) + 0x9e3779b9 + ( seed << 6 ) + ( seed >> 2 );
43 hash_combine( seed, args... );
44}
45
46template <typename... Types>
47static inline constexpr std::size_t hash_val( const Types&... args )
48{
49 std::size_t seed = 0xa82de1c0;
50 hash_combine( seed, args... );
51 return seed;
52}
static constexpr void hash_combine(std::size_t &seed)
This is a dummy function to take the final case of hash_combine below.
Definition hash.h:28
static constexpr std::size_t hash_val(const Types &... args)
Definition hash.h:47
const uint32_t seed