AK: Avoid temporary String allocation in Formatter<FormatString>
Creating a String object from the formatted data is unnecessary, as it immediately gets turned into a StringView anyways. With this change, we will no longer allocate on the heap when printing `VirtualAddress`, `VirtualRange` and `InodeIdentifier` objects, which is a step towards stronger OOM hardening.
This commit is contained in:
parent
018c4e0e7e
commit
39a74676bd
Notes:
sideshowbarker
2024-07-18 02:05:19 +09:00
Author: https://github.com/BertalanD Commit: https://github.com/SerenityOS/serenity/commit/39a74676bd7 Pull-request: https://github.com/SerenityOS/serenity/pull/10558
2 changed files with 4 additions and 2 deletions
|
@ -610,7 +610,9 @@ void Formatter<StringView>::format(FormatBuilder& builder, StringView value)
|
|||
|
||||
void Formatter<FormatString>::vformat(FormatBuilder& builder, StringView fmtstr, TypeErasedFormatParams& params)
|
||||
{
|
||||
return Formatter<String>::format(builder, String::vformatted(fmtstr, params));
|
||||
StringBuilder string_builder;
|
||||
AK::vformat(string_builder, fmtstr, params);
|
||||
return Formatter<StringView>::format(builder, string_builder.string_view());
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
|
|
|
@ -595,7 +595,7 @@ struct Formatter<FormatIfSupported<T>> : __FormatIfSupported<T, HasFormatter<T>>
|
|||
struct FormatString {
|
||||
};
|
||||
template<>
|
||||
struct Formatter<FormatString> : Formatter<String> {
|
||||
struct Formatter<FormatString> : Formatter<StringView> {
|
||||
template<typename... Parameters>
|
||||
void format(FormatBuilder& builder, StringView fmtstr, const Parameters&... parameters)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue