diff options
author | Andy Wingo <wingo@pobox.com> | 2014-04-28 11:27:31 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2014-04-28 13:03:58 +0200 |
commit | 4b8ce7c75283efa6ac0ce24fc6e1aba99b47944b (patch) | |
tree | e0072c47ea88d57f0b47652e7a447d566d9d983e /libguile/foreign-object.h | |
parent | 682a55d59bff1b79ecce17b2344896efce390565 (diff) | |
download | guile-4b8ce7c75283efa6ac0ce24fc6e1aba99b47944b.tar.gz |
Add more foreign object interfaces
* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_make_foreign_object_1)
(scm_make_foreign_object_2, scm_make_foreign_object_3)
(scm_make_foreign_object_n): Change to take void * arguments, and to
add a comment to the header indicating that these are convenience
constructors.
* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_foreign_object_unsigned_ref)
(scm_foreign_object_unsigned_set_x): New functions, equivalent to the
old scm_foreign_object_ref and scm_foreign_object_set_x.
* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_foreign_object_signed_ref)
(scm_foreign_object_signed_set_x): New functions taking
scm_t_signed_bits.
* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_foreign_object_ref)
(scm_foreign_object_set_x): New functions that take void*.
Diffstat (limited to 'libguile/foreign-object.h')
-rw-r--r-- | libguile/foreign-object.h | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/libguile/foreign-object.h b/libguile/foreign-object.h index 3b7784eb6..806b7eddb 100644 --- a/libguile/foreign-object.h +++ b/libguile/foreign-object.h @@ -32,16 +32,29 @@ SCM_API SCM scm_make_foreign_object_type (SCM name, SCM slot_names, SCM_API void scm_assert_foreign_object_type (SCM type, SCM val); +/* All objects of a given foreign object type have the same number of + fields. When constructing a foreign object, you don't have to pass + initializers for all of the fields; it is always OK to call + scm_make_foreign_object_0 and initialize the fields by hand with + scm_foreign_object_set_x or other setters. The initial value of + fields that haven't been explicitly given a value is 0. */ SCM_API SCM scm_make_foreign_object_0 (SCM type); -SCM_API SCM scm_make_foreign_object_1 (SCM type, scm_t_bits val0); -SCM_API SCM scm_make_foreign_object_2 (SCM type, scm_t_bits val0, - scm_t_bits val1); -SCM_API SCM scm_make_foreign_object_3 (SCM type, scm_t_bits val0, - scm_t_bits val1, scm_t_bits val2); -SCM_API SCM scm_make_foreign_object_n (SCM type, size_t n, scm_t_bits vals[]); - -SCM_API scm_t_bits scm_foreign_object_ref (SCM obj, size_t n); -SCM_API void scm_foreign_object_set_x (SCM obj, size_t n, scm_t_bits val); +SCM_API SCM scm_make_foreign_object_1 (SCM type, void *val0); +SCM_API SCM scm_make_foreign_object_2 (SCM type, void *val0, void *val1); +SCM_API SCM scm_make_foreign_object_3 (SCM type, void *val0, void *val1, + void *val2); +SCM_API SCM scm_make_foreign_object_n (SCM type, size_t n, void *vals[]); + +SCM_API void* scm_foreign_object_ref (SCM obj, size_t n); +SCM_API void scm_foreign_object_set_x (SCM obj, size_t n, void *val); + +SCM_API scm_t_bits scm_foreign_object_unsigned_ref (SCM obj, size_t n); +SCM_API void scm_foreign_object_unsigned_set_x (SCM obj, size_t n, + scm_t_bits val); + +SCM_API scm_t_signed_bits scm_foreign_object_signed_ref (SCM obj, size_t n); +SCM_API void scm_foreign_object_signed_set_x (SCM obj, size_t n, + scm_t_signed_bits val); SCM_INTERNAL void scm_register_foreign_object (void); |