PYTHON-3846 Faster int encoding (#1311)

This commit is contained in:
Shane Harvey 2023-07-17 14:40:27 -04:00 committed by GitHub
parent a59bcb6eee
commit 70da43ffe8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1111,23 +1111,16 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
return buffer_write_bytes(buffer, &c, 1);
}
else if (PyLong_Check(value)) {
const long long_value = PyLong_AsLong(value);
const int int_value = (int)long_value;
if (PyErr_Occurred() || long_value != int_value) { /* Overflow */
long long long_long_value;
const long long long_long_value = PyLong_AsLongLong(value);
if (long_long_value == -1 && PyErr_Occurred()) {
/* Ignore error and give the fallback_encoder a chance. */
PyErr_Clear();
long_long_value = PyLong_AsLongLong(value);
if (PyErr_Occurred()) {
/* Ignore error and give the fallback_encoder a chance. */
PyErr_Clear();
} else {
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x12;
return buffer_write_int64(buffer, (int64_t)long_long_value);
}
} else {
} else if (-2147483648LL <= long_long_value && long_long_value <= 2147483647LL) {
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x10;
return buffer_write_int32(buffer, (int32_t)int_value);
return buffer_write_int32(buffer, (int32_t)long_long_value);
} else {
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x12;
return buffer_write_int64(buffer, (int64_t)long_long_value);
}
} else if (PyFloat_Check(value)) {
const double d = PyFloat_AsDouble(value);