Go to the documentation of this file.
9 #ifndef EAGINE_STR_FORMAT_HPP
10 #define EAGINE_STR_FORMAT_HPP
12 #include "config/basic.hpp"
20 class format_string_and_list_base {
23 format_string_and_list_base(std::string&& fmt_str) noexcept
24 : _fmt_str(std::move(fmt_str)) {}
26 format_string_and_list_base(format_string_and_list_base& that) noexcept
27 : _fmt_str(std::move(that._fmt_str)) {}
29 format_string_and_list_base(format_string_and_list_base&&) noexcept =
31 format_string_and_list_base(const format_string_and_list_base&) = default;
33 auto operator=(format_string_and_list_base&&) noexcept
34 -> format_string_and_list_base& = default;
36 auto operator=(const format_string_and_list_base&)
37 -> format_string_and_list_base& = default;
39 ~format_string_and_list_base() noexcept = default;
41 auto _fmt(
span<const std::
string> values) const -> std::
string;
54 : format_string_and_list_base(std::move(fmt_str)) {}
56 operator std::string()
const {
64 template <span_
size_t N>
70 std::string&& val) noexcept
71 : format_string_and_list_base(prev) {
73 _list[i] = std::move(prev._list[i]);
75 _list[N - 1] = std::move(val);
79 operator std::string()
const {
80 return _fmt(
view(_list));
84 std::array<std::string, N> _list{};
88 class format_string_and_list<1> :
public format_string_and_list_base {
91 format_string_and_list(
92 format_string_and_list<0>&& prev,
93 std::string&& val) noexcept
94 : format_string_and_list_base(prev) {
95 _list[0] = std::move(val);
98 operator std::string()
const {
99 return _fmt(
view(_list));
103 std::array<std::string, 1> _list{};
109 template <span_
size_t N>
113 return {std::move(fsal), std::move(val)};
118 static inline auto format(std::string&& fmt_str) noexcept
125 #if !EAGINE_LINK_LIBRARY || defined(EAGINE_IMPLEMENTING_LIBRARY)
126 #include <eagine/str_format.inl>
129 #endif // EAGINE_STR_FORMAT_HPP
std::ptrdiff_t span_size_t
Signed span size type used by eagine.
Definition: types.hpp:36
Common code is placed in this namespace.
Definition: eagine.hpp:21
static constexpr auto view(T *addr, S size) noexcept -> const_span< T >
Creates a view starting at the specified pointer and specified length.
Definition: span.hpp:458
basic_span< T, T *, S > span
Default alias for basic memory spans with native pointer type.
Definition: span.hpp:415
static auto format(std::string &&fmt_str) noexcept -> format_string_and_list< 0 >
Function taking a format string, returning an object for variable specification.
Definition: str_format.hpp:118
static auto operator%(format_string_and_list< N > &&fsal, std::string &&val) noexcept -> format_string_and_list< N+1 >
Operator for adding variable name and value for string formatting.
Definition: str_format.hpp:111
integer_range(B, E) -> integer_range< std::common_type_t< B, E >>
Deduction guide for integer_range.