utils.i 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. %include "common.i"
  2. %include "carrays.i"
  3. %array_functions(int, intArray);
  4. %array_functions(float, floatArray);
  5. %array_functions(double, doubleArray);
  6. %include "cpointer.i"
  7. %pointer_functions(int, intp);
  8. %pointer_functions(float, floatp);
  9. %pointer_functions(double, doublep);
  10. PyObject *ptr_to_cobj(void *p);
  11. void *cobj_to_ptr(PyObject *o);
  12. PyObject *ptr_to_buffer_const(const void *p, int size);
  13. PyObject *ptr_to_buffer(void *p, int size);
  14. const void *buffer_to_ptr_const(PyObject *o);
  15. void *buffer_to_ptr(PyObject *o);
  16. %{
  17. static PyObject *ptr_to_cobj(void *p)
  18. {
  19. return PyCObject_FromVoidPtr(p, NULL);
  20. }
  21. static void *cobj_to_ptr(PyObject *o)
  22. {
  23. if (PyCObject_Check(o))
  24. return PyCObject_AsVoidPtr(o);
  25. PyErr_SetString(PyExc_ValueError,"CObject Expected");
  26. return NULL;
  27. }
  28. static PyObject *ptr_to_buffer_const(const void *p, int size)
  29. {
  30. return PyBuffer_FromMemory((void *) p, size);
  31. }
  32. static PyObject *ptr_to_buffer(void *p, int size)
  33. {
  34. return PyBuffer_FromReadWriteMemory(p, size);
  35. }
  36. static const void *buffer_to_ptr_const(PyObject *o)
  37. {
  38. const void *p;
  39. Py_ssize_t len;
  40. if (PyObject_AsReadBuffer(o, &p, &len) == 0)
  41. return p;
  42. PyErr_SetString(PyExc_ValueError,"buffer object expected");
  43. return NULL;
  44. }
  45. static void *buffer_to_ptr(PyObject *o)
  46. {
  47. void *p;
  48. Py_ssize_t len;
  49. if (PyObject_AsWriteBuffer(o, &p, &len) == 0)
  50. return p;
  51. PyErr_SetString(PyExc_ValueError,"buffer object expected");
  52. return NULL;
  53. }
  54. %}