Source

cy-cxxfwk / cy / cyfwk.pyx

Diff from to

File cy/cyfwk.pyx

 #cimport cpython.cobject as cpy_cobj
 
 cdef class AlgBase:
-    cdef void run(self):
+    cdef CyAlgBase* alg
+    def __init__(self):
+        print("--> AlgBase.init")
+        self.alg = new CyAlgBase(
+            <cpy_ref.PyObject*>self,
+            <RunFct>cy_run_fct)
+    def run(self):
+        self.alg.run()
+        pass
+    def run_impl(self):
         pass
 
 cdef void cy_run_fct(void *ptr):
     cdef AlgBase alg = <AlgBase>(ptr)
     print("--> cy_run_fct...")
-    alg.run()
+    alg.run_impl()
     print("--> cy_run_fct...[done]")
 
-cdef class myalg(AlgBase):
+cdef class MyAlg(AlgBase):
     cdef int i
     def __init__(self, i=-1):
         self.i = i
+        AlgBase.__init__(self)
         print("--- self.i: %i" % self.i)
-    cdef void run(self):
+    cdef void run_impl(self):
         print("--- myalg.run => %i" % self.i)
 
 cdef public api IAlg* cy_create_alg():
-    cdef AlgBase cyalg = myalg(42)
-    cdef CyAlgBase* alg = new CyAlgBase(
-        <cpy_ref.PyObject*>cyalg,
-        <RunFct>cy_run_fct)
-    return <IAlg*>(alg)
-
-def create_alg():
-    print "==="
-    cy_create_alg()
-    print "==="
+    cdef AlgBase cyalg = MyAlg(42)
+    return <IAlg*>(cyalg.alg)
 
 print("==> cyfwk module imported")