summaryrefslogtreecommitdiff
path: root/demo
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2012-07-17 22:42:54 +0200
committerArmin Rigo <arigo@tunes.org>2012-07-17 22:42:54 +0200
commitd7ff021d2a04f97a2cb15be6177e1e9c68c8d0bb (patch)
treefaaa3c88e72d7f743fa2cbbe920f3134273b0a59 /demo
parentd65d9533d1caf4a192a9f73f88aa14ed6c9397c3 (diff)
downloadcffi-d7ff021d2a04f97a2cb15be6177e1e9c68c8d0bb.tar.gz
A demo of GMP.
Diffstat (limited to 'demo')
-rw-r--r--demo/gmp.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/demo/gmp.py b/demo/gmp.py
new file mode 100644
index 0000000..692ac37
--- /dev/null
+++ b/demo/gmp.py
@@ -0,0 +1,30 @@
+import sys
+import cffi
+
+ffi = cffi.FFI()
+
+ffi.cdef("""
+
+ typedef struct { ...; } MP_INT;
+ typedef MP_INT mpz_t[1];
+
+ int mpz_init_set_str (MP_INT *dest_integer, char *src_cstring, int base);
+ void mpz_add (MP_INT *sum, MP_INT *addend1, MP_INT *addend2);
+ char * mpz_get_str (char *string, int base, MP_INT *integer);
+
+""")
+
+lib = ffi.verify("#include <gmp.h>",
+ libraries=['gmp', 'm'])
+
+# ____________________________________________________________
+
+a = ffi.new("mpz_t")
+b = ffi.new("mpz_t")
+
+lib.mpz_init_set_str(a, sys.argv[1], 10) # Assume decimal integers
+lib.mpz_init_set_str(b, sys.argv[2], 10) # Assume decimal integers
+lib.mpz_add(a, a, b) # a=a+b
+
+s = lib.mpz_get_str(ffi.NULL, 10, a)
+print str(s)