python (3.11.7)

(root)/
include/
python3.11/
memoryobject.h
       1  /* Memory view object. In Python this is available as "memoryview". */
       2  
       3  #ifndef Py_MEMORYOBJECT_H
       4  #define Py_MEMORYOBJECT_H
       5  #ifdef __cplusplus
       6  extern "C" {
       7  #endif
       8  
       9  #ifndef Py_LIMITED_API
      10  PyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type;
      11  #endif
      12  PyAPI_DATA(PyTypeObject) PyMemoryView_Type;
      13  
      14  #define PyMemoryView_Check(op) Py_IS_TYPE(op, &PyMemoryView_Type)
      15  
      16  #ifndef Py_LIMITED_API
      17  /* Get a pointer to the memoryview's private copy of the exporter's buffer. */
      18  #define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view)
      19  /* Get a pointer to the exporting object (this may be NULL!). */
      20  #define PyMemoryView_GET_BASE(op) (((PyMemoryViewObject *)(op))->view.obj)
      21  #endif
      22  
      23  PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base);
      24  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
      25  PyAPI_FUNC(PyObject *) PyMemoryView_FromMemory(char *mem, Py_ssize_t size,
      26                                                 int flags);
      27  #endif
      28  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030b0000
      29  PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(const Py_buffer *info);
      30  #endif
      31  PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
      32                                                    int buffertype,
      33                                                    char order);
      34  
      35  
      36  /* The structs are declared here so that macros can work, but they shouldn't
      37     be considered public. Don't access their fields directly, use the macros
      38     and functions instead! */
      39  #ifndef Py_LIMITED_API
      40  #define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
      41  #define _Py_MANAGED_BUFFER_FREE_FORMAT 0x002  /* free format */
      42  typedef struct {
      43      PyObject_HEAD
      44      int flags;          /* state flags */
      45      Py_ssize_t exports; /* number of direct memoryview exports */
      46      Py_buffer master; /* snapshot buffer obtained from the original exporter */
      47  } _PyManagedBufferObject;
      48  
      49  
      50  /* memoryview state flags */
      51  #define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
      52  #define _Py_MEMORYVIEW_C           0x002  /* C-contiguous layout */
      53  #define _Py_MEMORYVIEW_FORTRAN     0x004  /* Fortran contiguous layout */
      54  #define _Py_MEMORYVIEW_SCALAR      0x008  /* scalar: ndim = 0 */
      55  #define _Py_MEMORYVIEW_PIL         0x010  /* PIL-style layout */
      56  
      57  typedef struct {
      58      PyObject_VAR_HEAD
      59      _PyManagedBufferObject *mbuf; /* managed buffer */
      60      Py_hash_t hash;               /* hash value for read-only views */
      61      int flags;                    /* state flags */
      62      Py_ssize_t exports;           /* number of buffer re-exports */
      63      Py_buffer view;               /* private copy of the exporter's view */
      64      PyObject *weakreflist;
      65      Py_ssize_t ob_array[1];       /* shape, strides, suboffsets */
      66  } PyMemoryViewObject;
      67  #endif
      68  
      69  #ifdef __cplusplus
      70  }
      71  #endif
      72  #endif /* !Py_MEMORYOBJECT_H */