about summary refs log tree commit diff
path: root/src/guile_api.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/guile_api.cpp')
-rw-r--r--src/guile_api.cpp49
1 files changed, 40 insertions, 9 deletions
diff --git a/src/guile_api.cpp b/src/guile_api.cpp
index 21eb9ff..e3ef482 100644
--- a/src/guile_api.cpp
+++ b/src/guile_api.cpp
@@ -1,13 +1,44 @@
 #include <guile_api.h>
 
-void global_start_guile() {
-    scm_init_guile();
-}
+namespace gemmaguile {
+
+    void global_start_guile() {
+        scm_init_guile();
+    }
+
+    string global_guile_version() {
+        SCM version_scm = scm_version();
+        char* c_str = scm_to_utf8_string(version_scm);
+        string version_str(c_str);
+        free(c_str);  // Must free the allocated memory
+
+        return version_str;
+    }
+
+    SCM make_floats()
+    {
+        return scm_call_0(scm_c_public_ref("example", "make-floats"));
+    }
+
+    void use_floats()
+    {
+        SCM vec = make_floats();
+
+        scm_t_array_handle handle;
+        size_t len;
+        ssize_t inc;
+        const SCM *elt;
+
+        const double *ny = scm_f64vector_elements (vec,&handle,&len,&inc);
+        for (size_t i = 0; i < len; i++) {
+            printf("elem %zu = %f\n", i, ny[i]);
+        }
+        scm_array_handle_release (&handle);
+    }
+
+    void start_test() {
+        scm_c_primitive_load("src/guile/examples.scm");
+        use_floats();
+    }
 
-string global_guile_version() {
-    SCM version_scm = scm_version();
-    char* c_str = scm_to_utf8_string(version_scm);
-    string version_str(c_str);
-    free(c_str);  // Must free the allocated memory
-    return version_str;
 }