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

Reply via email to