Replace fmt::internal::make_unsigned with std::make_unsigned

This commit is contained in:
Victor Zverovich 2017-09-04 11:41:15 -07:00
parent 8a2bc0ab1b
commit 0fbd846561
5 changed files with 17 additions and 25 deletions

View File

@ -488,27 +488,11 @@ struct formatter;
namespace internal {
// make_unsigned<T>::type gives an unsigned type corresponding to integer
// type T.
template <typename T>
struct make_unsigned { typedef T type; };
#define FMT_SPECIALIZE_MAKE_UNSIGNED(T, U) \
template <> \
struct make_unsigned<T> { typedef U type; }
FMT_SPECIALIZE_MAKE_UNSIGNED(char, unsigned char);
FMT_SPECIALIZE_MAKE_UNSIGNED(signed char, unsigned char);
FMT_SPECIALIZE_MAKE_UNSIGNED(short, unsigned short);
FMT_SPECIALIZE_MAKE_UNSIGNED(int, unsigned);
FMT_SPECIALIZE_MAKE_UNSIGNED(long, unsigned long);
FMT_SPECIALIZE_MAKE_UNSIGNED(long long, unsigned long long);
// Casts nonnegative integer to unsigned.
template <typename Int>
inline typename make_unsigned<Int>::type to_unsigned(Int value) {
inline typename std::make_unsigned<Int>::type to_unsigned(Int value) {
FMT_ASSERT(value >= 0, "negative value");
return static_cast<typename make_unsigned<Int>::type>(value);
return static_cast<typename std::make_unsigned<Int>::type>(value);
}
// The number of characters to store in the basic_memory_buffer object itself

View File

@ -14,7 +14,7 @@ namespace fmt {
namespace internal {
FMT_FUNC void write(std::ostream &os, buffer &buf) {
const char *data = buf.data();
typedef internal::make_unsigned<std::streamsize>::type UnsignedStreamSize;
typedef std::make_unsigned<std::streamsize>::type UnsignedStreamSize;
UnsignedStreamSize size = buf.size();
UnsignedStreamSize max_size =
internal::to_unsigned((std::numeric_limits<std::streamsize>::max)());

View File

@ -70,6 +70,14 @@ class IsZeroInt {
operator()(T) { return false; }
};
template <typename T>
struct make_unsigned_or_bool : std::make_unsigned<T> {};
template <>
struct make_unsigned_or_bool<bool> {
using type = bool;
};
template <typename T, typename Context>
class ArgConverter {
private:
@ -99,7 +107,7 @@ class ArgConverter {
arg_ = internal::make_arg<Context>(
static_cast<int>(static_cast<TargetType>(value)));
} else {
typedef typename internal::make_unsigned<TargetType>::type Unsigned;
typedef typename make_unsigned_or_bool<TargetType>::type Unsigned;
arg_ = internal::make_arg<Context>(
static_cast<unsigned>(static_cast<Unsigned>(value)));
}
@ -111,7 +119,7 @@ class ArgConverter {
arg_ = internal::make_arg<Context>(static_cast<long long>(value));
} else {
arg_ = internal::make_arg<Context>(
static_cast<typename internal::make_unsigned<U>::type>(value));
static_cast<typename make_unsigned_or_bool<U>::type>(value));
}
}
}

View File

@ -155,7 +155,7 @@ TEST(OStreamTest, WriteToOStreamMaxSize) {
const char *data = 0;
std::size_t size = max_size;
do {
typedef fmt::internal::make_unsigned<std::streamsize>::type UStreamSize;
typedef std::make_unsigned<std::streamsize>::type UStreamSize;
UStreamSize n = std::min<UStreamSize>(
size, fmt::internal::to_unsigned(max_streamsize));
EXPECT_CALL(streambuf, xsputn(data, static_cast<std::streamsize>(n)))

View File

@ -306,13 +306,13 @@ void TestLength(const char *length_spec, U value) {
signed_value = static_cast<unsigned>(value);
unsigned_value = static_cast<unsigned>(value);
}
using fmt::internal::make_unsigned;
if (sizeof(U) <= sizeof(int) && sizeof(int) < sizeof(T)) {
signed_value = static_cast<long long>(value);
unsigned_value = static_cast<typename make_unsigned<unsigned>::type>(value);
unsigned_value =
static_cast<typename std::make_unsigned<unsigned>::type>(value);
} else {
signed_value = static_cast<typename make_signed<T>::type>(value);
unsigned_value = static_cast<typename make_unsigned<T>::type>(value);
unsigned_value = static_cast<typename std::make_unsigned<T>::type>(value);
}
std::ostringstream os;
os << signed_value;