1.10
include
egt
detail
stringhash.h
1
/*
2
* Copyright (C) 2018 Microchip Technology Inc. All rights reserved.
3
*
4
* SPDX-License-Identifier: Apache-2.0
5
*/
6
#ifndef EGT_DETAIL_STRINGHASH_H
7
#define EGT_DETAIL_STRINGHASH_H
8
9
#include <string>
10
11
namespace
egt
12
{
13
inline
namespace
v1
14
{
15
namespace
detail
16
{
17
18
// Copyright (c) 2014 Sean Farrell <sean.farrell@rioki.org>
19
//
20
// Permission is hereby granted, free of charge, to any person obtaining a copy
21
// of this software and associated documentation files (the "Software"), to deal
22
// in the Software without restriction, including without limitation the rights
23
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
24
// copies of the Software, and to permit persons to whom the Software is
25
// furnished to do so, subject to the following conditions:
26
//
27
// The above copyright notice and this permission notice shall be included in
28
// all copies or substantial portions of the Software.
29
//
30
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
33
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
34
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
35
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
36
// THE SOFTWARE.
37
//
38
40
constexpr
unsigned
int
hash
(
const
char
* str,
int
h = 0)
41
{
42
// NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic,readability-implicit-bool-conversion)
43
return
!str[h] ? 5381 : (
hash
(str, h + 1) * 33) ^ str[h];
44
}
45
47
inline
unsigned
int
hash
(
const
std::string& str)
48
{
49
return
hash
(str.c_str());
50
}
51
52
}
53
}
54
}
55
56
#endif
egt::v1::detail::hash
constexpr unsigned int hash(const char *str, int h=0)
Perform a hash of a string.
Definition
stringhash.h:40
egt
EGT framework namespace.
Definition
animation.h:24