Gamedev Framework (gf) 1.2.0
A C++17 framework for 2D games
Id.h
1/*
2 * Gamedev Framework (gf)
3 * Copyright (C) 2016-2022 Julien Bernard
4 *
5 * This software is provided 'as-is', without any express or implied
6 * warranty. In no event will the authors be held liable for any damages
7 * arising from the use of this software.
8 *
9 * Permission is granted to anyone to use this software for any purpose,
10 * including commercial applications, and to alter it and redistribute it
11 * freely, subject to the following restrictions:
12 *
13 * 1. The origin of this software must not be misrepresented; you must not
14 * claim that you wrote the original software. If you use this software
15 * in a product, an acknowledgment in the product documentation would be
16 * appreciated but is not required.
17 * 2. Altered source versions must be plainly marked as such, and must not be
18 * misrepresented as being the original software.
19 * 3. This notice may not be removed or altered from any source distribution.
20 */
21#ifndef GF_ID_H
22#define GF_ID_H
23
24#include <cstdint>
25#include <string>
26#include <string_view>
27
28namespace gf {
29#ifndef DOXYGEN_SHOULD_SKIP_THIS
30inline namespace v1 {
31#endif
32
37 using Id = uint64_t;
38
43 constexpr Id InvalidId = 0;
44
61 constexpr Id hash(const char *str, std::size_t sz) {
62 Id value = UINT64_C(0xcbf29ce484222325);
63
64 for (std::size_t i = 0; i < sz; ++i) {
65 value ^= static_cast<unsigned char>(str[i]);
66 value *= UINT64_C(0x100000001b3);
67 }
68
69 return value;
70 }
71
83 constexpr Id hash(std::string_view str) {
84 return hash(str.data(), str.size());
85 }
86
87 namespace literals {
88
102 constexpr gf::Id operator"" _id(const char *str, std::size_t sz) {
103 return gf::hash(str, sz);
104 }
105
106 }
107
108#ifndef DOXYGEN_SHOULD_SKIP_THIS
109}
110#endif
111}
112
113#endif // GF_ID_H
uint64_t Id
An identifier.
Definition: Id.h:37
constexpr Id InvalidId
The invalid id (which is 0)
Definition: Id.h:43
constexpr Id hash(const char *str, std::size_t sz)
Get an identifier from a string.
Definition: Id.h:61
The namespace for gf classes.