mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-22 09:12:13 -05:00
AK: Merge implementations of operator== for Optional
Instead of having a overload of the operator in each specialization of Optional, use a free function as a common implementation.
This commit is contained in:
parent
a4abb35776
commit
d6abd44522
Notes:
github-actions[bot]
2025-01-03 16:12:15 +00:00
Author: https://github.com/LucasChollet Commit: https://github.com/LadybirdBrowser/ladybird/commit/d6abd44522a Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3081
4 changed files with 13 additions and 74 deletions
|
@ -155,18 +155,6 @@ public:
|
|||
return *this;
|
||||
}
|
||||
|
||||
template<typename O>
|
||||
ALWAYS_INLINE bool operator==(Optional<O> const& other) const
|
||||
{
|
||||
return has_value() == other.has_value() && (!has_value() || value() == other.value());
|
||||
}
|
||||
|
||||
template<typename O>
|
||||
ALWAYS_INLINE bool operator==(O const& other) const
|
||||
{
|
||||
return has_value() && value() == other;
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
m_value = FlyString(nullptr);
|
||||
|
|
|
@ -120,20 +120,6 @@ public:
|
|||
return TRY(callback());
|
||||
}
|
||||
|
||||
template<typename O>
|
||||
ALWAYS_INLINE bool operator==(Optional<O> const& other) const
|
||||
{
|
||||
return static_cast<Self const&>(*this).has_value() == (other).has_value()
|
||||
&& (!static_cast<Self const&>(*this).has_value() || static_cast<Self const&>(*this).value() == (other).value());
|
||||
}
|
||||
|
||||
template<typename O>
|
||||
requires(!Detail::IsBaseOf<OptionalBase<T, Self>, O>)
|
||||
ALWAYS_INLINE bool operator==(O const& other) const
|
||||
{
|
||||
return static_cast<Self const&>(*this).has_value() && static_cast<Self const&>(*this).value() == other;
|
||||
}
|
||||
|
||||
[[nodiscard]] ALWAYS_INLINE T const& operator*() const { return static_cast<Self const&>(*this).value(); }
|
||||
[[nodiscard]] ALWAYS_INLINE T& operator*() { return static_cast<Self&>(*this).value(); }
|
||||
|
||||
|
@ -262,18 +248,6 @@ public:
|
|||
return *this;
|
||||
}
|
||||
|
||||
template<typename O>
|
||||
ALWAYS_INLINE bool operator==(Optional<O> const& other) const
|
||||
{
|
||||
return has_value() == other.has_value() && (!has_value() || value() == other.value());
|
||||
}
|
||||
|
||||
template<typename O>
|
||||
ALWAYS_INLINE bool operator==(O const& other) const
|
||||
{
|
||||
return has_value() && value() == other;
|
||||
}
|
||||
|
||||
ALWAYS_INLINE ~Optional()
|
||||
requires(!IsTriviallyDestructible<T> && IsDestructible<T>)
|
||||
{
|
||||
|
@ -488,18 +462,6 @@ public:
|
|||
return *exchange(m_pointer, nullptr);
|
||||
}
|
||||
|
||||
template<typename U>
|
||||
ALWAYS_INLINE bool operator==(Optional<U> const& other) const
|
||||
{
|
||||
return has_value() == other.has_value() && (!has_value() || value() == other.value());
|
||||
}
|
||||
|
||||
template<typename U>
|
||||
ALWAYS_INLINE bool operator==(U const& other) const
|
||||
{
|
||||
return has_value() && value() == other;
|
||||
}
|
||||
|
||||
ALWAYS_INLINE AddConstToReferencedType<T> operator*() const { return value(); }
|
||||
ALWAYS_INLINE T operator*() { return value(); }
|
||||
|
||||
|
@ -595,6 +557,19 @@ private:
|
|||
RemoveReference<T>* m_pointer { nullptr };
|
||||
};
|
||||
|
||||
template<typename T1, typename T2>
|
||||
ALWAYS_INLINE bool operator==(Optional<T1> const& first, Optional<T2> const& second)
|
||||
{
|
||||
return first.has_value() == second.has_value()
|
||||
&& (!first.has_value() || first.value() == second.value());
|
||||
}
|
||||
|
||||
template<typename T1, typename T2>
|
||||
ALWAYS_INLINE bool operator==(Optional<T1> const& first, T2 const& second)
|
||||
{
|
||||
return first.has_value() && first.value() == second;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#if USING_AK_GLOBALLY
|
||||
|
|
12
AK/String.h
12
AK/String.h
|
@ -283,18 +283,6 @@ public:
|
|||
return *this;
|
||||
}
|
||||
|
||||
template<typename O>
|
||||
ALWAYS_INLINE bool operator==(Optional<O> const& other) const
|
||||
{
|
||||
return has_value() == other.has_value() && (!has_value() || value() == other.value());
|
||||
}
|
||||
|
||||
template<typename O>
|
||||
ALWAYS_INLINE bool operator==(O const& other) const
|
||||
{
|
||||
return has_value() && value() == other;
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
m_value = String(nullptr);
|
||||
|
|
|
@ -593,18 +593,6 @@ public:
|
|||
return *this;
|
||||
}
|
||||
|
||||
template<typename O>
|
||||
ALWAYS_INLINE bool operator==(Optional<O> const& other) const
|
||||
{
|
||||
return has_value() == other.has_value() && (!has_value() || value() == other.value());
|
||||
}
|
||||
|
||||
template<typename O>
|
||||
ALWAYS_INLINE bool operator==(O const& other) const
|
||||
{
|
||||
return has_value() && value() == other;
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
m_value = {};
|
||||
|
|
Loading…
Reference in a new issue