diff options
author | asynts <asynts@gmail.com> | 2020-09-23 14:45:41 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-09-23 21:45:28 +0200 |
commit | 5ed15a49f2320274fc9ed7c639abdc9d3e407fb4 (patch) | |
tree | 5d2d4c3debb0ec2e23df31747e3bb0c760f55122 | |
parent | b7a4c4482fdb839ba767d5125aed6e35e34276d1 (diff) | |
download | serenity-5ed15a49f2320274fc9ed7c639abdc9d3e407fb4.zip |
AK: Add outf, warnf and dbgf.
-rw-r--r-- | AK/Format.cpp | 6 | ||||
-rw-r--r-- | AK/Format.h | 1 | ||||
-rw-r--r-- | AK/LogStream.h | 26 |
3 files changed, 33 insertions, 0 deletions
diff --git a/AK/Format.cpp b/AK/Format.cpp index 9868a559b2..18a3819c25 100644 --- a/AK/Format.cpp +++ b/AK/Format.cpp @@ -142,6 +142,12 @@ void vformat(StringBuilder& builder, StringView fmtstr, AK::Span<const TypeErase 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) { diff --git a/AK/Format.h b/AK/Format.h index 0d9ba16349..8646915da0 100644 --- a/AK/Format.h +++ b/AK/Format.h @@ -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(const LogStream& stream, StringView fmtstr, Span<const TypeErasedParameter>); } // namespace AK diff --git a/AK/LogStream.h b/AK/LogStream.h index cfe88f1d14..5cbafccadf 100644 --- a/AK/LogStream.h +++ b/AK/LogStream.h @@ -26,6 +26,7 @@ #pragma once +#include <AK/Format.h> #include <AK/Forward.h> #include <AK/Types.h> #include <AK/kmalloc.h> @@ -206,13 +207,38 @@ DebugLogStream klog(); 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::dbgf; using AK::klog; using AK::LogStream; #if !defined(KERNEL) using AK::out; +using AK::outf; using AK::warn; +using AK::warnf; #endif |