| 22 | // as_pyarray is a helper function to convert a C++ sequence to a numpy array and zero-copy |
| 23 | template <typename Sequence> |
| 24 | inline py::array_t<typename Sequence::value_type> as_pyarray(Sequence &&seq) { |
| 25 | // Move entire object to heap. Memory handled via Python capsule |
| 26 | Sequence *seq_ptr = new Sequence(std::move(seq)); |
| 27 | // Capsule shall delete sequence object when done |
| 28 | auto capsule = py::capsule(seq_ptr, [](void *p) { delete reinterpret_cast<Sequence *>(p); }); |
| 29 | |
| 30 | return py::array(static_cast<py::ssize_t>(seq_ptr->size()), // shape of array |
| 31 | seq_ptr->data(), // c-style contiguous strides for Sequence |
| 32 | capsule // numpy array references this parent |
| 33 | ); |
| 34 | } |
| 35 | |
| 36 | PYBIND11_MODULE(_infinistore, m) { |
| 37 | // client side |