python3_sys/
pymem.rs

1use libc::{c_void, size_t};
2
3#[cfg(Py_3_4)]
4#[cfg(not(Py_LIMITED_API))]
5#[cfg_attr(windows, link(name = "pythonXY"))]
6extern "C" {
7    pub fn PyMem_RawMalloc(size: size_t) -> *mut c_void;
8    #[cfg(Py_3_5)]
9    pub fn PyMem_RawCalloc(nelem: size_t, elsize: size_t) -> *mut c_void;
10    pub fn PyMem_RawRealloc(ptr: *mut c_void, new_size: size_t) -> *mut c_void;
11    pub fn PyMem_RawFree(ptr: *mut c_void) -> ();
12}
13
14#[cfg_attr(windows, link(name = "pythonXY"))]
15extern "C" {
16    pub fn PyMem_Malloc(size: size_t) -> *mut c_void;
17    #[cfg(Py_3_5)]
18    pub fn PyMem_Calloc(nelem: size_t, elsize: size_t) -> *mut c_void;
19    pub fn PyMem_Realloc(ptr: *mut c_void, new_size: size_t) -> *mut c_void;
20    pub fn PyMem_Free(ptr: *mut c_void) -> ();
21}
22
23#[cfg(Py_3_4)]
24#[cfg(not(Py_LIMITED_API))]
25#[repr(C)]
26#[derive(Copy, Clone)]
27pub enum PyMemAllocatorDomain {
28    PYMEM_DOMAIN_RAW,
29    PYMEM_DOMAIN_MEM,
30    PYMEM_DOMAIN_OBJ,
31}
32
33#[repr(C)]
34#[derive(Copy, Clone)]
35#[cfg(all(Py_3_4, not(Py_3_5), not(Py_LIMITED_API)))]
36pub struct PyMemAllocator {
37    pub ctx: *mut c_void,
38    pub malloc: Option<extern "C" fn(ctx: *mut c_void, size: size_t) -> *mut c_void>,
39    pub realloc:
40        Option<extern "C" fn(ctx: *mut c_void, ptr: *mut c_void, new_size: size_t) -> *mut c_void>,
41    pub free: Option<extern "C" fn(ctx: *mut c_void, ptr: *mut c_void) -> ()>,
42}
43
44#[repr(C)]
45#[derive(Copy, Clone)]
46#[cfg(all(Py_3_5, not(Py_LIMITED_API)))]
47pub struct PyMemAllocatorEx {
48    pub ctx: *mut c_void,
49    pub malloc: Option<extern "C" fn(ctx: *mut c_void, size: size_t) -> *mut c_void>,
50    pub calloc:
51        Option<extern "C" fn(ctx: *mut c_void, nelem: size_t, elsize: size_t) -> *mut c_void>,
52    pub realloc:
53        Option<extern "C" fn(ctx: *mut c_void, ptr: *mut c_void, new_size: size_t) -> *mut c_void>,
54    pub free: Option<extern "C" fn(ctx: *mut c_void, ptr: *mut c_void) -> ()>,
55}
56
57#[cfg(Py_3_4)]
58#[cfg(not(Py_LIMITED_API))]
59#[cfg_attr(windows, link(name = "pythonXY"))]
60extern "C" {
61    #[cfg(not(Py_3_5))]
62    pub fn PyMem_GetAllocator(domain: PyMemAllocatorDomain, allocator: *mut PyMemAllocator) -> ();
63    #[cfg(not(Py_3_5))]
64    pub fn PyMem_SetAllocator(domain: PyMemAllocatorDomain, allocator: *mut PyMemAllocator) -> ();
65    #[cfg(Py_3_5)]
66    pub fn PyMem_GetAllocator(domain: PyMemAllocatorDomain, allocator: *mut PyMemAllocatorEx)
67        -> ();
68    #[cfg(Py_3_5)]
69    pub fn PyMem_SetAllocator(domain: PyMemAllocatorDomain, allocator: *mut PyMemAllocatorEx)
70        -> ();
71    pub fn PyMem_SetupDebugHooks() -> ();
72}