Loading [MathJax]/extensions/tex2jax.js
Iros
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
Loading...
Searching...
No Matches
vpresent_encoded_context.h
Go to the documentation of this file.
1#pragma once
2
10#include "di/format/formatter.h"
13
14namespace di::format {
15namespace detail {
16 template<concepts::Encoding Enc, typename Var>
17 constexpr auto do_format(Var&& variant, FormatParseContext<Enc>& parse_context,
18 concepts::FormatContext auto& context, bool debug = false) -> Result<void> {
20 [&]<typename T>(T&& value) -> Result<void> {
22 return value.do_format(parse_context, context, debug);
23 } else {
24 auto formatter = DI_TRY(format::formatter<meta::RemoveCVRef<T>, Enc>(parse_context, debug));
25 return formatter(context, value);
26 }
27 },
28 variant);
29 }
30
31 template<concepts::Encoding Enc>
34
35 template<concepts::FormatArg Arg>
36 constexpr auto operator()(View format, FormatArgs<Arg> args, concepts::FormatContext auto& context,
37 bool debug = false) const -> Result<void> {
38 auto parse_context = FormatParseContext<Enc> { format, args.size() };
39
40 for (auto value : parse_context) {
41 DI_ASSERT(value);
42
43 // Literal text.
44 if (value->index() == 0) {
45 for (auto code_point : util::get<0>(*value)) {
46 context.output(code_point);
47 }
48 continue;
49 }
50
51 // Format argument.
52 auto arg_index = util::get<1>(*value).index;
53 DI_TRY(do_format(args[arg_index], parse_context, context, debug));
54 }
55 return {};
56 }
57 };
58}
59
60template<concepts::Encoding Enc>
62}
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition string_view_impl_forward_declaration.h:7
Definition format_arg.h:15
Definition format_args.h:8
constexpr auto size() const -> size_t
Definition format_args.h:12
Definition format_parse_context.h:14
Definition format_context.h:9
Definition core.h:139
#define DI_TRY(...)
Definition monad_try.h:13
Definition base.h:16
constexpr auto do_format(Var &&variant, FormatParseContext< Enc > &parse_context, concepts::FormatContext auto &context, bool debug=false) -> Result< void >
Definition vpresent_encoded_context.h:17
Definition bounded_format_context.h:7
constexpr auto vpresent_encoded_context
Definition vpresent_encoded_context.h:61
constexpr auto formatter(FormatParseContext< Enc > &parse_context, bool debug=false)
Definition formatter.h:27
RemoveCV< RemoveReference< T > > RemoveCVRef
Definition core.h:74
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
Expected< T, Error > Result
Definition result.h:8
constexpr auto visit(Vis &&visitor, Vars &&... variants) -> R
Definition visit.h:39
Definition vpresent_encoded_context.h:32
container::string::StringViewImpl< Enc > View
Definition vpresent_encoded_context.h:33
constexpr auto operator()(View format, FormatArgs< Arg > args, concepts::FormatContext auto &context, bool debug=false) const -> Result< void >
Definition vpresent_encoded_context.h:36