blob: f74230a9ec680e5ae020b01589ef6aa8c709310a [file] [log] [blame]
Georg Brandlf6842722008-01-19 22:08:21 +00001.. highlightlang:: c
2
3.. _slice-objects:
4
5Slice Objects
6-------------
7
8
Sandro Tosi98ed08f2012-01-14 16:42:02 +01009.. c:var:: PyTypeObject PySlice_Type
Georg Brandlf6842722008-01-19 22:08:21 +000010
11 .. index:: single: SliceType (in module types)
12
13 The type object for slice objects. This is the same as ``slice`` and
14 ``types.SliceType``.
15
16
Sandro Tosi98ed08f2012-01-14 16:42:02 +010017.. c:function:: int PySlice_Check(PyObject *ob)
Georg Brandlf6842722008-01-19 22:08:21 +000018
19 Return true if *ob* is a slice object; *ob* must not be *NULL*.
20
21
Sandro Tosi98ed08f2012-01-14 16:42:02 +010022.. c:function:: PyObject* PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
Georg Brandlf6842722008-01-19 22:08:21 +000023
24 Return a new slice object with the given values. The *start*, *stop*, and
Jeroen Ruigrok van der Werven84441cc2009-04-25 18:31:20 +000025 *step* parameters are used as the values of the slice object attributes of
26 the same names. Any of the values may be *NULL*, in which case the
27 ``None`` will be used for the corresponding attribute. Return *NULL* if
28 the new object could not be allocated.
Georg Brandlf6842722008-01-19 22:08:21 +000029
30
Sandro Tosi98ed08f2012-01-14 16:42:02 +010031.. c:function:: int PySlice_GetIndices(PySliceObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
Georg Brandlf6842722008-01-19 22:08:21 +000032
33 Retrieve the start, stop and step indices from the slice object *slice*,
Jeroen Ruigrok van der Werven84441cc2009-04-25 18:31:20 +000034 assuming a sequence of length *length*. Treats indices greater than
35 *length* as errors.
Georg Brandlf6842722008-01-19 22:08:21 +000036
Jeroen Ruigrok van der Werven84441cc2009-04-25 18:31:20 +000037 Returns 0 on success and -1 on error with no exception set (unless one of
38 the indices was not :const:`None` and failed to be converted to an integer,
39 in which case -1 is returned with an exception set).
Georg Brandlf6842722008-01-19 22:08:21 +000040
Jeroen Ruigrok van der Werven84441cc2009-04-25 18:31:20 +000041 You probably do not want to use this function. If you want to use slice
42 objects in versions of Python prior to 2.3, you would probably do well to
Sandro Tosi98ed08f2012-01-14 16:42:02 +010043 incorporate the source of :c:func:`PySlice_GetIndicesEx`, suitably renamed,
Jeroen Ruigrok van der Werven84441cc2009-04-25 18:31:20 +000044 in the source of your extension.
Georg Brandlf6842722008-01-19 22:08:21 +000045
Jeroen Ruigrok van der Werven23919182009-04-25 18:46:03 +000046 .. versionchanged:: 2.5
Sandro Tosi98ed08f2012-01-14 16:42:02 +010047 This function used an :c:type:`int` type for *length* and an
48 :c:type:`int *` type for *start*, *stop*, and *step*. This might require
Jeroen Ruigrok van der Werven23919182009-04-25 18:46:03 +000049 changes in your code for properly supporting 64-bit systems.
50
Georg Brandlf6842722008-01-19 22:08:21 +000051
Sandro Tosi98ed08f2012-01-14 16:42:02 +010052.. 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)
Georg Brandlf6842722008-01-19 22:08:21 +000053
Sandro Tosi98ed08f2012-01-14 16:42:02 +010054 Usable replacement for :c:func:`PySlice_GetIndices`. Retrieve the start,
Jeroen Ruigrok van der Werven84441cc2009-04-25 18:31:20 +000055 stop, and step indices from the slice object *slice* assuming a sequence of
56 length *length*, and store the length of the slice in *slicelength*. Out
57 of bounds indices are clipped in a manner consistent with the handling of
58 normal slices.
Georg Brandlf6842722008-01-19 22:08:21 +000059
60 Returns 0 on success and -1 on error with exception set.
61
62 .. versionadded:: 2.3
Jeroen Ruigrok van der Werven23919182009-04-25 18:46:03 +000063
64 .. versionchanged:: 2.5
Sandro Tosi98ed08f2012-01-14 16:42:02 +010065 This function used an :c:type:`int` type for *length* and an
66 :c:type:`int *` type for *start*, *stop*, *step*, and *slicelength*. This
Jeroen Ruigrok van der Werven23919182009-04-25 18:46:03 +000067 might require changes in your code for properly supporting 64-bit
68 systems.