23 template <
bool IsSigned>
27 unsigned max = std::numeric_limits<int>::max();
37 return value >= std::numeric_limits<int>::min() &&
53 return static_cast<int>(
value);
64 template <
typename T,
typename U>
78 template <
typename T =
void>
88 : arg_(arg), type_(type) {}
97 bool is_signed = type_ ==
'd' || type_ ==
'i';
101 if (
sizeof(TargetType) <=
sizeof(
int)) {
105 arg_.
int_value =
static_cast<int>(
static_cast<TargetType
>(
value));
137 template <
typename T>
159 template <
typename T>
162 UnsignedType
width =
static_cast<UnsignedType
>(
value);
167 unsigned int_max = std::numeric_limits<int>::max();
170 return static_cast<unsigned>(
width);
192 template <
typename Impl,
typename Char>
196 this->spec().type_ = 0;
197 this->
write(
"(nil)");
211 :
internal::ArgFormatterBase<Impl, Char>(writer, spec) {}
216 if (fmt_spec.
type_ !=
's')
217 return this->visit_any_int(value);
229 CharPtr out = CharPtr();
230 if (fmt_spec.
width_ > 1) {
234 std::fill_n(out, fmt_spec.
width_ - 1, fill);
235 out += fmt_spec.
width_ - 1;
237 std::fill_n(out + 1, fmt_spec.
width_ - 1, fill);
242 *out =
static_cast<Char
>(
value);
248 Base::visit_cstring(value);
249 else if (this->spec().type_ ==
'p')
250 write_null_pointer();
252 this->
write(
"(null)");
258 return Base::visit_pointer(value);
259 this->spec().type_ = 0;
260 write_null_pointer();
266 const Char format_str[] = {
'}', 0};
267 const Char *
format = format_str;
273 template <
typename Char>
283 template <
typename Char,
typename ArgFormatter = Pr
intfArgFormatter<Char> >
288 void parse_flags(
FormatSpec &spec,
const Char *&
s);
294 unsigned arg_index = (std::numeric_limits<unsigned>::max)());
297 unsigned parse_header(
const Char *&s,
FormatSpec &spec);
308 : FormatterBase(args), writer_(w) {}
314 template <
typename Char,
typename AF>
340 template <
typename Char,
typename AF>
342 unsigned arg_index) {
344 const char *error = 0;
352 template <
typename Char,
typename AF>
355 unsigned arg_index = std::numeric_limits<unsigned>::max();
357 if (c >=
'0' && c <=
'9') {
375 parse_flags(spec, s);
377 if (*s >=
'0' && *s <=
'9') {
379 }
else if (*s ==
'*') {
386 template <
typename Char,
typename AF>
389 const Char *s =
start;
392 if (c !=
'%')
continue;
394 write(writer_, start, s);
398 write(writer_, start, s - 1);
404 unsigned arg_index = parse_header(s, spec);
409 if (
'0' <= *s && *s <=
'9') {
411 }
else if (*s ==
'*') {
418 Arg
arg = get_arg(s, arg_index);
421 if (spec.
fill_ ==
'0') {
433 ArgConverter<signed char>(
arg, *++
s).visit(arg);
435 ArgConverter<short>(
arg, *
s).visit(arg);
439 ArgConverter<fmt::LongLong>(
arg, *++
s).visit(arg);
441 ArgConverter<long>(
arg, *
s).visit(arg);
444 ArgConverter<intmax_t>(
arg, *
s).visit(arg);
447 ArgConverter<std::size_t>(
arg, *
s).visit(arg);
450 ArgConverter<std::ptrdiff_t>(
arg, *
s).visit(arg);
458 ArgConverter<void>(
arg, *
s).visit(arg);
464 spec.
type_ =
static_cast<char>(*s++);
467 switch (spec.
type_) {
481 AF(writer_, spec).visit(arg);
483 write(writer_, start, s);
486 template <
typename Char>
536 return fprintf(stdout, format, args);
551 printf(w, format_str, args);
553 return static_cast<int>(w.
size());
558 #endif // FMT_PRINTF_H_
bool is_negative(T value)
GLuint GLuint GLsizei GLenum type
static bool fits_in_int(T value)
CharPtr grow_buffer(std::size_t n)
FMT_FUNC void write(std::ostream &os, Writer &w)
std::string format(CStringRef format_str, ArgList args)
int visit_any_int(T value)
FMT_FUNC int fprintf(std::FILE *f, CStringRef format, ArgList args)
GLsizei const GLfloat * value
WidthHandler(FormatSpec &spec)
static bool fits_in_int(bool)
typedef void(GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target
unsigned visit_any_int(T value)
unsigned parse_nonnegative_int(const Char *&s)
const Char * c_str() const
GLubyte GLubyte GLubyte GLubyte w
ULongLong ulong_long_value
void visit_bool(bool value)
std::string sprintf(CStringRef format, ArgList args)
void report_unhandled_arg()
void report_unhandled_arg()
static bool fits_in_int(int)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
internal::CharTraits< Char >::CharPtr CharPtr
void visit_any_int(U value)
internal::NamedArg< char > arg(StringRef name, const T &arg)
Result visit(const Arg &arg)
void visit_any_int(T value)
bool visit_any_int(T value)
GLint GLint GLint GLint GLint GLint GLsizei width
ArgConverter(internal::Arg &arg, wchar_t type)
static bool fits_in_int(T value)
std::basic_string< Char > str() const
GLsizei const GLchar *const * string
void write_int(T value, Spec spec)
FMT_GCC_EXTENSION typedef long long LongLong
CharConverter(internal::Arg &arg)
void printf(BasicWriter< Char > &w, BasicCStringRef< Char > format, ArgList args)