Merge 5dd604b481 into 75e8fea0b0
This commit is contained in:
commit
2e48cd0742
22
format.cc
22
format.cc
@ -160,6 +160,12 @@ void fmt::BasicWriter<Char>::FormatDecimal(
|
|||||||
buffer[0] = internal::DIGITS[index];
|
buffer[0] = internal::DIGITS[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Char>
|
||||||
|
void fmt::BasicWriter<Char>::FormatDecimal(
|
||||||
|
CharPtr buffer, unsigned long long value, unsigned num_digits) {
|
||||||
|
return fmt::BasicWriter<Char>::FormatDecimal(buffer, static_cast<uint64_t>(value), num_digits);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Char>
|
template <typename Char>
|
||||||
typename fmt::BasicWriter<Char>::CharPtr
|
typename fmt::BasicWriter<Char>::CharPtr
|
||||||
fmt::BasicWriter<Char>::PrepareFilledBuffer(
|
fmt::BasicWriter<Char>::PrepareFilledBuffer(
|
||||||
@ -400,7 +406,7 @@ void fmt::BasicFormatter<Char>::CheckSign(const Char *&s, const Arg &arg) {
|
|||||||
ReportError(s,
|
ReportError(s,
|
||||||
Format("format specifier '{0}' requires numeric argument") << *s);
|
Format("format specifier '{0}' requires numeric argument") << *s);
|
||||||
}
|
}
|
||||||
if (arg.type == UINT || arg.type == ULONG) {
|
if (arg.type == UINT || arg.type == ULONG || arg.type == ULLONG) {
|
||||||
ReportError(s,
|
ReportError(s,
|
||||||
Format("format specifier '{0}' requires signed argument") << *s);
|
Format("format specifier '{0}' requires signed argument") << *s);
|
||||||
}
|
}
|
||||||
@ -519,7 +525,7 @@ void fmt::BasicFormatter<Char>::DoFormat() {
|
|||||||
++s;
|
++s;
|
||||||
++num_open_braces_;
|
++num_open_braces_;
|
||||||
const Arg &precision_arg = ParseArgIndex(s);
|
const Arg &precision_arg = ParseArgIndex(s);
|
||||||
unsigned long value = 0;
|
unsigned long long value = 0;
|
||||||
switch (precision_arg.type) {
|
switch (precision_arg.type) {
|
||||||
case INT:
|
case INT:
|
||||||
if (precision_arg.int_value < 0)
|
if (precision_arg.int_value < 0)
|
||||||
@ -537,6 +543,9 @@ void fmt::BasicFormatter<Char>::DoFormat() {
|
|||||||
case ULONG:
|
case ULONG:
|
||||||
value = precision_arg.ulong_value;
|
value = precision_arg.ulong_value;
|
||||||
break;
|
break;
|
||||||
|
case ULLONG:
|
||||||
|
value = precision_arg.ulong_long_value;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ReportError(s, "precision is not integer");
|
ReportError(s, "precision is not integer");
|
||||||
}
|
}
|
||||||
@ -578,6 +587,9 @@ void fmt::BasicFormatter<Char>::DoFormat() {
|
|||||||
case ULONG:
|
case ULONG:
|
||||||
writer.FormatInt(arg.ulong_value, spec);
|
writer.FormatInt(arg.ulong_value, spec);
|
||||||
break;
|
break;
|
||||||
|
case ULLONG:
|
||||||
|
writer.FormatInt(arg.ulong_long_value, spec);
|
||||||
|
break;
|
||||||
case DOUBLE:
|
case DOUBLE:
|
||||||
writer.FormatDouble(arg.double_value, spec, precision);
|
writer.FormatDouble(arg.double_value, spec, precision);
|
||||||
break;
|
break;
|
||||||
@ -655,6 +667,9 @@ template fmt::BasicWriter<char>::CharPtr
|
|||||||
template void fmt::BasicWriter<char>::FormatDecimal(
|
template void fmt::BasicWriter<char>::FormatDecimal(
|
||||||
CharPtr buffer, uint64_t value, unsigned num_digits);
|
CharPtr buffer, uint64_t value, unsigned num_digits);
|
||||||
|
|
||||||
|
template void fmt::BasicWriter<char>::FormatDecimal(
|
||||||
|
CharPtr buffer, unsigned long long value, unsigned num_digits);
|
||||||
|
|
||||||
template fmt::BasicWriter<char>::CharPtr
|
template fmt::BasicWriter<char>::CharPtr
|
||||||
fmt::BasicWriter<char>::PrepareFilledBuffer(
|
fmt::BasicWriter<char>::PrepareFilledBuffer(
|
||||||
unsigned size, const AlignSpec &spec, char sign);
|
unsigned size, const AlignSpec &spec, char sign);
|
||||||
@ -687,6 +702,9 @@ template fmt::BasicWriter<wchar_t>::CharPtr
|
|||||||
template void fmt::BasicWriter<wchar_t>::FormatDecimal(
|
template void fmt::BasicWriter<wchar_t>::FormatDecimal(
|
||||||
CharPtr buffer, uint64_t value, unsigned num_digits);
|
CharPtr buffer, uint64_t value, unsigned num_digits);
|
||||||
|
|
||||||
|
template void fmt::BasicWriter<wchar_t>::FormatDecimal(
|
||||||
|
CharPtr buffer, unsigned long long value, unsigned num_digits);
|
||||||
|
|
||||||
template fmt::BasicWriter<wchar_t>::CharPtr
|
template fmt::BasicWriter<wchar_t>::CharPtr
|
||||||
fmt::BasicWriter<wchar_t>::PrepareFilledBuffer(
|
fmt::BasicWriter<wchar_t>::PrepareFilledBuffer(
|
||||||
unsigned size, const AlignSpec &spec, char sign);
|
unsigned size, const AlignSpec &spec, char sign);
|
||||||
|
|||||||
15
format.h
15
format.h
@ -189,6 +189,9 @@ struct SignedIntTraits {
|
|||||||
template <>
|
template <>
|
||||||
struct IntTraits<int> : SignedIntTraits<int, unsigned> {};
|
struct IntTraits<int> : SignedIntTraits<int, unsigned> {};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct IntTraits<uint32_t> : SignedIntTraits<uint32_t, unsigned> {};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct IntTraits<long> : SignedIntTraits<long, unsigned long> {};
|
struct IntTraits<long> : SignedIntTraits<long, unsigned long> {};
|
||||||
|
|
||||||
@ -444,6 +447,7 @@ DEFINE_INT_FORMATTERS(int)
|
|||||||
DEFINE_INT_FORMATTERS(long)
|
DEFINE_INT_FORMATTERS(long)
|
||||||
DEFINE_INT_FORMATTERS(unsigned)
|
DEFINE_INT_FORMATTERS(unsigned)
|
||||||
DEFINE_INT_FORMATTERS(unsigned long)
|
DEFINE_INT_FORMATTERS(unsigned long)
|
||||||
|
DEFINE_INT_FORMATTERS(unsigned long long)
|
||||||
|
|
||||||
template <typename Char>
|
template <typename Char>
|
||||||
class BasicFormatter;
|
class BasicFormatter;
|
||||||
@ -500,6 +504,9 @@ class BasicWriter {
|
|||||||
static void FormatDecimal(
|
static void FormatDecimal(
|
||||||
CharPtr buffer, uint64_t value, unsigned num_digits);
|
CharPtr buffer, uint64_t value, unsigned num_digits);
|
||||||
|
|
||||||
|
static void FormatDecimal(
|
||||||
|
CharPtr buffer, unsigned long long value, unsigned num_digits);
|
||||||
|
|
||||||
static CharPtr FillPadding(CharPtr buffer,
|
static CharPtr FillPadding(CharPtr buffer,
|
||||||
unsigned total_size, std::size_t content_size, wchar_t fill);
|
unsigned total_size, std::size_t content_size, wchar_t fill);
|
||||||
|
|
||||||
@ -811,7 +818,7 @@ class BasicFormatter {
|
|||||||
|
|
||||||
enum Type {
|
enum Type {
|
||||||
// Numeric types should go first.
|
// Numeric types should go first.
|
||||||
INT, UINT, LONG, ULONG, DOUBLE, LONG_DOUBLE,
|
INT, UINT, LONG, ULONG, ULLONG, DOUBLE, LONG_DOUBLE,
|
||||||
LAST_NUMERIC_TYPE = LONG_DOUBLE,
|
LAST_NUMERIC_TYPE = LONG_DOUBLE,
|
||||||
CHAR, STRING, WSTRING, POINTER, CUSTOM
|
CHAR, STRING, WSTRING, POINTER, CUSTOM
|
||||||
};
|
};
|
||||||
@ -846,6 +853,7 @@ class BasicFormatter {
|
|||||||
double double_value;
|
double double_value;
|
||||||
long long_value;
|
long long_value;
|
||||||
unsigned long ulong_value;
|
unsigned long ulong_value;
|
||||||
|
unsigned long long ulong_long_value;
|
||||||
long double long_double_value;
|
long double long_double_value;
|
||||||
const void *pointer_value;
|
const void *pointer_value;
|
||||||
struct {
|
struct {
|
||||||
@ -865,6 +873,7 @@ class BasicFormatter {
|
|||||||
Arg(unsigned value) : type(UINT), uint_value(value), formatter(0) {}
|
Arg(unsigned value) : type(UINT), uint_value(value), formatter(0) {}
|
||||||
Arg(long value) : type(LONG), long_value(value), formatter(0) {}
|
Arg(long value) : type(LONG), long_value(value), formatter(0) {}
|
||||||
Arg(unsigned long value) : type(ULONG), ulong_value(value), formatter(0) {}
|
Arg(unsigned long value) : type(ULONG), ulong_value(value), formatter(0) {}
|
||||||
|
Arg(unsigned long long value) : type(ULLONG), ulong_long_value(value), formatter(0) {}
|
||||||
Arg(float value) : type(DOUBLE), double_value(value), formatter(0) {}
|
Arg(float value) : type(DOUBLE), double_value(value), formatter(0) {}
|
||||||
Arg(double value) : type(DOUBLE), double_value(value), formatter(0) {}
|
Arg(double value) : type(DOUBLE), double_value(value), formatter(0) {}
|
||||||
Arg(long double value)
|
Arg(long double value)
|
||||||
@ -1148,7 +1157,7 @@ class FormatInt {
|
|||||||
enum {BUFFER_SIZE = std::numeric_limits<uint64_t>::digits10 + 3};
|
enum {BUFFER_SIZE = std::numeric_limits<uint64_t>::digits10 + 3};
|
||||||
char buffer_[BUFFER_SIZE];
|
char buffer_[BUFFER_SIZE];
|
||||||
char *str_;
|
char *str_;
|
||||||
|
|
||||||
// Formats value in reverse and returns the number of digits.
|
// Formats value in reverse and returns the number of digits.
|
||||||
char *FormatDecimal(uint64_t value) {
|
char *FormatDecimal(uint64_t value) {
|
||||||
char *buffer_end = buffer_ + BUFFER_SIZE;
|
char *buffer_end = buffer_ + BUFFER_SIZE;
|
||||||
@ -1183,6 +1192,8 @@ class FormatInt {
|
|||||||
*--str_ = '-';
|
*--str_ = '-';
|
||||||
}
|
}
|
||||||
explicit FormatInt(unsigned value) : str_(FormatDecimal(value)) {}
|
explicit FormatInt(unsigned value) : str_(FormatDecimal(value)) {}
|
||||||
|
explicit FormatInt(uint64_t value) : str_(FormatDecimal(value)) {}
|
||||||
|
explicit FormatInt(unsigned long long value) : str_(FormatDecimal(value)) {}
|
||||||
|
|
||||||
const char *c_str() const { return str_; }
|
const char *c_str() const { return str_; }
|
||||||
std::string str() const { return str_; }
|
std::string str() const { return str_; }
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user