static int my_algo(int n) { return f1(3, n, n+1, n+2) + f1(1, &n) + f1(2, 12.3, 45.6); } """) ffi.compile() from _extern_python_cffi import ffi, lib @ffi.def_extern() def f(n, va): if n == 3: x = lib.fetch_int(va) y = lib.fetch_int(va) z = lib.fetch_int(va) print (x, y, z) elif n == 1: ptr = lib.fetch_ptr(va) print 'ptr to:', ffi.cast("int *", ptr)[0] elif n == 2: x = lib.fetch_double(va) y = lib.fetch_double(va) print (x, y) else: raise AssertionError(n) return 14 print lib.my_algo(10)
} """, ) ffi.compile() from _extern_python_cffi import ffi, lib @ffi.def_extern() def f(n, va): if n == 3: x = lib.fetch_int(va) y = lib.fetch_int(va) z = lib.fetch_int(va) print (x, y, z) elif n == 1: ptr = lib.fetch_ptr(va) print "ptr to:", ffi.cast("int *", ptr)[0] elif n == 2: x = lib.fetch_double(va) y = lib.fetch_double(va) print (x, y) else: raise AssertionError(n) return 14 print lib.my_algo(10)
import cffi ffi = cffi.FFI() ffi.cdef("""int my_algo(int); extern "Python" int f(int);""") ffi.set_source("_extern_python_cffi", """ static int f(int); static int my_algo(int n) { int i, sum = 0; for (i = 0; i < n; i++) sum += f(i); return sum; } """) ffi.compile() from _extern_python_cffi import ffi, lib @ffi.def_extern() def f(n): return n * n assert lib.my_algo(10) == 0+1+4+9+16+25+36+49+64+81