diff options
Diffstat (limited to 'Objects/cobject.c')
-rw-r--r-- | Objects/cobject.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/Objects/cobject.c b/Objects/cobject.c new file mode 100644 index 0000000..f14a4d9 --- /dev/null +++ b/Objects/cobject.c @@ -0,0 +1,100 @@ +/*********************************************************** +Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, +The Netherlands. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +******************************************************************/ + +/* Wrap void* pointers to be passed between C modules */ + +#include "Python.h" + + +/* Declarations for objects of type PyCObject */ + +typedef struct { + PyObject_HEAD + void *cobject; + void (*destructor)(void *); +} PyCObject; + +PyObject * +PyCObject_FromVoidPtr(cobj, destr) + void *cobj; + void (*destr)(void *); +{ + PyCObject *self; + + self = PyObject_NEW(PyCObject, &PyCObject_Type); + if (self == NULL) + return NULL; + self->cobject=cobj; + self->destructor=destr; + return (PyObject *)self; +} + +void * +PyCObject_AsVoidPtr(self) + PyObject *self; +{ + return ((PyCObject *)self)->cobject; +} + +static void +PyCObject_dealloc(self) + PyCObject *self; +{ + if(self->destructor) (self->destructor)(self->cobject); + PyMem_DEL(self); +} + +static char PyCObject_Type__doc__[] = +"C objects to be exported from one extension module to another\n" +"\n" +"C objects are used for communication between extension modules. They\n" +"provide a way for an extension module to export a C interface to other\n" +"extension modules, so that extension modules can use the Python import\n" +"mechanism to link to one another.\n" +; + +PyTypeObject PyCObject_Type = { + PyObject_HEAD_INIT(&PyType_Type) + 0, /*ob_size*/ + "PyCObject", /*tp_name*/ + sizeof(PyCObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + (destructor)PyCObject_dealloc, /*tp_dealloc*/ + (printfunc)0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + (setattrfunc)0, /*tp_setattr*/ + (cmpfunc)0, /*tp_compare*/ + (reprfunc)0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + (hashfunc)0, /*tp_hash*/ + (ternaryfunc)0, /*tp_call*/ + (reprfunc)0, /*tp_str*/ + + /* Space for future expansion */ + 0L,0L,0L,0L, + PyCObject_Type__doc__ /* Documentation string */ +}; |