xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
beast
container
detail
empty_base_optimization.h
1
// Distributed under the Boost Software License, Version 1.0. (See accompanying
2
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
3
//
4
// Official repository: https://github.com/boostorg/beast
5
//
6
7
#pragma once
8
9
#include <boost/type_traits/is_final.hpp>
10
11
#include <
type_traits
>
12
#include <
utility
>
13
14
namespace
beast::detail
{
15
16
template
<
class
T>
17
struct
IsEmptyBaseOptimizationDerived
18
:
std::integral_constant
<bool, std::is_empty_v<T> && !boost::is_final<T>::value>
19
{
20
};
21
22
template <class T, int UniqueID = 0, bool IsDerived = IsEmptyBaseOptimizationDerived<T>::value>
23
class
EmptyBaseOptimization
:
private
T
24
{
25
public
:
26
EmptyBaseOptimization
() =
default
;
27
EmptyBaseOptimization
(
EmptyBaseOptimization
&&) =
default
;
28
EmptyBaseOptimization
(
EmptyBaseOptimization
const
&) =
default
;
29
EmptyBaseOptimization
&
30
operator=
(
EmptyBaseOptimization
&&) =
default
;
31
EmptyBaseOptimization
&
32
operator=
(
EmptyBaseOptimization
const
&) =
default
;
33
34
template
<
class
Arg1,
class
... ArgN>
35
explicit
EmptyBaseOptimization
(Arg1&& arg1, ArgN&&... argn)
36
: T(
std
::forward<Arg1>(arg1),
std
::forward<ArgN>(argn)...)
37
{
38
}
39
40
T&
41
member
() noexcept
42
{
43
return
*
this
;
44
}
45
46
[[nodiscard]] T
const
&
47
member
() const noexcept
48
{
49
return
*
this
;
50
}
51
};
52
53
//------------------------------------------------------------------------------
54
55
template
<
class
T,
int
UniqueID>
56
class
EmptyBaseOptimization
<T, UniqueID, false>
57
{
58
T
t_
;
59
60
public
:
61
EmptyBaseOptimization
() =
default
;
62
EmptyBaseOptimization
(
EmptyBaseOptimization
&&) =
default
;
63
EmptyBaseOptimization
(
EmptyBaseOptimization
const
&) =
default
;
64
EmptyBaseOptimization
&
65
operator=
(
EmptyBaseOptimization
&&) =
default
;
66
EmptyBaseOptimization
&
67
operator=
(
EmptyBaseOptimization
const
&) =
default
;
68
69
template
<
class
Arg1,
class
... ArgN>
70
explicit
EmptyBaseOptimization
(Arg1&& arg1, ArgN&&... argn)
71
:
t_
(
std
::forward<Arg1>(arg1),
std
::forward<ArgN>(argn)...)
72
{
73
}
74
75
T&
76
member
() noexcept
77
{
78
return
t_
;
79
}
80
81
T
const
&
82
member
() const noexcept
83
{
84
return
t_
;
85
}
86
};
87
88
}
// namespace beast::detail
beast::detail::EmptyBaseOptimization< T, UniqueID, false >::operator=
EmptyBaseOptimization & operator=(EmptyBaseOptimization const &)=default
beast::detail::EmptyBaseOptimization< T, UniqueID, false >::t_
T t_
Definition
empty_base_optimization.h:58
beast::detail::EmptyBaseOptimization< T, UniqueID, false >::operator=
EmptyBaseOptimization & operator=(EmptyBaseOptimization &&)=default
beast::detail::EmptyBaseOptimization< T, UniqueID, false >::EmptyBaseOptimization
EmptyBaseOptimization(EmptyBaseOptimization const &)=default
beast::detail::EmptyBaseOptimization< T, UniqueID, false >::EmptyBaseOptimization
EmptyBaseOptimization(Arg1 &&arg1, ArgN &&... argn)
Definition
empty_base_optimization.h:70
beast::detail::EmptyBaseOptimization< T, UniqueID, false >::member
T & member() noexcept
Definition
empty_base_optimization.h:76
beast::detail::EmptyBaseOptimization< T, UniqueID, false >::member
T const & member() const noexcept
Definition
empty_base_optimization.h:82
beast::detail::EmptyBaseOptimization< T, UniqueID, false >::EmptyBaseOptimization
EmptyBaseOptimization()=default
beast::detail::EmptyBaseOptimization< T, UniqueID, false >::EmptyBaseOptimization
EmptyBaseOptimization(EmptyBaseOptimization &&)=default
beast::detail::EmptyBaseOptimization::EmptyBaseOptimization
EmptyBaseOptimization(EmptyBaseOptimization &&)=default
beast::detail::EmptyBaseOptimization::member
T & member() noexcept
Definition
empty_base_optimization.h:41
beast::detail::EmptyBaseOptimization::operator=
EmptyBaseOptimization & operator=(EmptyBaseOptimization const &)=default
beast::detail::EmptyBaseOptimization::operator=
EmptyBaseOptimization & operator=(EmptyBaseOptimization &&)=default
beast::detail::EmptyBaseOptimization::EmptyBaseOptimization
EmptyBaseOptimization()=default
beast::detail::EmptyBaseOptimization::member
T const & member() const noexcept
Definition
empty_base_optimization.h:47
beast::detail::EmptyBaseOptimization::EmptyBaseOptimization
EmptyBaseOptimization(EmptyBaseOptimization const &)=default
beast::detail::EmptyBaseOptimization::EmptyBaseOptimization
EmptyBaseOptimization(Arg1 &&arg1, ArgN &&... argn)
Definition
empty_base_optimization.h:35
std::integral_constant
beast::detail
Definition
abstract_clock.h:59
std
STL namespace.
beast::detail::IsEmptyBaseOptimizationDerived
Definition
empty_base_optimization.h:19
type_traits
utility
Generated by
1.17.0