summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/Include/cpython/longobject.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tools/python3/Include/cpython/longobject.h')
-rw-r--r--contrib/tools/python3/Include/cpython/longobject.h96
1 files changed, 56 insertions, 40 deletions
diff --git a/contrib/tools/python3/Include/cpython/longobject.h b/contrib/tools/python3/Include/cpython/longobject.h
index 90cc0f267ae..0d49242ff68 100644
--- a/contrib/tools/python3/Include/cpython/longobject.h
+++ b/contrib/tools/python3/Include/cpython/longobject.h
@@ -2,29 +2,65 @@
# error "this header file must not be included directly"
#endif
-PyAPI_FUNC(int) _PyLong_AsInt(PyObject *);
+PyAPI_FUNC(PyObject*) PyLong_FromUnicodeObject(PyObject *u, int base);
-PyAPI_FUNC(int) _PyLong_UnsignedShort_Converter(PyObject *, void *);
-PyAPI_FUNC(int) _PyLong_UnsignedInt_Converter(PyObject *, void *);
-PyAPI_FUNC(int) _PyLong_UnsignedLong_Converter(PyObject *, void *);
-PyAPI_FUNC(int) _PyLong_UnsignedLongLong_Converter(PyObject *, void *);
-PyAPI_FUNC(int) _PyLong_Size_t_Converter(PyObject *, void *);
+#define Py_ASNATIVEBYTES_DEFAULTS -1
+#define Py_ASNATIVEBYTES_BIG_ENDIAN 0
+#define Py_ASNATIVEBYTES_LITTLE_ENDIAN 1
+#define Py_ASNATIVEBYTES_NATIVE_ENDIAN 3
+#define Py_ASNATIVEBYTES_UNSIGNED_BUFFER 4
+#define Py_ASNATIVEBYTES_REJECT_NEGATIVE 8
+#define Py_ASNATIVEBYTES_ALLOW_INDEX 16
-/* _PyLong_Frexp returns a double x and an exponent e such that the
- true value is approximately equal to x * 2**e. e is >= 0. x is
- 0.0 if and only if the input is 0 (in which case, e and x are both
- zeroes); otherwise, 0.5 <= abs(x) < 1.0. On overflow, which is
- possible if the number of bits doesn't fit into a Py_ssize_t, sets
- OverflowError and returns -1.0 for x, 0 for e. */
-PyAPI_FUNC(double) _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e);
+/* PyLong_AsNativeBytes: Copy the integer value to a native variable.
+ buffer points to the first byte of the variable.
+ n_bytes is the number of bytes available in the buffer. Pass 0 to request
+ the required size for the value.
+ flags is a bitfield of the following flags:
+ * 1 - little endian
+ * 2 - native endian
+ * 4 - unsigned destination (e.g. don't reject copying 255 into one byte)
+ * 8 - raise an exception for negative inputs
+ * 16 - call __index__ on non-int types
+ If flags is -1 (all bits set), native endian is used, value truncation
+ behaves most like C (allows negative inputs and allow MSB set), and non-int
+ objects will raise a TypeError.
+ Big endian mode will write the most significant byte into the address
+ directly referenced by buffer; little endian will write the least significant
+ byte into that address.
-PyAPI_FUNC(PyObject *) PyLong_FromUnicodeObject(PyObject *u, int base);
-PyAPI_FUNC(PyObject *) _PyLong_FromBytes(const char *, Py_ssize_t, int);
+ If an exception is raised, returns a negative value.
+ Otherwise, returns the number of bytes that are required to store the value.
+ To check that the full value is represented, ensure that the return value is
+ equal or less than n_bytes.
+ All n_bytes are guaranteed to be written (unless an exception occurs), and
+ so ignoring a positive return value is the equivalent of a downcast in C.
+ In cases where the full value could not be represented, the returned value
+ may be larger than necessary - this function is not an accurate way to
+ calculate the bit length of an integer object.
+ */
+PyAPI_FUNC(Py_ssize_t) PyLong_AsNativeBytes(PyObject* v, void* buffer,
+ Py_ssize_t n_bytes, int flags);
-/* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0.
- v must not be NULL, and must be a normalized long.
- There are no error cases.
-*/
+/* PyLong_FromNativeBytes: Create an int value from a native integer
+ n_bytes is the number of bytes to read from the buffer. Passing 0 will
+ always produce the zero int.
+ PyLong_FromUnsignedNativeBytes always produces a non-negative int.
+ flags is the same as for PyLong_AsNativeBytes, but only supports selecting
+ the endianness or forcing an unsigned buffer.
+
+ Returns the int object, or NULL with an exception set. */
+PyAPI_FUNC(PyObject*) PyLong_FromNativeBytes(const void* buffer, size_t n_bytes,
+ int flags);
+PyAPI_FUNC(PyObject*) PyLong_FromUnsignedNativeBytes(const void* buffer,
+ size_t n_bytes, int flags);
+
+PyAPI_FUNC(int) PyUnstable_Long_IsCompact(const PyLongObject* op);
+PyAPI_FUNC(Py_ssize_t) PyUnstable_Long_CompactValue(const PyLongObject* op);
+
+// _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0.
+// v must not be NULL, and must be a normalized long.
+// There are no error cases.
PyAPI_FUNC(int) _PyLong_Sign(PyObject *v);
/* _PyLong_NumBits. Return the number of bits needed to represent the
@@ -36,14 +72,6 @@ PyAPI_FUNC(int) _PyLong_Sign(PyObject *v);
*/
PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v);
-/* _PyLong_DivmodNear. Given integers a and b, compute the nearest
- integer q to the exact quotient a / b, rounding to the nearest even integer
- in the case of a tie. Return (q, r), where r = a - q*b. The remainder r
- will satisfy abs(r) <= abs(b)/2, with equality possible only if q is
- even.
-*/
-PyAPI_FUNC(PyObject *) _PyLong_DivmodNear(PyObject *, PyObject *);
-
/* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in
base 256, and return a Python int with the same numeric value.
If n is 0, the integer is 0. Else:
@@ -82,19 +110,7 @@ PyAPI_FUNC(PyObject *) _PyLong_FromByteArray(
*/
PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
unsigned char* bytes, size_t n,
- int little_endian, int is_signed);
-
-/* _PyLong_Format: Convert the long to a string object with given base,
- appending a base prefix of 0[box] if base is 2, 8 or 16. */
-PyAPI_FUNC(PyObject *) _PyLong_Format(PyObject *obj, int base);
+ int little_endian, int is_signed, int with_exceptions);
/* For use by the gcd function in mathmodule.c */
PyAPI_FUNC(PyObject *) _PyLong_GCD(PyObject *, PyObject *);
-
-PyAPI_FUNC(PyObject *) _PyLong_Rshift(PyObject *, size_t);
-PyAPI_FUNC(PyObject *) _PyLong_Lshift(PyObject *, size_t);
-
-
-PyAPI_FUNC(int) PyUnstable_Long_IsCompact(const PyLongObject* op);
-PyAPI_FUNC(Py_ssize_t) PyUnstable_Long_CompactValue(const PyLongObject* op);
-