Loading...
Searching...
No Matches
StringFactoryKey.hpp
1#pragma once
2#include <score/tools/opaque/OpaqueString.hpp>
3
4#include <score_lib_base_export.h>
5// TODO rename file.
6template <typename Tag>
8{
9public:
11
12 friend struct std::hash<this_type>;
13 friend bool operator==(const StringKey& lhs, const StringKey& rhs) noexcept
14 {
15 return static_cast<const OpaqueString&>(lhs)
16 == static_cast<const OpaqueString&>(rhs);
17 }
18 friend bool operator!=(const StringKey& lhs, const StringKey& rhs) noexcept
19 {
20 return static_cast<const OpaqueString&>(lhs)
21 != static_cast<const OpaqueString&>(rhs);
22 }
23 friend bool operator<(const StringKey& lhs, const StringKey& rhs) noexcept
24 {
25 return static_cast<const OpaqueString&>(lhs) < static_cast<const OpaqueString&>(rhs);
26 }
27
28 using OpaqueString::OpaqueString;
29
30 auto& toString() { return impl; }
31 auto& toString() const { return impl; }
32};
33
34namespace std
35{
36template <typename T>
37struct hash<StringKey<T>>
38{
39 std::size_t operator()(const StringKey<T>& kagi) const noexcept
40 {
41 return std::hash<std::string>()(kagi.toString());
42 }
43};
44}
Definition OpaqueString.hpp:7
Definition StringFactoryKey.hpp:8
STL namespace.