diff options
author | INADA Naoki <methane@users.noreply.github.com> | 2018-11-09 20:55:13 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-09 20:55:13 +0900 |
commit | 9e210bfc1a922031db67bf42e508b1b4550814c6 (patch) | |
tree | 1bbef6a155df89e6fef0a9b5efbae4928fa40772 /msgpack/buff_converter.h | |
parent | a8b3e97fe588a2411a8e869b52be1946ed9f0f86 (diff) | |
download | msgpack-python-9e210bfc1a922031db67bf42e508b1b4550814c6.tar.gz |
Add Packer.buffer() (#320)
Diffstat (limited to 'msgpack/buff_converter.h')
-rw-r--r-- | msgpack/buff_converter.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/msgpack/buff_converter.h b/msgpack/buff_converter.h new file mode 100644 index 0000000..bc7227a --- /dev/null +++ b/msgpack/buff_converter.h @@ -0,0 +1,28 @@ +#include "Python.h" + +/* cython does not support this preprocessor check => write it in raw C */ +#if PY_MAJOR_VERSION == 2 +static PyObject * +buff_to_buff(char *buff, Py_ssize_t size) +{ + return PyBuffer_FromMemory(buff, size); +} + +#elif (PY_MAJOR_VERSION == 3) && (PY_MINOR_VERSION >= 3) +static PyObject * +buff_to_buff(char *buff, Py_ssize_t size) +{ + return PyMemoryView_FromMemory(buff, size, PyBUF_READ); +} +#else +static PyObject * +buff_to_buff(char *buff, Py_ssize_t size) +{ + Py_buffer pybuf; + if (PyBuffer_FillInfo(&pybuf, NULL, buff, size, 1, PyBUF_FULL_RO) == -1) { + return NULL; + } + + return PyMemoryView_FromBuffer(&pybuf); +} +#endif |