1.10
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
11namespace egt
12{
13inline namespace v1
14{
15namespace 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
40constexpr 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
47inline unsigned int hash(const std::string& str)
48{
49 return hash(str.c_str());
50}
51
52}
53}
54}
55
56#endif
constexpr unsigned int hash(const char *str, int h=0)
Perform a hash of a string.
Definition stringhash.h:40
EGT framework namespace.
Definition animation.h:24