opynsim
Unofficial C++ Documentation
Loading...
Searching...
No Matches
string_name.h
Go to the documentation of this file.
1#pragma once
2
5
6#include <compare>
7#include <concepts>
8#include <cstddef>
9#include <string_view>
10
11namespace osc
12{
13 // immutable, globally unique string with fast hashing+equality
15 public:
16 StringName() = default;
17 explicit StringName(std::string_view);
18 explicit StringName(const char* s) : StringName{std::string_view{s}} {}
19 explicit StringName(std::nullptr_t) = delete;
20 StringName(const StringName&) = default;
25
29
31
35 {
36 return std::string_view{lhs} == rhs;
37 }
38
39 template<typename StringViewLike>
40 requires std::constructible_from<std::string_view, StringViewLike>
41 friend bool operator==(const StringViewLike& lhs, const StringName& rhs)
42 {
43 return lhs == std::string_view{rhs};
44 }
45
46 friend auto operator<=>(const StringName&, const StringName&) = default;
47
48 template<typename StringViewLike>
49 requires std::constructible_from<std::string_view, StringViewLike>
50 friend auto operator<=>(const StringName& lhs, const StringViewLike& rhs)
51 {
52 return std::string_view{lhs} <=> rhs;
53 }
54
55 template<typename StringViewLike>
56 requires std::constructible_from<std::string_view, StringViewLike>
57 friend auto operator<=>(const StringViewLike& lhs, const StringName& rhs)
58 {
59 return lhs <=> std::string_view{rhs};
60 }
61
62 std::string_view name() const
63 {
64 return static_cast<std::string_view>(*this);
65 }
66 };
67}
68
69template<>
70struct std::hash<osc::StringName> final {
71 size_t operator()(const osc::StringName& string_name) const noexcept
72 {
73 return std::hash<osc::SharedPreHashedString>{}(string_name);
74 }
75};
Definition c_string_view.h:12
Definition shared_pre_hashed_string.h:55
operator std::string_view() const noexcept
Definition shared_pre_hashed_string.h:175
Definition string_name.h:14
friend auto operator<=>(const StringName &lhs, const StringViewLike &rhs)
Definition string_name.h:50
StringName()=default
StringName(std::string_view)
std::string_view name() const
Definition string_name.h:62
StringName(StringName &&) noexcept=default
friend bool operator==(const StringViewLike &lhs, const StringName &rhs)
Definition string_name.h:41
friend auto operator<=>(const StringName &, const StringName &)=default
friend auto operator<=>(const StringViewLike &lhs, const StringName &rhs)
Definition string_name.h:57
StringName(const char *s)
Definition string_name.h:18
StringName(std::nullptr_t)=delete
StringName(const StringName &)=default
Definition custom_decoration_generator.h:5
constexpr U to(T &&value)
Definition conversion.h:56
size_t operator()(const osc::StringName &string_name) const noexcept
Definition string_name.h:71