forked from Bananymous/banan-os
BAN: Implement Optional::value_or
This will return value specified in the argument if optional is not storing any value.
This commit is contained in:
parent
e905634343
commit
62003d96f3
|
@ -40,6 +40,8 @@ namespace BAN
|
||||||
constexpr T release_value();
|
constexpr T release_value();
|
||||||
constexpr T& value();
|
constexpr T& value();
|
||||||
constexpr const T& value() const;
|
constexpr const T& value() const;
|
||||||
|
constexpr T& value_or(T&);
|
||||||
|
constexpr const T& value_or(const T&) const;
|
||||||
|
|
||||||
constexpr void clear();
|
constexpr void clear();
|
||||||
|
|
||||||
|
@ -112,7 +114,7 @@ namespace BAN
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
m_has_value = other.has_value();
|
m_has_value = other.has_value();
|
||||||
if (other.has_value)
|
if (other.has_value())
|
||||||
new (m_storage) T(other.value());
|
new (m_storage) T(other.value());
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -185,6 +187,22 @@ namespace BAN
|
||||||
return (const T&)m_storage;
|
return (const T&)m_storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
constexpr T& Optional<T>::value_or(T& empty)
|
||||||
|
{
|
||||||
|
if (!has_value())
|
||||||
|
return empty;
|
||||||
|
return (T&)m_storage;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
constexpr const T& Optional<T>::value_or(const T& empty) const
|
||||||
|
{
|
||||||
|
if (!has_value())
|
||||||
|
return empty;
|
||||||
|
return (const T&)m_storage;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr void Optional<T>::clear()
|
constexpr void Optional<T>::clear()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue