21 template <
bool IsSigned>
46 if (!
int_checker<std::numeric_limits<T>::is_signed>::fits_in_int(value))
48 return static_cast<int>(
value);
78 template <
typename T,
typename Context>
88 : arg_(arg), type_(type) {}
92 operator()<
bool>(
value);
98 bool is_signed = type_ ==
'd' || type_ ==
'i';
99 typedef typename std::conditional<
101 if (
const_check(
sizeof(TargetType) <=
sizeof(
int))) {
104 arg_ = internal::make_arg<Context>(
105 static_cast<int>(
static_cast<TargetType
>(
value)));
108 arg_ = internal::make_arg<Context>(
109 static_cast<unsigned>(
static_cast<Unsigned
>(
value)));
116 arg_ = internal::make_arg<Context>(
static_cast<long long>(
value));
118 arg_ = internal::make_arg<Context>(
124 template <
typename U>
134 template <
typename T,
typename Context,
typename Char>
140 template <
typename Context>
148 template <
typename T>
152 arg_ = internal::make_arg<Context>(
static_cast<Char
>(
value));
155 template <
typename T>
163 template <
typename Char>
173 template <
typename T>
177 UnsignedType
width =
static_cast<UnsignedType
>(
value);
185 return static_cast<unsigned>(
width);
188 template <
typename T>
197 template <
typename Range>
201 typename OutputIt,
typename Char,
202 typename ArgFormatter =
211 template <
typename Range>
214 typename internal::arg_formatter_base<Range>::iterator>,
218 typedef decltype(internal::declval<Range>().
begin())
iterator;
222 context_type &context_;
224 void write_null_pointer(
char) {
226 this->
write(
"(nil)");
229 void write_null_pointer(
wchar_t) {
250 template <
typename T>
257 if (fmt_spec.
type !=
's')
260 this->
write(value != 0);
263 if (fmt_spec.
type && fmt_spec.
type !=
'c')
264 return (*
this)(
static_cast<int>(
value));
274 template <
typename T>
287 this->
write(
"(null)");
326 template <
typename T>
328 template <
typename ParseContext>
329 auto parse(ParseContext &ctx) -> decltype(ctx.begin()) {
return ctx.begin(); }
331 template <
typename FormatContext>
332 auto format(
const T &
value, FormatContext &ctx) -> decltype(ctx.out()) {
339 template <
typename OutputIt,
typename Char,
typename ArgFormatter>
344 OutputIt, basic_printf_context<OutputIt, Char, ArgFormatter>, Char> {
349 template <
typename T>
379 :
base(out, format_str, args) {}
389 template <
typename OutputIt,
typename Char,
typename AF>
416 template <
typename OutputIt,
typename Char,
typename AF>
419 iterator it,
unsigned arg_index) {
422 return this->do_get_arg(this->
parse_context().next_arg_id());
423 return base::get_arg(arg_index - 1);
426 template <
typename OutputIt,
typename Char,
typename AF>
431 if (c >=
'0' && c <=
'9') {
450 parse_flags(spec, it);
452 if (*it >=
'0' && *it <=
'9') {
455 }
else if (*it ==
'*') {
463 template <
typename OutputIt,
typename Char,
typename AF>
471 if (c !=
'%')
continue;
483 unsigned arg_index = parse_header(it, spec);
488 if (
'0' <= *it && *it <=
'9') {
491 }
else if (*it ==
'*') {
503 if (spec.
fill_ ==
'0') {
515 convert_arg<signed char>(
arg, *++it);
517 convert_arg<short>(
arg, *it);
521 convert_arg<long long>(
arg, *++it);
523 convert_arg<long>(
arg, *it);
526 convert_arg<intmax_t>(
arg, *it);
529 convert_arg<std::size_t>(
arg, *it);
532 convert_arg<std::ptrdiff_t>(
arg, *it);
540 convert_arg<void>(
arg, *it);
546 spec.
type =
static_cast<char>(*it++);
569 template <
typename Char,
typename Context>
572 Context(std::back_inserter(buf), format, args).format();
575 template <
typename Buffer>
593 template<
typename... Args>
603 template<
typename... Args>
607 template <
typename S,
typename Char = FMT_CHAR(S)>
608 inline std::basic_string<Char>
626 template <
typename S,
typename... Args>
637 template <
typename S,
typename Char = FMT_CHAR(S)>
645 buffer.
data(),
sizeof(Char), size, f) < size ? -1 :
static_cast<int>(
size);
657 template <
typename S,
typename... Args>
668 template <
typename S,
typename Char = FMT_CHAR(S)>
684 template <
typename S,
typename... Args>
695 template <
typename S,
typename Char = FMT_CHAR(S)>
703 return static_cast<int>(buffer.
size());
715 template <
typename S,
typename... Args>
728 #endif // FMT_PRINTF_H_
printf_formatter< T > type
vint4 max(const vint4 &a, const vint4 &b)
std::string sprintf(const char *fmt, const Args &...args)
void printf(internal::basic_buffer< Char > &buf, basic_string_view< Char > format, basic_format_args< Context > args)
std::enable_if<!std::is_integral< T >::value, bool >::type operator()(T)
Container & get_container(std::back_insert_iterator< Container > it)
FMT_CONSTEXPR_DECL const Char * pointer_from(null_terminating_iterator< Char > it)
static bool fits_in_int(int)
FMT_CONSTEXPR unsigned parse_nonnegative_int(Iterator &it, ErrorHandler &&eh)
std::enable_if< std::is_integral< U >::value >::type operator()(U value)
basic_printf_context_t< internal::wbuffer >::type wprintf_context
basic_printf_context_t< internal::buffer >::type printf_context
GLint GLint GLint GLint GLint GLint GLsizei width
FMT_CONSTEXPR auto begin(const C &c) -> decltype(c.begin())
basic_format_args< printf_context > printf_args
char_converter(basic_format_arg< Context > &arg)
void fprintf(FILE *file, const char *fmt, const Args &...args)
internal::named_arg< T, char > arg(string_view name, const T &arg)
format_arg_store< printf_context, Args...> make_printf_args(const Args &...args)
basic_format_args< basic_printf_context< OutputIt, Char, ArgFormatter > > args() const
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
static bool fits_in_int(T value)
basic_printf_context< std::back_insert_iterator< Buffer >, typename Buffer::value_type > type
format_arg_store< context, Args...> as
void write(std::basic_ostream< Char > &os, basic_buffer< Char > &buf)
#define FMT_END_NAMESPACE
std::enable_if<!is_compile_string< S >::value >::type check_format_string(const S &)
FMT_ENABLE_IF_STRING(S, std::basic_string< FMT_CHAR(S)>) sprintf(const S &format
std::enable_if<!std::is_integral< U >::value >::type operator()(U)
void advance_to(iterator it)
std::size_t size() const FMT_NOEXCEPT
static bool fits_in_int(T value)
void operator()(bool value)
GLuint GLuint GLsizei GLenum type
std::enable_if<!std::is_integral< T >::value, int >::type operator()(T)
int vprintf(const S &format, basic_format_args< typename basic_printf_context_t< internal::basic_buffer< Char >>::type > args)
std::basic_string< Char > vsprintf(const S &format, basic_format_args< typename basic_printf_context_t< internal::basic_buffer< Char >>::type > args)
int vfprintf(std::FILE *f, const S &format, basic_format_args< typename basic_printf_context_t< internal::basic_buffer< Char >>::type > args)
FMT_CONSTEXPR std::enable_if< std::numeric_limits< T >::is_signed, bool >::type is_negative(T value)
internal::basic_buffer< FMT_CHAR(S)> buffer
std::enable_if<!std::is_integral< T >::value, unsigned >::type operator()(T)
basic_printf_context_t< buffer >::type context
basic_format_args< wprintf_context > wprintf_args
static bool fits_in_int(bool)
std::enable_if< std::is_integral< T >::value, bool >::type operator()(T value)
std::enable_if< std::is_integral< T >::value >::type operator()(T value)
std::enable_if< std::is_integral< T >::value, int >::type operator()(T value)
format_arg_store< wprintf_context, Args...> make_wprintf_args(const Args &...args)
void format_value(basic_buffer< Char > &buffer, const T &value)
std::enable_if<!std::is_integral< T >::value >::type operator()(T)
std::enable_if< std::is_integral< T >::value, unsigned >::type operator()(T value)
basic_printf_context(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_printf_context > args)
#define FMT_BEGIN_NAMESPACE
vint4 min(const vint4 &a, const vint4 &b)
basic_string_view< Char > to_string_view(basic_string_view< Char > s)
GLenum GLuint GLsizei const GLchar * buf
basic_parse_context< char_type > & parse_context()
void convert_arg(basic_format_arg< Context > &arg, Char type)
GLsizei const GLfloat * value
basic_parse_context< char > parse_context
arg_converter(basic_format_arg< Context > &arg, Char type)
FMT_CONSTEXPR internal::result_of< Visitor(int)>::type visit_format_arg(Visitor &&vis, const basic_format_arg< Context > &arg)
printf_width_handler(format_specs &spec)