diff options
Diffstat (limited to 'src/guile_api.cpp')
| -rw-r--r-- | src/guile_api.cpp | 49 |
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; } |
