xrpld
Loading...
Searching...
No Matches
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
14namespace beast::detail {
15
16template <class T>
18 : std::integral_constant<bool, std::is_empty_v<T> && !boost::is_final<T>::value>
19{
20};
21
22template <class T, int UniqueID = 0, bool IsDerived = IsEmptyBaseOptimizationDerived<T>::value>
23class EmptyBaseOptimization : private T
24{
25public:
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
55template <class T, int UniqueID>
56class EmptyBaseOptimization<T, UniqueID, false>
57{
58 T t_;
59
60public:
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
EmptyBaseOptimization & operator=(EmptyBaseOptimization const &)=default
EmptyBaseOptimization & operator=(EmptyBaseOptimization &&)=default
EmptyBaseOptimization(EmptyBaseOptimization const &)=default
EmptyBaseOptimization(EmptyBaseOptimization &&)=default
EmptyBaseOptimization(EmptyBaseOptimization &&)=default
EmptyBaseOptimization & operator=(EmptyBaseOptimization const &)=default
EmptyBaseOptimization & operator=(EmptyBaseOptimization &&)=default
EmptyBaseOptimization(EmptyBaseOptimization const &)=default
EmptyBaseOptimization(Arg1 &&arg1, ArgN &&... argn)
STL namespace.