X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib-python/blobdiff_plain/20bce5e92b01cd928f26b61be78215117039c561..579d01693c86259110fe7a2c2a6f005f1bdbad5b:/codec.pyx.in diff --git a/codec.pyx.in b/codec.pyx.in index 60d9714..ebbb38e 100644 --- a/codec.pyx.in +++ b/codec.pyx.in @@ -27,36 +27,20 @@ #----- External dependencies ------------------------------------------------ -cdef extern from 'stddef.h': - ctypedef int size_t - -cdef extern from 'mLib/dstr.h': - ctypedef struct dstr: - char *buf - int len - void DCREATE(dstr *d) - void dstr_destroy(dstr *d) - -cdef extern from 'mLib/alloc.h': - char *xstrdup(char *p) - void xfree(void *p) - cdef extern from 'mLib/%PREFIX%.h': ctypedef struct %PREFIX%_ctx: char *indent int maxline - void %PREFIX%_init(%PREFIX%_ctx *b) - void %PREFIX%_encode(%PREFIX%_ctx *b, void *p, size_t sz, dstr *d) - void %PREFIX%_decode(%PREFIX%_ctx *b, void *p, size_t sz, dstr *d) - -cdef extern from 'Python.h': - int PyObject_AsReadBuffer(obj, void **buf, int *len) except -1 - object PyString_FromStringAndSize(char *p, int len) + void _%PREFIX%_init "%PREFIX%_init"(%PREFIX%_ctx *b) + void _%PREFIX%_encode "%PREFIX%_encode"(%PREFIX%_ctx *b, + void *p, size_t sz, dstr *d) + void _%PREFIX%_decode"%PREFIX%_decode"(%PREFIX%_ctx *b, + void *p, size_t sz, dstr *d) -cdef class Encode: +cdef class %CLASS%Encode: cdef %PREFIX%_ctx ctx def __new__(me, *hunoz, **hukairz): - %PREFIX%_init(&me.ctx) + _%PREFIX%_init(&me.ctx) me.ctx.indent = NULL def __init__(me, indent = '\n', maxline = 72): if me.ctx.indent: @@ -85,7 +69,7 @@ cdef class Encode: DCREATE(&d) try: PyObject_AsReadBuffer(text, &p, &len) - %PREFIX%_encode(&me.ctx, p, len, &d) + _%PREFIX%_encode(&me.ctx, p, len, &d) rc = PyString_FromStringAndSize(d.buf, d.len) finally: dstr_destroy(&d) @@ -94,20 +78,20 @@ cdef class Encode: cdef dstr d DCREATE(&d) try: - %PREFIX%_encode(&me.ctx, NULL, 0, &d) + _%PREFIX%_encode(&me.ctx, NULL, 0, &d) rc = PyString_FromStringAndSize(d.buf, d.len) finally: dstr_destroy(&d) return rc -def encode(text, *arg, **kw): - e = Encode(*arg, **kw) +def %PREFIX%_encode(text, *arg, **kw): + e = %CLASS%Encode(*arg, **kw) return e.encode(text) + e.done() -cdef class Decode: +cdef class %CLASS%Decode: cdef %PREFIX%_ctx ctx def __new__(me, *hunoz, **hukairz): - %PREFIX%_init(&me.ctx) + _%PREFIX%_init(&me.ctx) me.ctx.indent = NULL def decode(me, text): cdef void *p @@ -116,7 +100,7 @@ cdef class Decode: DCREATE(&d) try: PyObject_AsReadBuffer(text, &p, &len) - %PREFIX%_decode(&me.ctx, p, len, &d) + _%PREFIX%_decode(&me.ctx, p, len, &d) rc = PyString_FromStringAndSize(d.buf, d.len) finally: dstr_destroy(&d) @@ -125,14 +109,14 @@ cdef class Decode: cdef dstr d DCREATE(&d) try: - %PREFIX%_decode(&me.ctx, NULL, 0, &d) + _%PREFIX%_decode(&me.ctx, NULL, 0, &d) rc = PyString_FromStringAndSize(d.buf, d.len) finally: dstr_destroy(&d) return rc -def decode(text, *arg, **kw): - d = Decode(*arg, **kw) +def %PREFIX%_decode(text, *arg, **kw): + d = %CLASS%Decode(*arg, **kw) return e.decode(text) + d.done() #----- That's all, folks ----------------------------------------------------