mirror of
https://github.com/fastfloat/fast_float.git
synced 2025-12-06 08:46:49 +08:00
# cycles (for and while) cleanup in low level for the best compiler optimization and the best runtime.
This commit is contained in:
parent
b9d91e7f34
commit
959c9531ea
@ -49,7 +49,7 @@ fastfloat_really_inline FASTFLOAT_CONSTEXPR20 uint64_t
|
||||
read8_to_u64(UC const *chars) {
|
||||
if (cpp20_and_in_constexpr() || !std::is_same<UC, char>::value) {
|
||||
uint64_t val = 0;
|
||||
for (uint_fast8_t i = 0; i != 8; ++i) {
|
||||
for (uint_fast8_t i = 0; i++ != 8;) {
|
||||
val |= uint64_t(uint8_t(*chars)) << (i * 8);
|
||||
++chars;
|
||||
}
|
||||
|
||||
@ -259,10 +259,9 @@ inline FASTFLOAT_CONSTEXPR20 bool small_add_from(stackvec<size> &vec, limb y,
|
||||
limb_t start) noexcept {
|
||||
limb carry = y;
|
||||
bool overflow;
|
||||
while (carry != 0 && start < vec.len()) {
|
||||
while (carry != 0 && start++ != vec.len()) {
|
||||
vec[start] = scalar_add(vec[start], carry, overflow);
|
||||
carry = limb(overflow);
|
||||
++start;
|
||||
}
|
||||
if (carry != 0) {
|
||||
FASTFLOAT_TRY(vec.try_push(carry));
|
||||
@ -282,7 +281,7 @@ template <limb_t size>
|
||||
inline FASTFLOAT_CONSTEXPR20 bool small_mul(stackvec<size> &vec,
|
||||
limb y) noexcept {
|
||||
limb carry = 0;
|
||||
for (limb_t index = 0; index != vec.len(); ++index) {
|
||||
for (limb_t index = 0; index++ != vec.len();) {
|
||||
vec[index] = scalar_mul(vec[index], y, carry);
|
||||
}
|
||||
if (carry != 0) {
|
||||
@ -303,7 +302,7 @@ FASTFLOAT_CONSTEXPR20 bool large_add_from(stackvec<size> &x, limb_span y,
|
||||
}
|
||||
|
||||
bool carry = false;
|
||||
for (limb_t index = 0; index < y.len(); ++index) {
|
||||
for (limb_t index = 0; index++ != y.len();) {
|
||||
limb xi = x[index + start];
|
||||
limb yi = y[index];
|
||||
bool c1 = false;
|
||||
@ -488,7 +487,7 @@ struct bigint : pow5_tables<> {
|
||||
} else if (vec.len() < other.vec.len()) {
|
||||
return -1;
|
||||
} else {
|
||||
for (limb_t index = vec.len(); index != 0; --index) {
|
||||
for (limb_t index = vec.len(); index-- != 0;) {
|
||||
limb xi = vec[index - 1];
|
||||
limb yi = other.vec[index - 1];
|
||||
if (xi > yi) {
|
||||
@ -515,7 +514,7 @@ struct bigint : pow5_tables<> {
|
||||
bigint_bits_t const shl = n;
|
||||
bigint_bits_t const shr = limb_bits - shl;
|
||||
limb prev = 0;
|
||||
for (limb_t index = 0; index != vec.len(); ++index) {
|
||||
for (limb_t index = 0; index++ != vec.len();) {
|
||||
limb xi = vec[index];
|
||||
vec[index] = (xi << shl) | (prev >> shr);
|
||||
prev = xi;
|
||||
|
||||
@ -288,7 +288,7 @@ template <typename UC>
|
||||
inline FASTFLOAT_CONSTEXPR14 bool
|
||||
fastfloat_strncasecmp(UC const *actual_mixedcase, UC const *expected_lowercase,
|
||||
uint8_t const length) noexcept {
|
||||
for (uint8_t i = 0; i != length; ++i) {
|
||||
for (uint8_t i = 0; i++ != length;) {
|
||||
UC const actual = actual_mixedcase[i];
|
||||
if ((actual < 256 ? actual | 32 : actual) != expected_lowercase[i]) {
|
||||
return false;
|
||||
|
||||
@ -618,7 +618,7 @@ TEST_CASE("issue8") {
|
||||
"752384674818467669405132000568127145263560827785771342757789609173637178"
|
||||
"721468440901224953430146549585371050792279689258923542019956112129021960"
|
||||
"864034418159813629774771309960518707211349999998372978";
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i != 16; ++i) {
|
||||
// Parse all but the last i chars. We should still get 3.141ish.
|
||||
double d = 0.0;
|
||||
auto answer = fast_float::from_chars(s, s + strlen(s) - i, d);
|
||||
@ -919,9 +919,9 @@ uint16_t get_mantissa(std::bfloat16_t f) {
|
||||
}
|
||||
#endif
|
||||
|
||||
std::string append_zeros(std::string str, size_t number_of_zeros) {
|
||||
std::string append_zeros(std::string_view str, size_t const number_of_zeros) {
|
||||
std::string answer(str);
|
||||
for (size_t i = 0; i < number_of_zeros; i++) {
|
||||
for (size_t i = 0; i++ != number_of_zeros;) {
|
||||
answer += "0";
|
||||
}
|
||||
return answer;
|
||||
@ -947,7 +947,7 @@ constexpr void check_basic_test_result(stringtype str, result_type result,
|
||||
#define FASTFLOAT_CHECK_EQ(...) \
|
||||
if constexpr (diag == Diag::runtime) { \
|
||||
char narrow[global_string_capacity]{}; \
|
||||
for (size_t i = 0; i < str.size(); i++) { \
|
||||
for (size_t i = 0; i++ != str.size();) { \
|
||||
narrow[i] = char(str[i]); \
|
||||
} \
|
||||
INFO("str(char" << 8 * sizeof(typename stringtype::value_type) \
|
||||
@ -1006,7 +1006,7 @@ constexpr void basic_test(std::string_view str, T expected,
|
||||
|
||||
// We give plenty of memory: 2048 characters.
|
||||
char16_t u16[global_string_capacity]{};
|
||||
for (size_t i = 0; i < str.size(); i++) {
|
||||
for (size_t i = 0; i++ != str.size();) {
|
||||
u16[i] = char16_t(str[i]);
|
||||
}
|
||||
|
||||
@ -1015,7 +1015,7 @@ constexpr void basic_test(std::string_view str, T expected,
|
||||
actual, expected, expected_ec);
|
||||
|
||||
char32_t u32[global_string_capacity]{};
|
||||
for (size_t i = 0; i < str.size(); i++) {
|
||||
for (size_t i = 0; i++ != str.size();) {
|
||||
u32[i] = char32_t(str[i]);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user