AK: Add outf, warnf and dbgf.

This commit is contained in:
asynts 2020-09-23 14:45:41 +02:00 committed by Andreas Kling
parent b7a4c4482f
commit 5ed15a49f2
3 changed files with 33 additions and 0 deletions

View file

@ -142,6 +142,12 @@ void vformat(StringBuilder& builder, StringView fmtstr, AK::Span<const TypeErase
vformat(builder, fmtstr.substring_view(closing + 1), parameters, argument_index); vformat(builder, fmtstr.substring_view(closing + 1), parameters, argument_index);
} }
void vformat(const LogStream& stream, StringView fmtstr, Span<const TypeErasedParameter> parameters)
{
StringBuilder builder;
vformat(builder, fmtstr, parameters);
stream << builder.to_string();
}
bool Formatter<StringView>::parse(StringView flags) bool Formatter<StringView>::parse(StringView flags)
{ {

View file

@ -92,5 +92,6 @@ Array<TypeErasedParameter, sizeof...(Parameters)> make_type_erased_parameters(co
} }
void vformat(StringBuilder& builder, StringView fmtstr, Span<const TypeErasedParameter>, size_t argument_index = 0); void vformat(StringBuilder& builder, StringView fmtstr, Span<const TypeErasedParameter>, size_t argument_index = 0);
void vformat(const LogStream& stream, StringView fmtstr, Span<const TypeErasedParameter>);
} // namespace AK } // namespace AK

View file

@ -26,6 +26,7 @@
#pragma once #pragma once
#include <AK/Format.h>
#include <AK/Forward.h> #include <AK/Forward.h>
#include <AK/Types.h> #include <AK/Types.h>
#include <AK/kmalloc.h> #include <AK/kmalloc.h>
@ -206,13 +207,38 @@ DebugLogStream klog();
void dump_bytes(ReadonlyBytes); void dump_bytes(ReadonlyBytes);
#ifndef KERNEL
template<typename... Parameters>
void outf(StringView fmtstr, const Parameters&... parameters)
{
const auto type_erased_parameters = make_type_erased_parameters(parameters...);
vformat(out(), fmtstr, type_erased_parameters);
}
template<typename... Parameters>
void warnf(StringView fmtstr, const Parameters&... parameters)
{
const auto type_erased_parameters = make_type_erased_parameters(parameters...);
vformat(warn(), fmtstr, type_erased_parameters);
}
#endif
template<typename... Parameters>
void dbgf(StringView fmtstr, const Parameters&... parameters)
{
const auto type_erased_parameters = make_type_erased_parameters(parameters...);
vformat(dbg(), fmtstr, type_erased_parameters);
}
} }
using AK::dbg; using AK::dbg;
using AK::dbgf;
using AK::klog; using AK::klog;
using AK::LogStream; using AK::LogStream;
#if !defined(KERNEL) #if !defined(KERNEL)
using AK::out; using AK::out;
using AK::outf;
using AK::warn; using AK::warn;
using AK::warnf;
#endif #endif