mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 11:37:34 +00:00
AK+Everywhere: Make StdLibExtras templates less wrapper-y
This commit makes the user-facing StdLibExtras templates and utilities arguably more nice-looking by removing the need to reach into the wrapper structs generated by them to get the value/type needed. The C++ standard library had to invent `_v` and `_t` variants (likely because of backwards compat), but we don't need to cater to any codebase except our own, so might as well have good things for free. :^)
This commit is contained in:
parent
d8d16dea95
commit
a6e4482080
41 changed files with 650 additions and 662 deletions
|
@ -44,35 +44,35 @@
|
|||
\
|
||||
[[nodiscard]] Prefix constexpr inline Enum operator|(Enum lhs, Enum rhs) \
|
||||
{ \
|
||||
using Type = UnderlyingType<Enum>::Type; \
|
||||
using Type = UnderlyingType<Enum>; \
|
||||
return static_cast<Enum>( \
|
||||
static_cast<Type>(lhs) | static_cast<Type>(rhs)); \
|
||||
} \
|
||||
\
|
||||
[[nodiscard]] Prefix constexpr inline Enum operator&(Enum lhs, Enum rhs) \
|
||||
{ \
|
||||
using Type = UnderlyingType<Enum>::Type; \
|
||||
using Type = UnderlyingType<Enum>; \
|
||||
return static_cast<Enum>( \
|
||||
static_cast<Type>(lhs) & static_cast<Type>(rhs)); \
|
||||
} \
|
||||
\
|
||||
[[nodiscard]] Prefix constexpr inline Enum operator^(Enum lhs, Enum rhs) \
|
||||
{ \
|
||||
using Type = UnderlyingType<Enum>::Type; \
|
||||
using Type = UnderlyingType<Enum>; \
|
||||
return static_cast<Enum>( \
|
||||
static_cast<Type>(lhs) ^ static_cast<Type>(rhs)); \
|
||||
} \
|
||||
\
|
||||
[[nodiscard]] Prefix constexpr inline Enum operator~(Enum rhs) \
|
||||
{ \
|
||||
using Type = UnderlyingType<Enum>::Type; \
|
||||
using Type = UnderlyingType<Enum>; \
|
||||
return static_cast<Enum>( \
|
||||
~static_cast<Type>(rhs)); \
|
||||
} \
|
||||
\
|
||||
Prefix constexpr inline Enum& operator|=(Enum& lhs, Enum rhs) \
|
||||
{ \
|
||||
using Type = UnderlyingType<Enum>::Type; \
|
||||
using Type = UnderlyingType<Enum>; \
|
||||
lhs = static_cast<Enum>( \
|
||||
static_cast<Type>(lhs) | static_cast<Type>(rhs)); \
|
||||
return lhs; \
|
||||
|
@ -80,7 +80,7 @@
|
|||
\
|
||||
Prefix constexpr inline Enum& operator&=(Enum& lhs, Enum rhs) \
|
||||
{ \
|
||||
using Type = UnderlyingType<Enum>::Type; \
|
||||
using Type = UnderlyingType<Enum>; \
|
||||
lhs = static_cast<Enum>( \
|
||||
static_cast<Type>(lhs) & static_cast<Type>(rhs)); \
|
||||
return lhs; \
|
||||
|
@ -88,7 +88,7 @@
|
|||
\
|
||||
Prefix constexpr inline Enum& operator^=(Enum& lhs, Enum rhs) \
|
||||
{ \
|
||||
using Type = UnderlyingType<Enum>::Type; \
|
||||
using Type = UnderlyingType<Enum>; \
|
||||
lhs = static_cast<Enum>( \
|
||||
static_cast<Type>(lhs) ^ static_cast<Type>(rhs)); \
|
||||
return lhs; \
|
||||
|
@ -96,6 +96,6 @@
|
|||
\
|
||||
Prefix constexpr inline bool has_flag(Enum value, Enum mask) \
|
||||
{ \
|
||||
using Type = UnderlyingType<Enum>::Type; \
|
||||
using Type = UnderlyingType<Enum>; \
|
||||
return static_cast<Type>(value & mask) != 0; \
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue