src/ffi/buffer.rs (25 lines of code) (raw):
// SPDX-License-Identifier: (Apache-2.0 OR MIT)
use core::ffi::c_int;
use pyo3_ffi::*;
#[repr(C)]
pub struct _PyManagedBufferObject {
pub ob_base: *mut pyo3_ffi::PyObject,
pub flags: c_int,
pub exports: Py_ssize_t,
pub master: *mut Py_buffer,
}
#[repr(C)]
pub struct PyMemoryViewObject {
pub ob_base: PyVarObject,
pub mbuf: *mut _PyManagedBufferObject,
pub hash: Py_hash_t,
pub flags: c_int,
pub exports: Py_ssize_t,
pub view: Py_buffer,
pub weakreflist: *mut PyObject,
pub ob_array: [Py_ssize_t; 1],
}
#[allow(non_snake_case)]
#[inline(always)]
pub unsafe fn PyMemoryView_GET_BUFFER(op: *mut PyObject) -> *const Py_buffer {
unsafe { &(*op.cast::<PyMemoryViewObject>()).view }
}