chiark / gitweb /
codec.pyx.in: Cast arguments to `xfree'.
[mLib-python] / codec.pyx.in
index 60d971473785ed380af6fc7a3d160671a59a5911..2d54d0cdc5b52eb0e462d414345076232e8a1c27 100644 (file)
@@ -1,77 +1,57 @@
-# -*-pyrex-*-
-#
-# $Id$
-#
-# Generic encoder/decoder
-#
-# (c) 2005 Straylight/Edgeware
-#
+### -*-pyrex-*-
+###
+### Generic encoder/decoder
+###
+### (c) 2005 Straylight/Edgeware
+###
 
-#----- Licensing notice -----------------------------------------------------
-#
-# This file is part of the Python interface to mLib.
-#
-# mLib/Python is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-# 
-# mLib/Python is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with mLib/Python; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#----- 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)
+###----- Licensing notice ---------------------------------------------------
+###
+### This file is part of the Python interface to mLib.
+###
+### mLib/Python is free software; you can redistribute it and/or modify
+### it under the terms of the GNU General Public License as published by
+### the Free Software Foundation; either version 2 of the License, or
+### (at your option) any later version.
+###
+### mLib/Python is distributed in the hope that it will be useful,
+### but WITHOUT ANY WARRANTY; without even the implied warranty of
+### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+### GNU General Public License for more details.
+###
+### You should have received a copy of the GNU General Public License
+### along with mLib/Python; if not, write to the Free Software Foundation,
+### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 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)
+  def __cinit__(me, *hunoz, **hukairz):
+    _%PREFIX%_init(&me.ctx)
     me.ctx.indent = NULL
   def __init__(me, indent = '\n', maxline = 72):
     if me.ctx.indent:
-      xfree(me.ctx.indent)
+      xfree(<void *>me.ctx.indent)
     me.ctx.indent = xstrdup(indent)
     me.ctx.maxline = maxline
   def __dealloc__(me):
     if me.ctx.indent:
-      xfree(me.ctx.indent)    
+      xfree(<void *>me.ctx.indent)
   property indent:
     def __get__(me):
       return me.ctx.indent
     def __set__(me, indent):
       if me.ctx.indent:
-        xfree(me.ctx.indent)
+        xfree(<void *>me.ctx.indent)
       me.ctx.indent = xstrdup(indent)
   property maxline:
     def __get__(me):
@@ -80,12 +60,12 @@ cdef class Encode:
       me.ctx.maxline = maxline
   def encode(me, text):
     cdef void *p
-    cdef int len
+    cdef Py_ssize_t len
     cdef dstr d
     DCREATE(&d)
     try:
-      PyObject_AsReadBuffer(text, &p, &len)
-      %PREFIX%_encode(&me.ctx, p, len, &d)
+      PyObject_AsReadBuffer(text, <cvp *>&p, &len)
+      _%PREFIX%_encode(&me.ctx, p, len, &d)
       rc = PyString_FromStringAndSize(d.buf, d.len)
     finally:
       dstr_destroy(&d)
@@ -94,29 +74,29 @@ 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)
+  def __cinit__(me, *hunoz, **hukairz):
+    _%PREFIX%_init(&me.ctx)
     me.ctx.indent = NULL
   def decode(me, text):
     cdef void *p
-    cdef int len
+    cdef Py_ssize_t len
     cdef dstr d
     DCREATE(&d)
     try:
-      PyObject_AsReadBuffer(text, &p, &len)
-      %PREFIX%_decode(&me.ctx, p, len, &d)
+      PyObject_AsReadBuffer(text, <cvp *>&p, &len)
+      _%PREFIX%_decode(&me.ctx, p, len, &d)
       rc = PyString_FromStringAndSize(d.buf, d.len)
     finally:
       dstr_destroy(&d)
@@ -125,15 +105,15 @@ 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  
+    return rc
 
-def decode(text, *arg, **kw):
-  d = Decode(*arg, **kw)
-  return e.decode(text) + d.done()
+def %PREFIX%_decode(text, *arg, **kw):
+  d = %CLASS%Decode(*arg, **kw)
+  return d.decode(text) + d.done()
 
-#----- That's all, folks ----------------------------------------------------
+###----- That's all, folks --------------------------------------------------