Author: ArcRiley Date: 2009-01-19 00:42:57 -0500 (Mon, 19 Jan 2009) New Revision: 1499
Modified: trunk/concordance/include/concordance.sockets.h trunk/concordance/src/__init__.py trunk/concordance/src/sockets/Client.c trunk/concordance/src/sockets/Socket.c Log: more inheritance work Modified: trunk/concordance/include/concordance.sockets.h =================================================================== --- trunk/concordance/include/concordance.sockets.h 2009-01-19 01:45:45 UTC (rev 1498) +++ trunk/concordance/include/concordance.sockets.h 2009-01-19 05:42:57 UTC (rev 1499) @@ -26,8 +26,9 @@ /* concordance.sockets.Socket definition */ -PyTypeObject socketsSocket_Type; - +PyTypeObject socketsSocket_Type; +PyObject* socketsSocket_new (PyTypeObject*, PyObject*, PyObject*); +void socketsSocket_dealloc (PyObject*); typedef struct { PyObject_HEAD PyObject* module; /* reference to our own module */ @@ -39,9 +40,10 @@ } socketsSocket_Object; -/* concordance.sockets.Socket definition */ -PyTypeObject socketsClient_Type; - +/* concordance.sockets.Client definition */ +PyTypeObject socketsClient_Type; +PyObject* socketsClient_new (PyTypeObject*, PyObject*, PyObject*); +void socketsClient_dealloc (PyObject*); typedef struct { PyObject_HEAD PyObject* module; /* reference to our own module */ Modified: trunk/concordance/src/__init__.py =================================================================== --- trunk/concordance/src/__init__.py 2009-01-19 01:45:45 UTC (rev 1498) +++ trunk/concordance/src/__init__.py 2009-01-19 05:42:57 UTC (rev 1499) @@ -24,5 +24,6 @@ from concordance import _core # Workaround for setuptools from concordance import services +from concordance import sockets del(_core) # Clean up namespace Modified: trunk/concordance/src/sockets/Client.c =================================================================== --- trunk/concordance/src/sockets/Client.c 2009-01-19 01:45:45 UTC (rev 1498) +++ trunk/concordance/src/sockets/Client.c 2009-01-19 05:42:57 UTC (rev 1499) @@ -26,39 +26,15 @@ static char socketsClient_Doc[] = "Test"; - static PyObject* + PyObject* socketsClient_new(PyTypeObject* type, PyObject* args, PyObject* kwds) { /*\ cdef : \*/ socketsClient_Object* self; - /* allocate self */ - self = (socketsClient_Object*) type->tp_alloc(type, 0); + /* first inherit base type */ + self = (socketsClient_Object*) socketsSocket_new(type, args, kwds); - /* start with closed socket */ - self->sock = -1; - - /* Get a reference to our local module - - This is to keep our module alive as long as this instance. - - PyObject* PyImport_ImportModule (const char *name); - */ - self->module = PyImport_ImportModule("concordance.sockets"); - - /* Get context from global state - - I'm sorry for this. Here's the natural language for this block: - 1) get the state of sockets module - a PyObject** to concordance._core - 2) dereference the PyObject** to PyObject* - 3) get the state of _core - a concordGlobals** - 4) dereference concordGlobals** to concordGlobals* - 5) copy the GMainContext* context from the struct to self->context - - void* PyModule_GetState (PyObject*); - */ - self->context = (*(concordGlobals**) PyModule_GetState( - *(PyObject**) PyModule_GetState(self->module)))->context; - + /* return self */ return (PyObject*) self; } @@ -72,17 +48,13 @@ } - static void - socketsClient_dealloc(socketsClient_Object* self) { - /* close the socket if open */ - if (self->sock > -1) - close(self->sock); + void + socketsClient_dealloc(PyObject* s) { /*\ + cdef : \*/ + socketsClient_Object* self = (socketsClient_Object*) s; - /* decref our module handle, which may in-turn decref _core */ - if (self->module) - Py_DECREF(self->module); - - PyObject_Del(self); + /* lastly dealloc base type */ + socketsSocket_dealloc(s); } @@ -113,7 +85,7 @@ PyTypeObject socketsClient_Type = { PyVarObject_HEAD_INIT(NULL, 0) - "concordance.sockets.Socket", /*tp_name*/ + "concordance.sockets.Client", /*tp_name*/ sizeof(socketsClient_Object), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor) socketsClient_dealloc, /*tp_dealloc*/ @@ -142,7 +114,7 @@ socketsClient_Methods, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ - 0, /*tp_base*/ + &socketsSocket_Type, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ Modified: trunk/concordance/src/sockets/Socket.c =================================================================== --- trunk/concordance/src/sockets/Socket.c 2009-01-19 01:45:45 UTC (rev 1498) +++ trunk/concordance/src/sockets/Socket.c 2009-01-19 05:42:57 UTC (rev 1499) @@ -26,14 +26,14 @@ static char socketsSocket_Doc[] = "Test"; - static PyObject* + PyObject* socketsSocket_new(PyTypeObject* type, PyObject* args, PyObject* kwds) { /*\ cdef : \*/ - socketsSocket_Object* self; + socketsSocket_Object* self; + + /* first inherit base type */ + self = (socketsSocket_Object*) PyType_GenericNew(type, args, kwds); - /* allocate self */ - self = (socketsSocket_Object*) type->tp_alloc(type, 0); - /* start with closed socket */ self->sock = -1; @@ -59,6 +59,7 @@ self->context = (*(concordGlobals**) PyModule_GetState( *(PyObject**) PyModule_GetState(self->module)))->context; + /* return self */ return (PyObject*) self; } @@ -72,8 +73,11 @@ } - static void - socketsSocket_dealloc(socketsSocket_Object* self) { + void + socketsSocket_dealloc(PyObject* s) { /*\ + cdef : \*/ + socketsSocket_Object* self = (socketsSocket_Object*) s; + /* close the socket if open */ if (self->sock > -1) close(self->sock); @@ -82,7 +86,8 @@ if (self->module) Py_DECREF(self->module); - PyObject_Del(self); + /* lastly dealloc base type */ + PyObject_Del(s); } @@ -149,7 +154,7 @@ 0, /*tp_dictoffset*/ socketsSocket_init, /*tp_init*/ 0, /*tp_alloc*/ - socketsSocket_new, /*tp_new*/ + (newfunc) PyType_GenericNew, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ }; _______________________________________________ PySoy-SVN mailing list PySoy-SVN@pysoy.org http://www.pysoy.org/mailman/listinfo/pysoy-svn