37 const T&
unwrap(
const std::reference_wrapper<T>& v)
39 return static_cast<const T&
>(v);
47 template <
typename =
void>
51 std::unique_ptr<node<>>
next;
59 template <
typename Arg>
65 template <
typename Char>
75 template <
typename T,
typename Arg>
80 new_node->next = std::move(
head_);
81 head_ = std::move(new_node);
97template <
typename Context>
107 template <
typename T>
110 static constexpr detail::type mapped_type =
111 detail::mapped_type_constant<T, Context>::value;
116 std::is_same<T, basic_string_view<char_type>>
::value ||
117 std::is_same<T, detail::std_string_view<char_type>>
::value ||
118 (mapped_type != detail::type::cstring_type &&
119 mapped_type != detail::type::string_type &&
120 mapped_type != detail::type::custom_type))
124 template <
typename T>
126 std::is_convertible<T, std::basic_string<char_type>>
::value &&
128 std::basic_string<char_type>,
132 std::vector<basic_format_arg<Context>>
data_;
143 return detail::is_unpacked_bit | data_.size() |
146 :
static_cast<unsigned long long>(detail::has_named_args_bit));
151 return named_info_.empty() ? data_.data() : data_.data() + 1;
154 template <
typename T>
157 data_.emplace_back(detail::make_arg<Context>(
arg));
160 template <
typename T>
163 if (named_info_.empty())
165 constexpr const detail::named_arg_info<char_type>* zero_ptr{
nullptr};
166 data_.insert(data_.begin(), {zero_ptr, 0});
169 auto pop_one = [](std::vector<basic_format_arg<Context>>*
data) {
172 std::unique_ptr<std::vector<basic_format_arg<Context>>,
decltype(pop_one)>
173 guard{&data_, pop_one};
174 named_info_.push_back({
arg.name,
static_cast<int>(data_.size() - 2u)});
175 data_[0].value_.named_args = {named_info_.data(), named_info_.size()};
199 template <
typename T>
223 template <
typename T>
228 "objects of built-in types and string views are always copied");
229 emplace_arg(
arg.get());
237 template <
typename T>
241 dynamic_args_.
push<std::basic_string<char_type>>(
arg.name).c_str();
249 emplace_arg(fmt::arg(arg_name,
arg.value));
267 void reserve(
size_t new_cap,
size_t new_cap_named)
270 "Set of arguments includes set of named arguments");
271 data_.reserve(new_cap);
272 named_info_.reserve(new_cap_named);
const T & push(const Arg &arg)
Definition args.h:76
std::unique_ptr< node<> > head_
Definition args.h:72
constexpr FMT_INLINE value()
Definition core.h:1621
#define FMT_ASSERT(condition, message)
Definition core.h:403
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
Definition core.h:2506
#define FMT_GCC_VERSION
Definition core.h:32
#define FMT_CONSTEXPR
Definition core.h:106
#define FMT_BEGIN_NAMESPACE
Definition core.h:214
typename std::conditional< B, T, F >::type conditional_t
Definition core.h:304
#define FMT_END_NAMESPACE
Definition core.h:219
const T & unwrap(const T &v)
Definition args.h:32
std::unique_ptr< node<> > next
Definition args.h:51
FMT_CONSTEXPR typed_node(const Arg &arg)
Definition args.h:60
T value
Definition args.h:57
FMT_CONSTEXPR typed_node(const basic_string_view< Char > &arg)
Definition args.h:66