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