X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/620169aef06f74c9a8574e28b5482061e81a7389..dedc5483769a86aace92003a3e10f1881e015e35:/catacomb-python.h diff --git a/catacomb-python.h b/catacomb-python.h index c3b120d..67117fa 100644 --- a/catacomb-python.h +++ b/catacomb-python.h @@ -158,6 +158,27 @@ extern PyObject *mexp_common(PyObject *, PyObject *, size_t, PyObject *bytestring_pywrap(const void *, size_t); PyObject *bytestring_pywrapbuf(buf *); +/*----- Buffers -----------------------------------------------------------*/ + +typedef struct buf_pyobj { + PyObject_HEAD + buf b; + PyObject *sub; + unsigned lk; +} buf_pyobj; + +extern PyTypeObject *rbuf_pytype, *wbuf_pytype; +#define RBUF_PYCHECK(o) PyObject_TypeCheck((o), rbuf_pytype) +#define WBUF_PYCHECK(o) PyObject_TypeCheck((o), wbuf_pytype) +#define BUF_B(o) (&((buf_pyobj *)(o))->b) +#define BUF_SUB(o) (((buf_pyobj *)(o))->sub) +#define BUF_LK(o) (((buf_pyobj *)(o))->lk) + +extern PyObject *buferr; +#define BUFERR(str) do { PyErr_SetString(buferr, str); goto end; } while (0) + +extern int ensurebuf(PyObject *, size_t); + /*----- Multiprecision arithmetic -----------------------------------------*/ typedef struct mp_pyobj { @@ -174,8 +195,10 @@ extern PyTypeObject *gf_pytype; extern mp *mp_frompylong(PyObject *); extern PyObject *mp_topylong(mp *); extern mp *tomp(PyObject *); +extern mp *implicitmp(PyObject *); extern mp *getmp(PyObject *); extern int convmp(PyObject *, void *); +extern mp *implicitgf(PyObject *); extern mp *getgf(PyObject *); extern int convgf(PyObject *, void *); extern PyObject *mp_pywrap(mp *);