python3_sys/
sliceobject.rs

1use libc::c_int;
2
3use crate::object::*;
4use crate::pyport::Py_ssize_t;
5
6#[cfg_attr(windows, link(name = "pythonXY"))]
7extern "C" {
8    static mut _Py_EllipsisObject: PyObject;
9}
10
11#[inline(always)]
12pub unsafe fn Py_Ellipsis() -> *mut PyObject {
13    &mut _Py_EllipsisObject
14}
15
16#[cfg_attr(windows, link(name = "pythonXY"))]
17extern "C" {
18    pub static mut PySlice_Type: PyTypeObject;
19    pub static mut PyEllipsis_Type: PyTypeObject;
20}
21
22#[inline(always)]
23pub unsafe fn PySlice_Check(op: *mut PyObject) -> c_int {
24    (Py_TYPE(op) == &mut PySlice_Type) as c_int
25}
26
27#[cfg_attr(windows, link(name = "pythonXY"))]
28extern "C" {
29    pub fn PySlice_New(
30        start: *mut PyObject,
31        stop: *mut PyObject,
32        step: *mut PyObject,
33    ) -> *mut PyObject;
34    pub fn PySlice_GetIndices(
35        r: *mut PyObject,
36        length: Py_ssize_t,
37        start: *mut Py_ssize_t,
38        stop: *mut Py_ssize_t,
39        step: *mut Py_ssize_t,
40    ) -> c_int;
41    pub fn PySlice_GetIndicesEx(
42        r: *mut PyObject,
43        length: Py_ssize_t,
44        start: *mut Py_ssize_t,
45        stop: *mut Py_ssize_t,
46        step: *mut Py_ssize_t,
47        slicelength: *mut Py_ssize_t,
48    ) -> c_int;
49
50    #[cfg(Py_3_7)] // available since 3.5.4/3.6.1, but we don't have a cfg for the point releases
51    pub fn PySlice_Unpack(
52        slice: *mut PyObject,
53        start: *mut Py_ssize_t,
54        stop: *mut Py_ssize_t,
55        step: *mut Py_ssize_t,
56    ) -> c_int;
57    #[cfg(Py_3_7)] // available since 3.5.4/3.6.1, but we don't have a cfg for the point releases
58    pub fn PySlice_AdjustIndices(
59        length: Py_ssize_t,
60        start: *mut Py_ssize_t,
61        stop: *mut Py_ssize_t,
62        step: Py_ssize_t,
63    ) -> Py_ssize_t;
64}