mimic++
v10.0.1
Toggle main menu visibility
Loading...
Searching...
No Matches
CopyableBox.hpp
Go to the documentation of this file.
1
// Copyright Dominic (DNKpp) Koepke 2026.
2
// Distributed under the Boost Software License, Version 1.0.
3
// (See accompanying file LICENSE_1_0.txt or copy at
4
// https://www.boost.org/LICENSE_1_0.txt)
5
6
#ifndef MIMICPP_UTILITIES_COPYABLE_BOX_HPP
7
#define MIMICPP_UTILITIES_COPYABLE_BOX_HPP
8
9
#pragma once
10
11
#include "
mimic++/Fwd.hpp
"
12
#include "
mimic++/config/Config.hpp
"
13
14
#ifndef MIMICPP_DETAIL_IS_MODULE
15
#include <concepts>
16
#include <memory>
17
#include <type_traits>
18
#endif
19
20
MIMICPP_DETAIL_MODULE_EXPORT
namespace
mimicpp::util
21
{
29
template
<
typename
T>
30
class
CopyableBox
31
{
32
public
:
33
constexpr
~CopyableBox
() noexcept
34
{
35
delete
m_Data;
36
}
37
38
[[nodiscard]]
39
constexpr
CopyableBox
(
CopyableBox
const
& other)
40
: m_Data{other.m_Data ? new T{*other} : nullptr}
41
{
42
}
43
44
[[nodiscard]]
45
constexpr
CopyableBox
(
CopyableBox
&& other) noexcept
46
: m_Data{std::exchange(other.m_Data,
nullptr
)}
47
{
48
}
49
50
constexpr
CopyableBox
&
operator=
(
CopyableBox
other)
noexcept
51
{
52
std::ranges::swap(m_Data, other.m_Data);
53
return
*
this
;
54
}
55
56
[[nodiscard]]
57
constexpr
CopyableBox
()
58
: m_Data{new T{}}
59
{
60
}
61
62
[[nodiscard]]
63
explicit
(
false
)
constexpr
CopyableBox
(T
const
& value)
64
: m_Data{
new
T{value}}
65
{
66
}
67
68
[[nodiscard]]
69
explicit
(
false
)
constexpr
CopyableBox
(T&& value)
70
: m_Data{
new
T{std::move(value)}}
71
{
72
}
73
74
[[nodiscard]]
75
constexpr
T&
operator*
() noexcept
76
{
77
MIMICPP_ASSERT
(m_Data,
"Data is null."
);
78
return
*m_Data;
79
}
80
81
[[nodiscard]]
82
constexpr
T
const
&
operator*
() const noexcept
83
{
84
MIMICPP_ASSERT
(m_Data,
"Data is null."
);
85
return
*m_Data;
86
}
87
88
[[nodiscard]]
89
constexpr
T*
operator->
() noexcept
90
{
91
return
m_Data;
92
}
93
94
[[nodiscard]]
95
constexpr
T
const
*
operator->
() const noexcept
96
{
97
return
m_Data;
98
}
99
100
[[nodiscard]]
101
explicit
constexpr
operator
bool() const noexcept
102
{
103
return
m_Data !=
nullptr
;
104
}
105
106
[[nodiscard]]
107
friend
constexpr
bool
operator==
(
CopyableBox
const
& lhs,
CopyableBox
const
& rhs)
108
{
109
return
*lhs == *rhs;
110
}
111
112
private
:
113
T* m_Data{};
114
};
115
}
116
117
#endif
Config.hpp
MIMICPP_ASSERT
#define MIMICPP_ASSERT(condition, msg)
Definition
Config.hpp:54
MIMICPP_DETAIL_MODULE_EXPORT
#define MIMICPP_DETAIL_MODULE_EXPORT
Definition
Config.hpp:19
Fwd.hpp
mimicpp::util::CopyableBox::operator*
constexpr T & operator*() noexcept
Definition
CopyableBox.hpp:75
mimicpp::util::CopyableBox::operator==
friend constexpr bool operator==(CopyableBox const &lhs, CopyableBox const &rhs)
Definition
CopyableBox.hpp:107
mimicpp::util::CopyableBox::~CopyableBox
constexpr ~CopyableBox() noexcept
Definition
CopyableBox.hpp:33
mimicpp::util::CopyableBox::CopyableBox
constexpr CopyableBox(CopyableBox &&other) noexcept
Definition
CopyableBox.hpp:45
mimicpp::util::CopyableBox::CopyableBox
constexpr CopyableBox()
Definition
CopyableBox.hpp:57
mimicpp::util::CopyableBox::operator=
constexpr CopyableBox & operator=(CopyableBox other) noexcept
Definition
CopyableBox.hpp:50
mimicpp::util::CopyableBox::operator->
constexpr T const * operator->() const noexcept
Definition
CopyableBox.hpp:95
mimicpp::util::CopyableBox::operator*
constexpr T const & operator*() const noexcept
Definition
CopyableBox.hpp:82
mimicpp::util::CopyableBox::CopyableBox
constexpr CopyableBox(CopyableBox const &other)
Definition
CopyableBox.hpp:39
mimicpp::util::CopyableBox::operator->
constexpr T * operator->() noexcept
Definition
CopyableBox.hpp:89
mimicpp::util
Definition
Fwd.hpp:451
mimic++
utilities
CopyableBox.hpp
Generated on
for mimic++ by
1.18.0