summaryrefslogtreecommitdiffstats
path: root/Doc/c-api/slice.rst
diff options
context:
space:
mode:
Diffstat (limited to 'Doc/c-api/slice.rst')
-rw-r--r--Doc/c-api/slice.rst91
1 files changed, 24 insertions, 67 deletions
diff --git a/Doc/c-api/slice.rst b/Doc/c-api/slice.rst
index 48a58c6..08d5b94 100644
--- a/Doc/c-api/slice.rst
+++ b/Doc/c-api/slice.rst
@@ -1,4 +1,4 @@
-.. highlight:: c
+.. highlightlang:: c
.. _slice-objects:
@@ -8,25 +8,27 @@ Slice Objects
.. c:var:: PyTypeObject PySlice_Type
- The type object for slice objects. This is the same as :class:`slice` in the
- Python layer.
+ .. index:: single: SliceType (in module types)
+
+ The type object for slice objects. This is the same as ``slice`` and
+ ``types.SliceType``.
.. c:function:: int PySlice_Check(PyObject *ob)
- Return true if *ob* is a slice object; *ob* must not be ``NULL``.
+ Return true if *ob* is a slice object; *ob* must not be *NULL*.
.. c:function:: PyObject* PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
Return a new slice object with the given values. The *start*, *stop*, and
*step* parameters are used as the values of the slice object attributes of
- the same names. Any of the values may be ``NULL``, in which case the
- ``None`` will be used for the corresponding attribute. Return ``NULL`` if
+ the same names. Any of the values may be *NULL*, in which case the
+ ``None`` will be used for the corresponding attribute. Return *NULL* if
the new object could not be allocated.
-.. c:function:: int PySlice_GetIndices(PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
+.. c:function:: int PySlice_GetIndices(PySliceObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
Retrieve the start, stop and step indices from the slice object *slice*,
assuming a sequence of length *length*. Treats indices greater than
@@ -36,14 +38,18 @@ Slice Objects
the indices was not :const:`None` and failed to be converted to an integer,
in which case ``-1`` is returned with an exception set).
- You probably do not want to use this function.
+ You probably do not want to use this function. If you want to use slice
+ objects in versions of Python prior to 2.3, you would probably do well to
+ incorporate the source of :c:func:`PySlice_GetIndicesEx`, suitably renamed,
+ in the source of your extension.
- .. versionchanged:: 3.2
- The parameter type for the *slice* parameter was ``PySliceObject*``
- before.
+ .. versionchanged:: 2.5
+ This function used an :c:type:`int` type for *length* and an
+ :c:type:`int *` type for *start*, *stop*, and *step*. This might require
+ changes in your code for properly supporting 64-bit systems.
-.. c:function:: int PySlice_GetIndicesEx(PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength)
+.. c:function:: int PySlice_GetIndicesEx(PySliceObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength)
Usable replacement for :c:func:`PySlice_GetIndices`. Retrieve the start,
stop, and step indices from the slice object *slice* assuming a sequence of
@@ -53,62 +59,13 @@ Slice Objects
Returns ``0`` on success and ``-1`` on error with exception set.
- .. note::
- This function is considered not safe for resizable sequences.
- Its invocation should be replaced by a combination of
- :c:func:`PySlice_Unpack` and :c:func:`PySlice_AdjustIndices` where ::
-
- if (PySlice_GetIndicesEx(slice, length, &start, &stop, &step, &slicelength) < 0) {
- // return error
- }
-
- is replaced by ::
-
- if (PySlice_Unpack(slice, &start, &stop, &step) < 0) {
- // return error
- }
- slicelength = PySlice_AdjustIndices(length, &start, &stop, step);
-
- .. versionchanged:: 3.2
- The parameter type for the *slice* parameter was ``PySliceObject*``
- before.
-
- .. versionchanged:: 3.6.1
- If ``Py_LIMITED_API`` is not set or set to the value between ``0x03050400``
- and ``0x03060000`` (not including) or ``0x03060100`` or higher
- :c:func:`!PySlice_GetIndicesEx` is implemented as a macro using
- :c:func:`!PySlice_Unpack` and :c:func:`!PySlice_AdjustIndices`.
- Arguments *start*, *stop* and *step* are evaluated more than once.
-
- .. deprecated:: 3.6.1
- If ``Py_LIMITED_API`` is set to the value less than ``0x03050400`` or
- between ``0x03060000`` and ``0x03060100`` (not including)
- :c:func:`!PySlice_GetIndicesEx` is a deprecated function.
-
-
-.. c:function:: int PySlice_Unpack(PyObject *slice, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
-
- Extract the start, stop and step data members from a slice object as
- C integers. Silently reduce values larger than ``PY_SSIZE_T_MAX`` to
- ``PY_SSIZE_T_MAX``, silently boost the start and stop values less than
- ``PY_SSIZE_T_MIN`` to ``PY_SSIZE_T_MIN``, and silently boost the step
- values less than ``-PY_SSIZE_T_MAX`` to ``-PY_SSIZE_T_MAX``.
-
- Return ``-1`` on error, ``0`` on success.
-
- .. versionadded:: 3.6.1
-
-
-.. c:function:: Py_ssize_t PySlice_AdjustIndices(Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step)
-
- Adjust start/end slice indices assuming a sequence of the specified length.
- Out of bounds indices are clipped in a manner consistent with the handling
- of normal slices.
-
- Return the length of the slice. Always successful. Doesn't call Python
- code.
+ .. versionadded:: 2.3
- .. versionadded:: 3.6.1
+ .. versionchanged:: 2.5
+ This function used an :c:type:`int` type for *length* and an
+ :c:type:`int *` type for *start*, *stop*, *step*, and *slicelength*. This
+ might require changes in your code for properly supporting 64-bit
+ systems.
Ellipsis Object