Skip to main content

pyo3_ffi/cpython/
bytearrayobject.rs

1use crate::object::*;
2use crate::pyport::Py_ssize_t;
3#[cfg(not(any(PyPy, GraalPy)))]
4use std::ffi::c_char;
5#[cfg(not(Py_3_9))]
6use std::ffi::c_int;
7
8#[cfg(not(any(PyPy, GraalPy, Py_LIMITED_API)))]
9#[repr(C)]
10pub struct PyByteArrayObject {
11    pub ob_base: PyVarObject,
12    pub ob_alloc: Py_ssize_t,
13    pub ob_bytes: *mut c_char,
14    pub ob_start: *mut c_char,
15    #[cfg(Py_3_9)]
16    pub ob_exports: Py_ssize_t,
17    #[cfg(not(Py_3_9))]
18    pub ob_exports: c_int,
19    #[cfg(Py_3_15)]
20    pub ob_bytes_object: *mut PyObject,
21}
22
23#[cfg(any(PyPy, GraalPy))]
24opaque_struct!(pub PyByteArrayObject);
25
26#[inline]
27#[cfg(not(any(PyPy, GraalPy)))]
28pub unsafe fn PyByteArray_AS_STRING(op: *mut PyObject) -> *mut c_char {
29    let byte_array = op as *mut PyByteArrayObject;
30    (*byte_array).ob_start
31}
32
33/*
34#[inline]
35#[cfg(Py_GIL_DISABLED)]
36pub unsafe fn PyByteArray_GET_SIZE(op: *mut PyObject) -> Py_ssize_t {
37  let byte_array = op as *mut PyByteArrayObject;
38  // _Py_atomic_load_ssize_relaxed and _PyVarObject_CAST not implemented
39  // Insert Rust equivalent of the next line:
40  return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(byte_array)->ob_size));
41}
42*/
43
44#[inline]
45#[cfg(not(Py_GIL_DISABLED))]
46pub unsafe fn PyByteArray_GET_SIZE(op: *mut PyObject) -> Py_ssize_t {
47    Py_SIZE(op)
48}
⚠️ Internal Docs ⚠️ Not Public API 👉 Official Docs Here