1
"""A utility to allocate a C array.
3
This was copied from mpi4py and is licensed under the BSD license.
6
from libc.stdlib cimport free, malloc
8
#-----------------------------------------------------------------------------
10
#-----------------------------------------------------------------------------
12
cdef extern from "Python.h":
13
object PyCObject_FromVoidPtr(void *, void (*)(void*))
15
#-----------------------------------------------------------------------------
17
#-----------------------------------------------------------------------------
19
cdef inline void *memnew(size_t n):
20
"""malloc a new memory chunk of a given size."""
24
cdef inline void memdel(void *p):
25
"""free a chunk of memory allocated with memnew."""
28
cdef inline object allocate(size_t n, void **pp):
29
"""A wrapper that allocates a C array, but with Python ref-counting."""
31
cdef void *p = memnew(n)
35
cob = PyCObject_FromVoidPtr(p, memdel)