mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 04:27:45 +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
19
AK/Format.h
19
AK/Format.h
|
@ -93,10 +93,10 @@ struct TypeErasedParameter {
|
|||
template<typename T>
|
||||
static Type get_type()
|
||||
{
|
||||
if (IsIntegral<T>::value)
|
||||
return get_type_from_size(sizeof(T), IsUnsigned<T>::value);
|
||||
|
||||
return Type::Custom;
|
||||
if constexpr (IsIntegral<T>)
|
||||
return get_type_from_size(sizeof(T), IsUnsigned<T>);
|
||||
else
|
||||
return Type::Custom;
|
||||
}
|
||||
|
||||
size_t to_size() const;
|
||||
|
@ -269,7 +269,7 @@ struct StandardFormatter {
|
|||
};
|
||||
|
||||
template<typename T>
|
||||
struct Formatter<T, typename EnableIf<IsIntegral<T>::value>::Type> : StandardFormatter {
|
||||
struct Formatter<T, typename EnableIf<IsIntegral<T>>::Type> : StandardFormatter {
|
||||
Formatter() = default;
|
||||
explicit Formatter(StandardFormatter formatter)
|
||||
: StandardFormatter(formatter)
|
||||
|
@ -416,11 +416,10 @@ void dmesgln(CheckedFormatString<Parameters...>&& fmt, const Parameters&... para
|
|||
#endif
|
||||
|
||||
template<typename T, typename = void>
|
||||
struct HasFormatter : TrueType {
|
||||
};
|
||||
inline constexpr bool HasFormatter = true;
|
||||
|
||||
template<typename T>
|
||||
struct HasFormatter<T, typename Formatter<T>::__no_formatter_defined> : FalseType {
|
||||
};
|
||||
inline constexpr bool HasFormatter<T, typename Formatter<T>::__no_formatter_defined> = false;
|
||||
|
||||
template<typename T>
|
||||
class FormatIfSupported {
|
||||
|
@ -450,7 +449,7 @@ struct __FormatIfSupported<T, true> : Formatter<T> {
|
|||
}
|
||||
};
|
||||
template<typename T>
|
||||
struct Formatter<FormatIfSupported<T>> : __FormatIfSupported<T, HasFormatter<T>::value> {
|
||||
struct Formatter<FormatIfSupported<T>> : __FormatIfSupported<T, HasFormatter<T>> {
|
||||
};
|
||||
|
||||
// This is a helper class, the idea is that if you want to implement a formatter you can inherit
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue