mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-22 09:12:13 -05:00
AK: Introduce an as_if<OutputType>() cast
We currently have a fair amount of code of the form: if (is<Child>(parent)) { auto& child = static_cast<Child&>(parent); if (child.foo()) { } } This new cast allows us to instead write code of the form: if (auto* child = as_if<Child>(parent); child && child->foo()) { } N.B. The name "as_if" was chosen because we are considering renaming verify_cast to "as". Co-authored-by: Tim Ledbetter <tim.ledbetter@ladybird.org>
This commit is contained in:
parent
ef793d8679
commit
fc20e61e72
Notes:
github-actions[bot]
2025-01-21 14:00:12 +00:00
Author: https://github.com/trflynn89 Commit: https://github.com/LadybirdBrowser/ladybird/commit/fc20e61e724 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3324
1 changed files with 17 additions and 0 deletions
|
@ -51,9 +51,26 @@ ALWAYS_INLINE CopyConst<InputType, OutputType>& verify_cast(InputType& input)
|
|||
return static_cast<CopyConst<InputType, OutputType>&>(input);
|
||||
}
|
||||
|
||||
template<typename OutputType, typename InputType>
|
||||
ALWAYS_INLINE CopyConst<InputType, OutputType>* as_if(InputType& input)
|
||||
{
|
||||
if (!is<OutputType>(input))
|
||||
return nullptr;
|
||||
return static_cast<CopyConst<InputType, OutputType>*>(&input);
|
||||
}
|
||||
|
||||
template<typename OutputType, typename InputType>
|
||||
ALWAYS_INLINE CopyConst<InputType, OutputType>* as_if(InputType* input)
|
||||
{
|
||||
if (!input)
|
||||
return nullptr;
|
||||
return as_if<OutputType>(*input);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#if USING_AK_GLOBALLY
|
||||
using AK::as_if;
|
||||
using AK::is;
|
||||
using AK::verify_cast;
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue