Iros
 
Loading...
Searching...
No Matches
string.h
Go to the documentation of this file.
1#pragma once
2
10
11namespace di::format {
12template<concepts::detail::ConstantString T, concepts::Encoding Enc>
13constexpr auto tag_invoke(types::Tag<formatter_in_place>, InPlaceType<T>, FormatParseContext<Enc>& parse_context,
14 bool debug) {
15 return parse<detail::StringFormat>(parse_context.current_format_string()) % [=](detail::StringFormat format) {
16 return [=](concepts::FormatContext auto& context, T const& value) -> Result<void> {
17 auto width = format.width.transform(&detail::Width::value);
18 auto precision = format.precision.transform(&detail::Precision::value);
19 auto do_debug = format.type.has_value() ? format.type == detail::StringType::Debug : debug;
20 return detail::present_string_view_to(context, format.fill_and_align, width, precision, do_debug,
21 value.view());
22 };
23 };
24}
25
26namespace detail {
27 template<typename T>
28 concept ToStringFormattable = requires(T const& v) {
29 { v.to_string() } -> concepts::detail::ConstantString;
30 };
31}
32
33template<detail::ToStringFormattable T, concepts::Encoding Enc>
35 return di::format::formatter<container::string::StringViewImpl<Enc>, Enc>(parse_context, false) %
37 return [=](concepts::FormatContext auto& context, T const& a) {
38 return formatter(context, a.to_string().view());
39 };
40 };
41}
42
43template<concepts::Encoding Enc, concepts::Encoding OtherEnc>
45 FormatParseContext<OtherEnc>& parse_context) {
46 return di::format::formatter<container::string::StringViewImpl<Enc>, OtherEnc>(parse_context, true) %
48 return [=](concepts::FormatContext auto& context, container::PathViewImpl<Enc> a) {
49 return formatter(context, a.data());
50 };
51 };
52}
53
54template<concepts::detail::MutableString T, concepts::Encoding Enc>
56 FormatParseContext<Enc>& parse_context) {
59 return [=](concepts::FormatContext auto& context, container::PathImpl<T> const& a) {
60 return formatter(context, a.data());
61 };
62 };
63}
64}
Definition path_view_impl.h:15
Definition path_view_impl.h:22
Definition format_parse_context.h:14
Definition operations.h:34
Definition format_context.h:9
Definition constant_string.h:8
constexpr usize width
Definition gfx_test.cpp:21
Definition base.h:16
constexpr auto present_string_view_to(concepts::FormatContext auto &context, Optional< FillAndAlign > fill_and_align, Optional< size_t > width, Optional< size_t > precision, bool debug, container::string::StringViewImpl< Enc > view_in, char32_t delimit_code_point=U'"') -> Result<void>
Definition base.h:293
@ Debug
Definition base.h:105
Definition bounded_format_context.h:7
constexpr auto formatter(FormatParseContext< Enc > &parse_context, bool debug=false)
Definition formatter.h:27
constexpr auto value
Definition value.h:34
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Expected< T, Error > Result
Definition result.h:8
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto parse
Definition parse.h:23
@ T
Definition key.h:29
size_t value
Definition base.h:95
size_t value
Definition base.h:84
Definition in_place_type.h:5