Iros
 
Loading...
Searching...
No Matches
print.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/format/prelude.h"
4#include "di/util/prelude.h"
7
8namespace iris {
10
11namespace detail {
12 struct DebugFormatContext;
13}
14
17void log_prologue(detail::DebugFormatContext&, di::SourceLocation = di::SourceLocation::current());
18
19namespace detail {
22 using SupportsStyle = void;
23
24 explicit DebugFormatContext() : m_lock_guard(global_state().debug_output_lock) {}
25
26 void output(c32 value) { log_output_character(value); }
27
28 auto encoding() const { return Encoding {}; }
29
32 auto [before, after] = style.render_to_ansi_escapes<Encoding>();
33 for (auto code_point : before) {
34 output(code_point);
35 }
36 TRY(inner());
37 for (auto code_point : after) {
38 output(code_point);
39 }
40 return {};
41 }
42
43 private:
44 di::ScopedLock<Spinlock> m_lock_guard;
45 };
46}
47
48template<typename... Args>
54
55template<typename... Args>
57 auto context = detail::DebugFormatContext {};
58 log_prologue(context, format.location());
61 context.output('\n');
62}
63}
static consteval auto current(char const *file_name=__builtin_FILE(), char const *function_name=__builtin_FUNCTION(), unsigned int line=__builtin_LINE(), unsigned int column=__builtin_COLUMN()) -> SourceLocation
Definition source_location.h:12
Definition utf8_encoding.h:107
constexpr auto location() const
Definition format_string_impl.h:61
Definition style.h:45
Definition scoped_lock.h:8
Definition source_location.h:10
Definition invoke.h:69
#define TRY
Definition monad_try.h:23
constexpr auto make_format_args(Types &&... values)
Definition make_format_args.h:9
constexpr auto vpresent_encoded_context
Definition vpresent_encoded_context.h:61
detail::FormatStringWithLocationImpl< Enc, meta::TypeIdentity< Args >... > FormatStringWithLocationImpl
Definition format_string_impl.h:73
std::byte Byte
Definition byte.h:63
char32_t c32
Definition char.h:6
Expected< T, Error > Result
Definition result.h:8
Definition object_pool.h:14
Definition cxx_init.cpp:12
di::container::string::Utf8Encoding Encoding
Definition print.h:9
auto global_state() -> GlobalState const &
Definition global_state.h:89
void log_prologue(detail::DebugFormatContext &context, di::SourceLocation location)
Definition print.cpp:8
void log_output_byte(di::Byte byte)
Definition serial.cpp:59
void log_output_character(c32 value)
Definition print.cpp:7
void print(di::format::FormatStringWithLocationImpl< Encoding, Args... > format, Args &&... args)
Definition print.h:49
void println(di::format::FormatStringWithLocationImpl< Encoding, Args... > format, Args &&... args)
Definition print.h:56
auto encoding() const
Definition print.h:28
auto with_style(di::format::Style style, di::concepts::InvocableTo< di::Result< void > > auto inner) -> di::Result< void >
Definition print.h:30
void output(c32 value)
Definition print.h:26
DebugFormatContext()
Definition print.h:24
void SupportsStyle
Definition print.h:22
iris::Encoding Encoding
Definition print.h:21