17db96d56Sopenharmony_ci/* Memory view object. In Python this is available as "memoryview". */
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci#ifndef Py_MEMORYOBJECT_H
47db96d56Sopenharmony_ci#define Py_MEMORYOBJECT_H
57db96d56Sopenharmony_ci#ifdef __cplusplus
67db96d56Sopenharmony_ciextern "C" {
77db96d56Sopenharmony_ci#endif
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci#ifndef Py_LIMITED_API
107db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type;
117db96d56Sopenharmony_ci#endif
127db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) PyMemoryView_Type;
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci#define PyMemoryView_Check(op) Py_IS_TYPE(op, &PyMemoryView_Type)
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci#ifndef Py_LIMITED_API
177db96d56Sopenharmony_ci/* Get a pointer to the memoryview's private copy of the exporter's buffer. */
187db96d56Sopenharmony_ci#define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view)
197db96d56Sopenharmony_ci/* Get a pointer to the exporting object (this may be NULL!). */
207db96d56Sopenharmony_ci#define PyMemoryView_GET_BASE(op) (((PyMemoryViewObject *)(op))->view.obj)
217db96d56Sopenharmony_ci#endif
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base);
247db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
257db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyMemoryView_FromMemory(char *mem, Py_ssize_t size,
267db96d56Sopenharmony_ci                                               int flags);
277db96d56Sopenharmony_ci#endif
287db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030b0000
297db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(const Py_buffer *info);
307db96d56Sopenharmony_ci#endif
317db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
327db96d56Sopenharmony_ci                                                  int buffertype,
337db96d56Sopenharmony_ci                                                  char order);
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci/* The structs are declared here so that macros can work, but they shouldn't
377db96d56Sopenharmony_ci   be considered public. Don't access their fields directly, use the macros
387db96d56Sopenharmony_ci   and functions instead! */
397db96d56Sopenharmony_ci#ifndef Py_LIMITED_API
407db96d56Sopenharmony_ci#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
417db96d56Sopenharmony_ci#define _Py_MANAGED_BUFFER_FREE_FORMAT 0x002  /* free format */
427db96d56Sopenharmony_citypedef struct {
437db96d56Sopenharmony_ci    PyObject_HEAD
447db96d56Sopenharmony_ci    int flags;          /* state flags */
457db96d56Sopenharmony_ci    Py_ssize_t exports; /* number of direct memoryview exports */
467db96d56Sopenharmony_ci    Py_buffer master; /* snapshot buffer obtained from the original exporter */
477db96d56Sopenharmony_ci} _PyManagedBufferObject;
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci/* memoryview state flags */
517db96d56Sopenharmony_ci#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
527db96d56Sopenharmony_ci#define _Py_MEMORYVIEW_C           0x002  /* C-contiguous layout */
537db96d56Sopenharmony_ci#define _Py_MEMORYVIEW_FORTRAN     0x004  /* Fortran contiguous layout */
547db96d56Sopenharmony_ci#define _Py_MEMORYVIEW_SCALAR      0x008  /* scalar: ndim = 0 */
557db96d56Sopenharmony_ci#define _Py_MEMORYVIEW_PIL         0x010  /* PIL-style layout */
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_citypedef struct {
587db96d56Sopenharmony_ci    PyObject_VAR_HEAD
597db96d56Sopenharmony_ci    _PyManagedBufferObject *mbuf; /* managed buffer */
607db96d56Sopenharmony_ci    Py_hash_t hash;               /* hash value for read-only views */
617db96d56Sopenharmony_ci    int flags;                    /* state flags */
627db96d56Sopenharmony_ci    Py_ssize_t exports;           /* number of buffer re-exports */
637db96d56Sopenharmony_ci    Py_buffer view;               /* private copy of the exporter's view */
647db96d56Sopenharmony_ci    PyObject *weakreflist;
657db96d56Sopenharmony_ci    Py_ssize_t ob_array[1];       /* shape, strides, suboffsets */
667db96d56Sopenharmony_ci} PyMemoryViewObject;
677db96d56Sopenharmony_ci#endif
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci#ifdef __cplusplus
707db96d56Sopenharmony_ci}
717db96d56Sopenharmony_ci#endif
727db96d56Sopenharmony_ci#endif /* !Py_MEMORYOBJECT_H */
73