python27_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#[repr(C)]
17#[derive(Copy, Clone)]
18pub struct PySliceObject {
19    #[cfg(py_sys_config = "Py_TRACE_REFS")]
20    pub _ob_next: *mut PyObject,
21    #[cfg(py_sys_config = "Py_TRACE_REFS")]
22    pub _ob_prev: *mut PyObject,
23    pub ob_refcnt: Py_ssize_t,
24    pub ob_type: *mut PyTypeObject,
25    pub start: *mut PyObject,
26    pub stop: *mut PyObject,
27    pub step: *mut PyObject,
28}
29
30#[cfg_attr(windows, link(name = "pythonXY"))]
31extern "C" {
32    pub static mut PySlice_Type: PyTypeObject;
33    pub static mut PyEllipsis_Type: PyTypeObject;
34}
35
36#[inline(always)]
37pub unsafe fn PySlice_Check(op: *mut PyObject) -> c_int {
38    (Py_TYPE(op) == &mut PySlice_Type) as c_int
39}
40
41#[cfg_attr(windows, link(name = "pythonXY"))]
42extern "C" {
43    pub fn PySlice_New(
44        start: *mut PyObject,
45        stop: *mut PyObject,
46        step: *mut PyObject,
47    ) -> *mut PyObject;
48    pub fn PySlice_GetIndices(
49        r: *mut PyObject,
50        length: Py_ssize_t,
51        start: *mut Py_ssize_t,
52        stop: *mut Py_ssize_t,
53        step: *mut Py_ssize_t,
54    ) -> c_int;
55    pub fn PySlice_GetIndicesEx(
56        r: *mut PyObject,
57        length: Py_ssize_t,
58        start: *mut Py_ssize_t,
59        stop: *mut Py_ssize_t,
60        step: *mut Py_ssize_t,
61        slicelength: *mut Py_ssize_t,
62    ) -> c_int;
63}