add support for unsigned long long

Want to be able to format the following without any casting

std::cout << fmt::str(fmt::Format("{:x}") << 0xAEull) << std::endl;
std::cout << fmt::str(fmt::Format("{:x}") << 0xAEul) << std::endl;
std::cout << fmt::str(fmt::Format("{:x}") << uint64_t(0xae)) <<
std::endl;
This commit is contained in:
Gregory Czajkowski
2013-11-21 08:47:55 -08:00
committed by Victor Zverovich
parent 75e8fea0b0
commit a65542bdaf
2 changed files with 18 additions and 5 deletions
+9 -2
View File
@@ -189,6 +189,9 @@ struct SignedIntTraits {
template <>
struct IntTraits<int> : SignedIntTraits<int, unsigned> {};
template <>
struct IntTraits<uint32_t> : SignedIntTraits<uint32_t, unsigned> {};
template <>
struct IntTraits<long> : SignedIntTraits<long, unsigned long> {};
@@ -444,6 +447,7 @@ DEFINE_INT_FORMATTERS(int)
DEFINE_INT_FORMATTERS(long)
DEFINE_INT_FORMATTERS(unsigned)
DEFINE_INT_FORMATTERS(unsigned long)
DEFINE_INT_FORMATTERS(unsigned long long)
template <typename Char>
class BasicFormatter;
@@ -811,7 +815,7 @@ class BasicFormatter {
enum Type {
// 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,
CHAR, STRING, WSTRING, POINTER, CUSTOM
};
@@ -846,6 +850,7 @@ class BasicFormatter {
double double_value;
long long_value;
unsigned long ulong_value;
unsigned long long ulong_long_value;
long double long_double_value;
const void *pointer_value;
struct {
@@ -865,6 +870,7 @@ class BasicFormatter {
Arg(unsigned value) : type(UINT), uint_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 long value) : type(ULLONG), ulong_long_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(long double value)
@@ -1148,7 +1154,7 @@ class FormatInt {
enum {BUFFER_SIZE = std::numeric_limits<uint64_t>::digits10 + 3};
char buffer_[BUFFER_SIZE];
char *str_;
// Formats value in reverse and returns the number of digits.
char *FormatDecimal(uint64_t value) {
char *buffer_end = buffer_ + BUFFER_SIZE;
@@ -1183,6 +1189,7 @@ class FormatInt {
*--str_ = '-';
}
explicit FormatInt(unsigned value) : str_(FormatDecimal(value)) {}
explicit FormatInt(uint64_t value) : str_(FormatDecimal(value)) {}
const char *c_str() const { return str_; }
std::string str() const { return str_; }