17 template<
typename T>
class Optional :
private std::optional<T> {
19 using Base = std::optional<T>;
26 using Base::operator
bool;
27 using Base::operator*;
28 using Base::operator->;
39 [[
nodiscard]]
constexpr std::remove_cv_t<T>
get(
T&& defaultValue)
const& {
return base().value_or(defaultValue); }
40 [[
nodiscard]]
constexpr std::remove_cv_t<T>
get(
T&& defaultValue)
const&& {
return base().value_or(defaultValue); }
80 template<
typename T>
class Optional<
T&> :
private std::optional<std::reference_wrapper<T>> {
82 using Base = std::optional<std::reference_wrapper<T>>;
91 using Base::operator
bool;
108 template<
typename A>
friend constexpr bool operator==(
const Optional<A>& lhs,
const std::nullopt_t&);
113 template<
typename A>
friend constexpr bool operator!=(
const Optional<A>& lhs,
const std::nullopt_t&);
116 template<
typename A,
typename B>
friend constexpr bool operator>(
const Optional<A>& lhs,
const B& rhs);
117 template<
typename A,
typename B>
friend constexpr bool operator>(
const A& lhs,
const Optional<B>& rhs);
118 template<
typename A>
friend constexpr bool operator>(
const Optional<A>& lhs,
const std::nullopt_t&);
123 template<
typename A>
friend constexpr bool operator>=(
const Optional<A>& lhs,
const std::nullopt_t&);
126 template<
typename A,
typename B>
friend constexpr bool operator<(
const Optional<A>& lhs,
const B& rhs);
127 template<
typename A,
typename B>
friend constexpr bool operator<(
const A& lhs,
const Optional<B>& rhs);
128 template<
typename A>
friend constexpr bool operator<(
const Optional<A>& lhs,
const std::nullopt_t&);
133 template<
typename A>
friend constexpr bool operator<=(
const Optional<A>& lhs,
const std::nullopt_t&);
174template<
typename T>
struct std::hash<
CeresEngine::Optional<T>> {
175 inline size_t operator()(
const CeresEngine::Optional<T>& value)
const noexcept {
return value ? std::hash<T>{}(value.get()) : 0; }
const T & operator*() const
Definition Optional.hpp:99
T * operator->()
Definition Optional.hpp:101
Optional(T *pointer)
Definition Optional.hpp:86
Base & base() &
Definition Optional.hpp:136
const Base & base() const &
Definition Optional.hpp:138
const Base && base() const &&
Definition Optional.hpp:139
const T * operator->() const
Definition Optional.hpp:102
constexpr bool hasValue() const
Definition Optional.hpp:94
std::optional< std::reference_wrapper< T > > Base
Definition Optional.hpp:82
Base && base() &&
Definition Optional.hpp:137
T & operator*()
Definition Optional.hpp:98
constexpr T & get() const
Definition Optional.hpp:96
Definition Optional.hpp:17
std::optional< T > Base
Definition Optional.hpp:19
friend constexpr bool operator==(const Optional< A > &lhs, const B &rhs)
Definition Optional.hpp:143
constexpr T & get() &
Definition Optional.hpp:33
friend constexpr bool operator>=(const Optional< A > &lhs, const std::nullopt_t &)
Definition Optional.hpp:160
const Base && base() const &&
Definition Optional.hpp:77
friend constexpr bool operator<=(const Optional< A > &lhs, const B &rhs)
Definition Optional.hpp:168
friend constexpr bool operator==(const A &lhs, const Optional< B > &rhs)
Definition Optional.hpp:144
constexpr T && get() &&
Definition Optional.hpp:34
friend constexpr bool operator>(const Optional< A > &lhs, const Optional< B > &rhs)
Definition Optional.hpp:152
constexpr std::remove_cv_t< T > get(T &&defaultValue) const &
Definition Optional.hpp:39
friend constexpr bool operator>(const Optional< A > &lhs, const B &rhs)
Definition Optional.hpp:153
constexpr std::remove_cv_t< T > get(T &&defaultValue) const &&
Definition Optional.hpp:40
friend constexpr bool operator<(const Optional< A > &lhs, const B &rhs)
Definition Optional.hpp:163
friend constexpr bool operator>=(const Optional< A > &lhs, const B &rhs)
Definition Optional.hpp:158
constexpr const T & get() const &&
Definition Optional.hpp:37
friend constexpr bool operator<=(const Optional< A > &lhs, const Optional< B > &rhs)
Definition Optional.hpp:167
friend constexpr bool operator>(const Optional< A > &lhs, const std::nullopt_t &)
Definition Optional.hpp:155
friend constexpr bool operator!=(const Optional< A > &lhs, const B &rhs)
Definition Optional.hpp:148
friend constexpr bool operator>(const A &lhs, const Optional< B > &rhs)
Definition Optional.hpp:154
friend constexpr bool operator<=(const A &lhs, const Optional< B > &rhs)
Definition Optional.hpp:169
constexpr bool hasValue() const
Definition Optional.hpp:31
constexpr const T & get() const &
Definition Optional.hpp:36
friend constexpr bool operator<(const A &lhs, const Optional< B > &rhs)
Definition Optional.hpp:164
friend constexpr bool operator==(const Optional< A > &lhs, const Optional< B > &rhs)
Definition Optional.hpp:142
friend constexpr bool operator<=(const Optional< A > &lhs, const std::nullopt_t &)
Definition Optional.hpp:170
const Base & base() const &
Definition Optional.hpp:76
Base & base() &
Definition Optional.hpp:74
friend constexpr bool operator!=(const Optional< A > &lhs, const Optional< B > &rhs)
Definition Optional.hpp:147
friend constexpr bool operator==(const Optional< A > &lhs, const std::nullopt_t &)
Definition Optional.hpp:145
friend constexpr bool operator>=(const A &lhs, const Optional< B > &rhs)
Definition Optional.hpp:159
Base && base() &&
Definition Optional.hpp:75
friend constexpr bool operator!=(const Optional< A > &lhs, const std::nullopt_t &)
Definition Optional.hpp:150
friend constexpr bool operator<(const Optional< A > &lhs, const Optional< B > &rhs)
Definition Optional.hpp:162
friend constexpr bool operator!=(const A &lhs, const Optional< B > &rhs)
Definition Optional.hpp:149
friend constexpr bool operator<(const Optional< A > &lhs, const std::nullopt_t &)
Definition Optional.hpp:165
friend constexpr bool operator>=(const Optional< A > &lhs, const Optional< B > &rhs)
Definition Optional.hpp:157
Definition Application.hpp:19
constexpr bool operator<(const Optional< A > &lhs, const Optional< B > &rhs)
Definition Optional.hpp:162
decltype(auto) get(BezierPath::Element &element) noexcept
Decomposes a bezier path element.
Definition BezierPath.hpp:723
bool operator!=(const ShortAllocator< T, N, A1 > &x, const ShortAllocator< U, M, A2 > &y) noexcept
Definition Allocator.hpp:416
constexpr bool operator>=(const Optional< A > &lhs, const Optional< B > &rhs)
Definition Optional.hpp:157
bool operator==(const ShortAllocator< T, N, A1 > &x, const ShortAllocator< U, M, A2 > &y) noexcept
Definition Allocator.hpp:411
constexpr bool operator>(const Optional< A > &lhs, const Optional< B > &rhs)
Definition Optional.hpp:152
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
constexpr bool operator<=(const Optional< A > &lhs, const Optional< B > &rhs)
Definition Optional.hpp:167