roll back some parts of the change

This commit is contained in:
Eric Wieser 2022-07-11 21:30:23 +00:00
parent d585b6e86e
commit fefa98702c
2 changed files with 12 additions and 21 deletions

View File

@ -678,7 +678,7 @@ class serializer
template <typename NumberType, enable_if_t<std::numeric_limits<NumberType>::is_signed, int> = 0>
bool is_negative_number(NumberType x)
{
return x < NumberType(0);
return x < 0;
}
template < typename NumberType, enable_if_t < !std::numeric_limits<NumberType>::is_signed, int > = 0 >
@ -721,7 +721,7 @@ class serializer
};
// special case for "0"
if (x == NumberType(0))
if (x == 0)
{
o->write_character('0');
return;
@ -757,16 +757,15 @@ class serializer
// Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu
// See: https://www.youtube.com/watch?v=o4-CwDo2zpg
const NumberType hundred = 100;
while (abs_value >= hundred)
while (abs_value >= 100)
{
const auto digits_index = static_cast<unsigned>((abs_value % hundred));
abs_value /= hundred;
const auto digits_index = static_cast<unsigned>((abs_value % 100));
abs_value /= 100;
*(--buffer_ptr) = digits_to_99[digits_index][1];
*(--buffer_ptr) = digits_to_99[digits_index][0];
}
if (abs_value >= NumberType(10))
if (abs_value >= 10)
{
const auto digits_index = static_cast<unsigned>(abs_value);
*(--buffer_ptr) = digits_to_99[digits_index][1];

View File

@ -43,7 +43,7 @@ class wrapped_int
return val;
}
wrapped_int() = default;
wrapped_int(T val) : val(val) {}
/* implicit */ wrapped_int(T val) : val(val) {}
bool operator==(const wrapped_int& other) const
{
@ -59,37 +59,29 @@ class wrapped_int
}
bool operator%(const wrapped_int& other) const
{
return static_cast<T>(*this) % static_cast<T>(other.val);
return static_cast<T>(*this) % static_cast<T>(other);
}
wrapped_int& operator/=(const wrapped_int& other)
{
if (val != nullptr)
{
*val /= static_cast<T>(other.val);
}
val /= static_cast<T>(other);
return *this;
}
bool operator<(const wrapped_int& other) const
{
return static_cast<T>(*this) < static_cast<T>(other.val);
return static_cast<T>(*this) < static_cast<T>(other);
}
bool operator<=(const wrapped_int& other) const
{
return static_cast<T>(*this) <= static_cast<T>(other.val);
}
friend void swap(wrapped_int& self, wrapped_int& other)
{
swap(self.val, other.val);
return static_cast<T>(*this) <= static_cast<T>(other);
}
};
template<typename T> class std::numeric_limits<wrapped_int<T>>
{
public:
static constexpr bool is_specialized = std::numeric_limits<T>::is_specialized;
static constexpr bool is_signed = std::numeric_limits<T>::is_signed;
static constexpr bool is_integer = std::numeric_limits<T>::is_integer;
static constexpr bool is_specialized = std::numeric_limits<T>::is_specialized;
};
TEST_CASE("custom integer types")