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