LeechCraft
0.6.70-18450-gabe19ee3b0
Modular cross-platform feature rich live environment.
Toggle main menu visibility
Loading...
Searching...
No Matches
oraltypes.h
Go to the documentation of this file.
1
/**********************************************************************
2
* LeechCraft - modular cross-platform feature rich internet client.
3
* Copyright (C) 2006-2014 Georg Rudoy
4
*
5
* Distributed under the Boost Software License, Version 1.0.
6
* (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7
**********************************************************************/
8
9
#pragma once
10
11
#include <type_traits>
12
#include <
util/sll/typelist.h
>
13
#include <
util/sll/typegetter.h
>
14
15
namespace
LC
16
{
17
namespace
Util
18
{
19
namespace
oral
20
{
21
struct
NoAutogen;
22
23
template
<
typename
T,
typename
Concrete>
24
struct
IndirectHolderBase
25
{
26
using
value_type
= T;
27
28
T
Val_
;
29
30
IndirectHolderBase
() =
default
;
31
32
IndirectHolderBase
(T val)
33
:
Val_
{ val }
34
{
35
}
36
37
template
<
typename
U = T,
typename
Sub =
typename
U::value_type>
38
IndirectHolderBase
(Sub val)
39
:
Val_
{ val }
40
{
41
}
42
43
Concrete&
operator=
(T val)
44
{
45
Val_
= val;
46
return
static_cast<
Concrete&
>
(*this);
47
}
48
49
operator
value_type
()
const
50
{
51
return
Val_
;
52
}
53
54
const
value_type
&
operator*
()
const
55
{
56
return
Val_
;
57
}
58
59
const
value_type
*
operator->
()
const
60
{
61
return
&
Val_
;
62
}
63
};
64
65
template
<
typename
T,
typename
...
Tags
>
66
struct
PKey
:
IndirectHolderBase
<T, PKey<T, Tags...>>
67
{
68
using
PKey::IndirectHolderBase::IndirectHolderBase;
69
};
70
71
template
<
typename
T,
typename
... Args>
72
using
PKeyValue_t
=
typename
PKey
<T, Args...>::value_type;
73
74
template
<
typename
T>
75
struct
Unique
:
IndirectHolderBase
<T, Unique<T>>
76
{
77
using
Unique::IndirectHolderBase::IndirectHolderBase;
78
};
79
80
template
<
typename
T>
81
using
UniqueValue_t
=
typename
Unique<T>::value_type
;
82
83
template
<
typename
T>
84
struct
NotNull
:
IndirectHolderBase
<T, NotNull<T>>
85
{
86
using
NotNull::IndirectHolderBase::IndirectHolderBase;
87
};
88
89
template
<
typename
T>
90
using
NotNullValue_t
=
typename
NotNull<T>::value_type
;
91
92
template
<
typename
T>
93
using
UniqueNotNull
=
Unique<NotNull<T>
>;
94
95
namespace
detail
96
{
97
template
<
typename
T>
98
struct
IsReferencesTarget
: std::false_type {};
99
100
template
<
typename
U,
typename
...
Tags
>
101
struct
IsReferencesTarget
<
PKey
<U,
Tags
...>> : std::true_type {};
102
103
template
<
typename
U>
104
struct
IsReferencesTarget
<
Unique
<U>> : std::true_type {};
105
}
106
107
template
<auto Ptr>
108
struct
References
:
IndirectHolderBase
<typename MemberPtrType_t<Ptr>::value_type, References<Ptr>>
109
{
110
using
member_type
=
MemberPtrType_t<Ptr>
;
111
static_assert
(
detail::IsReferencesTarget<member_type>::value
,
"References<> element must refer to a PKey<> element"
);
112
113
using
References::IndirectHolderBase::IndirectHolderBase;
114
115
template
<
typename
T,
typename
...
Tags
>
116
References
(
const
PKey<T, Tags...>
& key)
117
:
References
::
IndirectHolderBase
(key)
118
{
119
}
120
121
template
<
typename
T,
typename
...
Tags
>
122
References
&
operator=
(
const
PKey<T, Tags...>
& key)
123
{
124
this->
Val_
= key;
125
return
*
this
;
126
}
127
};
128
129
template
<auto Ptr>
130
using
ReferencesValue_t
=
typename
References<Ptr>::value_type
;
131
132
template
<
auto
... Fields>
133
struct
PrimaryKey
{};
134
135
template
<
auto
... Fields>
136
struct
UniqueSubset
{};
137
138
template
<
typename
... Args>
139
using
Constraints
=
Typelist
<Args...>;
140
141
template
<
auto
... Fields>
142
struct
Index
{};
143
144
template
<
typename
... Args>
145
using
Indices
=
Typelist
<Args...>;
146
147
template
<
typename
T>
148
struct
IsIndirect
: std::false_type {};
149
150
template
<
typename
T,
typename
... Args>
151
struct
IsIndirect
<
PKey
<T, Args...>> : std::true_type {};
152
153
template
<
typename
T>
154
struct
IsIndirect
<
Unique
<T>> : std::true_type {};
155
156
template
<
typename
T>
157
struct
IsIndirect
<
NotNull
<T>> : std::true_type {};
158
159
template
<auto Ptr>
160
struct
IsIndirect
<
References
<Ptr>> : std::true_type {};
161
162
struct
InsertAction
163
{
164
constexpr
static
struct
DefaultTag {}
Default
{};
165
constexpr
static
struct
IgnoreTag {}
Ignore
{};
166
167
struct
Replace
168
{
169
template
<
auto
... Ptrs>
170
struct
FieldsType
{};
171
172
template
<
auto
... Ptrs>
173
constexpr
static
FieldsType
<Ptrs...>
Fields
{};
174
175
constexpr
static
struct
WholeType {}
Whole
{};
176
};
177
};
178
}
179
}
180
}
LC::Util::Tags
Definition
xmlnode.cpp:106
LC::Util::oral::detail
Definition
migrate.h:17
LC::Util::oral
Definition
migrate.h:15
LC::Util::oral::Constraints
Typelist< Args... > Constraints
Definition
oraltypes.h:139
LC::Util::oral::ReferencesValue_t
typename References< Ptr >::value_type ReferencesValue_t
Definition
oraltypes.h:130
LC::Util::oral::NotNullValue_t
typename NotNull< T >::value_type NotNullValue_t
Definition
oraltypes.h:90
LC::Util::oral::PKeyValue_t
typename PKey< T, Args... >::value_type PKeyValue_t
Definition
oraltypes.h:72
LC::Util::oral::Indices
Typelist< Args... > Indices
Definition
oraltypes.h:145
LC::Util::oral::UniqueValue_t
typename Unique< T >::value_type UniqueValue_t
Definition
oraltypes.h:81
LC::Util::oral::UniqueNotNull
Unique< NotNull< T > > UniqueNotNull
Definition
oraltypes.h:93
LC::Util
Definition
icoreproxy.h:34
LC::Util::MemberPtrType_t
MemberTypeType_t< decltype(Ptr)> MemberPtrType_t
Definition
typegetter.h:79
LC
Definition
constants.h:15
LC::Util::Typelist
Definition
typelist.h:19
LC::Util::oral::Index
Definition
oraltypes.h:142
LC::Util::oral::IndirectHolderBase::operator->
const value_type * operator->() const
Definition
oraltypes.h:59
LC::Util::oral::IndirectHolderBase::IndirectHolderBase
IndirectHolderBase(Sub val)
Definition
oraltypes.h:38
LC::Util::oral::IndirectHolderBase::Val_
T Val_
Definition
oraltypes.h:28
LC::Util::oral::IndirectHolderBase::IndirectHolderBase
IndirectHolderBase(T val)
Definition
oraltypes.h:32
LC::Util::oral::IndirectHolderBase::operator*
const value_type & operator*() const
Definition
oraltypes.h:54
LC::Util::oral::IndirectHolderBase::value_type
T value_type
Definition
oraltypes.h:26
LC::Util::oral::IndirectHolderBase::IndirectHolderBase
IndirectHolderBase()=default
LC::Util::oral::IndirectHolderBase::operator=
Concrete & operator=(T val)
Definition
oraltypes.h:43
LC::Util::oral::InsertAction::Replace::FieldsType
Definition
oraltypes.h:170
LC::Util::oral::InsertAction::Replace
Definition
oraltypes.h:168
LC::Util::oral::InsertAction::Replace::Whole
static constexpr struct LC::Util::oral::InsertAction::Replace::WholeType Whole
LC::Util::oral::InsertAction::Replace::Fields
static constexpr FieldsType< Ptrs... > Fields
Definition
oraltypes.h:173
LC::Util::oral::InsertAction
Definition
oraltypes.h:163
LC::Util::oral::InsertAction::Ignore
static constexpr struct LC::Util::oral::InsertAction::IgnoreTag Ignore
LC::Util::oral::InsertAction::Default
static constexpr struct LC::Util::oral::InsertAction::DefaultTag Default
LC::Util::oral::IsIndirect
Definition
oraltypes.h:148
LC::Util::oral::NotNull
Definition
oraltypes.h:85
LC::Util::oral::PKey
Definition
oraltypes.h:67
LC::Util::oral::PrimaryKey
Definition
oraltypes.h:133
LC::Util::oral::References
Definition
oraltypes.h:109
LC::Util::oral::References::References
References(const PKey< T, Tags... > &key)
Definition
oraltypes.h:116
LC::Util::oral::References::member_type
MemberPtrType_t< Ptr > member_type
Definition
oraltypes.h:110
LC::Util::oral::References::operator=
References & operator=(const PKey< T, Tags... > &key)
Definition
oraltypes.h:122
LC::Util::oral::Unique
Definition
oraltypes.h:76
LC::Util::oral::UniqueSubset
Definition
oraltypes.h:136
LC::Util::oral::detail::IsReferencesTarget
Definition
oraltypes.h:98
typegetter.h
typelist.h
src
util
db
oral
oraltypes.h
Generated by
1.17.0