17db96d56Sopenharmony_ci#ifndef Py_SLICEOBJECT_H
27db96d56Sopenharmony_ci#define Py_SLICEOBJECT_H
37db96d56Sopenharmony_ci#ifdef __cplusplus
47db96d56Sopenharmony_ciextern "C" {
57db96d56Sopenharmony_ci#endif
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci/* The unique ellipsis object "..." */
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciPyAPI_DATA(PyObject) _Py_EllipsisObject; /* Don't use this directly */
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci#define Py_Ellipsis (&_Py_EllipsisObject)
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci/* Slice object interface */
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci/*
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ciA slice object containing start, stop, and step data members (the
187db96d56Sopenharmony_cinames are from range).  After much talk with Guido, it was decided to
197db96d56Sopenharmony_cilet these be any arbitrary python type.  Py_None stands for omitted values.
207db96d56Sopenharmony_ci*/
217db96d56Sopenharmony_ci#ifndef Py_LIMITED_API
227db96d56Sopenharmony_citypedef struct {
237db96d56Sopenharmony_ci    PyObject_HEAD
247db96d56Sopenharmony_ci    PyObject *start, *stop, *step;      /* not NULL */
257db96d56Sopenharmony_ci} PySliceObject;
267db96d56Sopenharmony_ci#endif
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) PySlice_Type;
297db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) PyEllipsis_Type;
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci#define PySlice_Check(op) Py_IS_TYPE(op, &PySlice_Type)
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop,
347db96d56Sopenharmony_ci                                  PyObject* step);
357db96d56Sopenharmony_ci#ifndef Py_LIMITED_API
367db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PySlice_FromIndices(Py_ssize_t start, Py_ssize_t stop);
377db96d56Sopenharmony_ciPyAPI_FUNC(int) _PySlice_GetLongIndices(PySliceObject *self, PyObject *length,
387db96d56Sopenharmony_ci                                 PyObject **start_ptr, PyObject **stop_ptr,
397db96d56Sopenharmony_ci                                 PyObject **step_ptr);
407db96d56Sopenharmony_ci#endif
417db96d56Sopenharmony_ciPyAPI_FUNC(int) PySlice_GetIndices(PyObject *r, Py_ssize_t length,
427db96d56Sopenharmony_ci                                  Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step);
437db96d56Sopenharmony_ciPy_DEPRECATED(3.7)
447db96d56Sopenharmony_ciPyAPI_FUNC(int) PySlice_GetIndicesEx(PyObject *r, Py_ssize_t length,
457db96d56Sopenharmony_ci                                     Py_ssize_t *start, Py_ssize_t *stop,
467db96d56Sopenharmony_ci                                     Py_ssize_t *step,
477db96d56Sopenharmony_ci                                     Py_ssize_t *slicelength);
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || (Py_LIMITED_API+0 >= 0x03050400 && Py_LIMITED_API+0 < 0x03060000) || Py_LIMITED_API+0 >= 0x03060100
507db96d56Sopenharmony_ci#define PySlice_GetIndicesEx(slice, length, start, stop, step, slicelen) (  \
517db96d56Sopenharmony_ci    PySlice_Unpack((slice), (start), (stop), (step)) < 0 ?                  \
527db96d56Sopenharmony_ci    ((*(slicelen) = 0), -1) :                                               \
537db96d56Sopenharmony_ci    ((*(slicelen) = PySlice_AdjustIndices((length), (start), (stop), *(step))), \
547db96d56Sopenharmony_ci     0))
557db96d56Sopenharmony_ciPyAPI_FUNC(int) PySlice_Unpack(PyObject *slice,
567db96d56Sopenharmony_ci                               Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step);
577db96d56Sopenharmony_ciPyAPI_FUNC(Py_ssize_t) PySlice_AdjustIndices(Py_ssize_t length,
587db96d56Sopenharmony_ci                                             Py_ssize_t *start, Py_ssize_t *stop,
597db96d56Sopenharmony_ci                                             Py_ssize_t step);
607db96d56Sopenharmony_ci#endif
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci#ifdef __cplusplus
637db96d56Sopenharmony_ci}
647db96d56Sopenharmony_ci#endif
657db96d56Sopenharmony_ci#endif /* !Py_SLICEOBJECT_H */
66