mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-13 23:20:32 +02:00
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*.
This commit is contained in:
parent
682a55d59b
commit
4b8ce7c752
3 changed files with 62 additions and 23 deletions
|
@ -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 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 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 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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue