HAMR
The Heterogeneous Accelerator Memory Resource
hamr_python_deleter_impl.h
1 #include "hamr_gil_state.h"
2 #include <Python.h>
3 #include <iostream>
4 
5 namespace hamr
6 {
7 
8 // --------------------------------------------------------------------------
9 template <typename T>
10 python_deleter<T>::python_deleter(T *ptr, size_t n, PyObject *obj)
11  : m_ptr(ptr), m_elem(n), m_object(obj)
12 {
13 #if defined(HAMR_VERBOSE)
14  if (hamr::get_verbose())
15  {
16  std::cerr << "created python_deleter for array of " << n
17  << " objects of type " << typeid(T).name() << sizeof(T)
18  << " holding a reference to " << m_object << std::endl;
19  }
20 #endif
21  hamr::gil_state gil;
22  Py_INCREF(obj);
23 }
24 
25 // --------------------------------------------------------------------------
26 template <typename T>
28 {
29  (void)ptr;
30  assert(ptr == m_ptr);
31 #if defined(HAMR_VERBOSE)
32  if (hamr::get_verbose())
33  {
34  std::cerr << "python_deleter deleting array of " << m_elem
35  << " objects of type " << typeid(T).name() << sizeof(T)
36  << " release reference to " << m_object << std::endl;
37  }
38 #endif
39  hamr::gil_state gil;
40  Py_DECREF(m_object);
41 }
42 
43 }
hamr::python_deleter::operator()
void operator()(T *ptr)
Definition: hamr_python_deleter_impl.h:27
hamr::gil_state
A RAII helper for managing the Python GIL.
Definition: hamr_gil_state.h:13
hamr::get_verbose
constexpr HAMR_EXPORT int get_verbose()
returns the value of the HAMR_VERBOSE environment variable
Definition: hamr_env.h:14
hamr::python_deleter::python_deleter
python_deleter(T *ptr, size_t n_elem, PyObject *obj)
Definition: hamr_python_deleter_impl.h:10
hamr
heterogeneous accelerator memory resource
Definition: hamr_buffer.h:13