PEP 757: edits, based on C-API WG feedback (#4026)
Co-authored-by: Carol Willing <carolcode@willingconsulting.com>
This commit is contained in:
parent
388568986b
commit
68413fa107
|
@ -49,14 +49,19 @@ Specification
|
||||||
Layout API
|
Layout API
|
||||||
----------
|
----------
|
||||||
|
|
||||||
Data needed by `GMP <https://gmplib.org/>`_-like import-export functions.
|
Data needed by `GMP <https://gmplib.org/>`_-like `import
|
||||||
|
<https://gmplib.org/manual/Integer-Import-and-Export#index-mpz_005fimport>`_-`export
|
||||||
|
<https://gmplib.org/manual/Integer-Import-and-Export#index-mpz_005fexport>`_
|
||||||
|
functions.
|
||||||
|
|
||||||
.. c:struct:: PyLongLayout
|
.. c:struct:: PyLongLayout
|
||||||
|
|
||||||
Layout of an array of digits, used by Python :class:`int` object.
|
Layout of an array of "digits" ("limbs" in the GMP terminology), used to
|
||||||
|
represent absolute value for arbitrary precision integers.
|
||||||
|
|
||||||
Use :c:func:`PyLong_GetNativeLayout` to get the native layout of Python
|
Use :c:func:`PyLong_GetNativeLayout` to get the native layout of Python
|
||||||
:class:`int` objects.
|
:class:`int` objects, used internally for integers with "big enough"
|
||||||
|
absolute value.
|
||||||
|
|
||||||
See also :data:`sys.int_info` which exposes similar information to Python.
|
See also :data:`sys.int_info` which exposes similar information to Python.
|
||||||
|
|
||||||
|
@ -148,8 +153,9 @@ Export API
|
||||||
If *export_long->digits* is not ``NULL``, :c:func:`PyLong_FreeExport` must be
|
If *export_long->digits* is not ``NULL``, :c:func:`PyLong_FreeExport` must be
|
||||||
called when the export is no longer needed.
|
called when the export is no longer needed.
|
||||||
|
|
||||||
On CPython 3.14, no memory copy is needed, it's just a thin wrapper to
|
|
||||||
expose Python int internal digits array.
|
On CPython 3.14, no memory copy is needed in :c:func:`PyLong_Export`, it's just
|
||||||
|
a thin wrapper to expose Python :class:`int` internal digits array.
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: void PyLong_FreeExport(PyLongExport *export_long)
|
.. c:function:: void PyLong_FreeExport(PyLongExport *export_long)
|
||||||
|
@ -167,7 +173,8 @@ create a Python :class:`int` object from a digits array.
|
||||||
|
|
||||||
A Python :class:`int` writer instance.
|
A Python :class:`int` writer instance.
|
||||||
|
|
||||||
The instance must be destroyed by :c:func:`PyLongWriter_Finish`.
|
The instance must be destroyed by :c:func:`PyLongWriter_Finish` or
|
||||||
|
:c:func:`PyLongWriter_Discard`.
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: PyLongWriter* PyLongWriter_Create(int negative, Py_ssize_t ndigits, void **digits)
|
.. c:function:: PyLongWriter* PyLongWriter_Create(int negative, Py_ssize_t ndigits, void **digits)
|
||||||
|
@ -182,13 +189,15 @@ create a Python :class:`int` object from a digits array.
|
||||||
*ndigits* is the number of digits in the *digits* array. It must be
|
*ndigits* is the number of digits in the *digits* array. It must be
|
||||||
greater than or equal to 0.
|
greater than or equal to 0.
|
||||||
|
|
||||||
The caller must initialize the array of digits *digits* and then call
|
The caller can either initialize the array of digits *digits* and then call
|
||||||
:c:func:`PyLongWriter_Finish` to get a Python :class:`int`. Digits must be
|
:c:func:`PyLongWriter_Finish` to get a Python :class:`int`, or call
|
||||||
in the range [``0``; ``(1 << sys.int_info.bits_per_digit) - 1``]. Unused digits must
|
:c:func:`PyLongWriter_Discard` to destroy the writer instance. Digits must
|
||||||
be set to ``0``.
|
be in the range [``0``; ``(1 << sys.int_info.bits_per_digit) - 1``]. Unused
|
||||||
|
digits must be set to ``0``.
|
||||||
|
|
||||||
On CPython 3.14, the implementation is a thin wrapper to the private
|
|
||||||
:c:func:`!_PyLong_New()` function.
|
On CPython 3.14, the :c:func:`PyLongWriter_Create` implementation is a thin
|
||||||
|
wrapper to the private :c:func:`!_PyLong_New()` function.
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: PyObject* PyLongWriter_Finish(PyLongWriter *writer)
|
.. c:function:: PyObject* PyLongWriter_Finish(PyLongWriter *writer)
|
||||||
|
@ -204,7 +213,7 @@ create a Python :class:`int` object from a digits array.
|
||||||
|
|
||||||
.. c:function:: void PyLongWriter_Discard(PyLongWriter *writer)
|
.. c:function:: void PyLongWriter_Discard(PyLongWriter *writer)
|
||||||
|
|
||||||
Discard the internal object and destroy the writer instance.
|
Discard a :c:type:`PyLongWriter` created by :c:func:`PyLongWriter_Create`.
|
||||||
|
|
||||||
|
|
||||||
Optimize import for small integers
|
Optimize import for small integers
|
||||||
|
|
Loading…
Reference in New Issue