Source

cy-cxxfwk / cy / cyfwk.pyx

Full commit
cimport cyfwk
cimport cpython.ref as cpy_ref
#cimport cpython.cobject as cpy_cobj

cdef class AlgBase:
    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_impl()
    print("--> cy_run_fct...[done]")

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_impl(self):
        print("--- myalg.run => %i" % self.i)

cdef public api IAlg* cy_create_alg():
    cdef AlgBase cyalg = MyAlg(42)
    return <IAlg*>(cyalg.alg)

print("==> cyfwk module imported")