Iros
 
Loading...
Searching...
No Matches
format_string_impl.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/meta/constexpr.h"
8#include "di/meta/util.h"
10
11namespace di::format {
12namespace detail {
13 template<concepts::Encoding Enc, concepts::Formattable... Args>
15 private:
17
18 public:
19 consteval FormatStringImpl(StringView view) : m_view(view) {
20 auto parse_context = format::FormatParseContext<Enc> { view, sizeof...(Args) };
21 for (auto part : parse_context) {
22 if (!part) {
23 util::compile_time_fail<FixedString { "Invalid format string." }>();
24 } else if (part->index() == 0) {
25 continue;
26 }
27
28 if constexpr (sizeof...(Args) > 0) {
29 auto arg_index = util::get<1>(*part).index;
30 function::index_dispatch<void, sizeof...(Args)>(arg_index, [&]<size_t index>(Constexpr<index>) {
31 auto formatter = format::formatter<meta::At<meta::List<Args...>, index>>(parse_context);
32 if (!formatter) {
33 util::compile_time_fail<FixedString { "Invalid format string argument format." }>();
34 }
35 });
36 }
37 }
38 }
39
40 constexpr operator StringView() const { return m_view; }
41
42 constexpr auto encoding() const { return m_view.encoding(); }
43
44 private:
45 StringView m_view;
46 };
47
48 template<concepts::Encoding Enc, concepts::Formattable... Args>
50 private:
52
53 public:
54 consteval FormatStringWithLocationImpl(StringView view,
56 : m_base(view), m_location(location) {}
57
58 constexpr operator StringView() const { return m_base; }
59
60 constexpr auto encoding() const { return m_base.encoding(); }
61 constexpr auto location() const { return m_location; }
62
63 private:
64 FormatStringImpl<Enc, Args...> m_base;
65 util::SourceLocation m_location;
66 };
67}
68
69template<concepts::Encoding Enc, concepts::Formattable... Args>
71
72template<concepts::Encoding Enc, concepts::Formattable... Args>
74}
75
76namespace di {
78}
Definition fixed_string.h:7
Definition string_view_impl_forward_declaration.h:7
Definition format_parse_context.h:14
Definition format_string_impl.h:14
consteval FormatStringImpl(StringView view)
Definition format_string_impl.h:19
constexpr auto encoding() const
Definition format_string_impl.h:42
Definition format_string_impl.h:49
constexpr auto encoding() const
Definition format_string_impl.h:60
consteval FormatStringWithLocationImpl(StringView view, util::SourceLocation location=util::SourceLocation::current())
Definition format_string_impl.h:54
constexpr auto location() const
Definition format_string_impl.h:61
Definition source_location.h:10
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 encoding.h:205
Definition formattable.h:9
string::StringViewImpl< string::Utf8Encoding > StringView
Definition string_view.h:12
Definition base.h:16
Definition bounded_format_context.h:7
constexpr auto formatter(FormatParseContext< Enc > &parse_context, bool debug=false)
Definition formatter.h:27
detail::FormatStringImpl< Enc, meta::TypeIdentity< Args >... > FormatStringImpl
Definition format_string_impl.h:70
detail::FormatStringWithLocationImpl< Enc, meta::TypeIdentity< Args >... > FormatStringWithLocationImpl
Definition format_string_impl.h:73
constexpr auto index_dispatch
Definition index_dispatch.h:41
typename T::template At< index > At
Definition list.h:110
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
void compile_time_fail()
Definition compile_time_fail.h:7
Definition zstring_parser.h:9
A wrapper for a constexpr value.
Definition core.h:77
Definition core.h:5