diff options
author | Marius Vollmer <mvo@zagadka.de> | 2004-12-27 02:10:14 +0000 |
---|---|---|
committer | Marius Vollmer <mvo@zagadka.de> | 2004-12-27 02:10:14 +0000 |
commit | b590aceb96a8a483b0938e5b2fbe7c94fe9e7a1e (patch) | |
tree | bccd3db8aaa254187e3a681b230b9dc0deb27788 /libguile/srfi-4.c | |
parent | 1d0df896c97b3f876700206a4b5e2d8d452cece4 (diff) | |
download | guile-b590aceb96a8a483b0938e5b2fbe7c94fe9e7a1e.tar.gz |
(scm_uniform_vector_elements,
scm_u8vector_elements, etc): Made return value "const".
(scm_uniform_vector_writable_elements,
scm_u8vector_writable_elements, etc): New.
(scm_uniform_vector_release, scm_uniform_vector_release_elements):
Renamed former to latter. Added explicit call to
scm_remember_upto_here_1.
(scm_frame_uniform_vector_release,
scm_frame_uniform_vector_release_elements): Renamed former to latter.
(scm_uniform_vector_release_writable_elements,
scm_frame_uniform_vector_release_writable_elements): New. Takes
crown of longest identifier yet.
Changed all uses as required by the changes above.
Diffstat (limited to 'libguile/srfi-4.c')
-rw-r--r-- | libguile/srfi-4.c | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/libguile/srfi-4.c b/libguile/srfi-4.c index f58940a60..f3a75c78c 100644 --- a/libguile/srfi-4.c +++ b/libguile/srfi-4.c @@ -596,7 +596,7 @@ SCM_DEFINE (scm_uniform_vector_to_list, "uniform-vector->list", 1, 0, 0, } #undef FUNC_NAME -void * +const void * scm_uniform_vector_elements (SCM uvec) { if (scm_is_uniform_vector (uvec)) @@ -606,7 +606,7 @@ scm_uniform_vector_elements (SCM uvec) } void -scm_uniform_vector_release (SCM uvec) +scm_uniform_vector_release_elements (SCM uvec) { /* Nothing to do right now, but this function might come in handy when uniform vectors need to be locked when giving away a pointer @@ -615,15 +615,48 @@ scm_uniform_vector_release (SCM uvec) Also, a call to scm_uniform_vector_release acts like scm_remember_upto_here, which is needed in any case. */ + + scm_remember_upto_here_1 (uvec); } void -scm_frame_uniform_vector_release (SCM uvec) +scm_frame_uniform_vector_release_elements (SCM uvec) { - scm_frame_unwind_handler_with_scm (scm_uniform_vector_release, uvec, + scm_frame_unwind_handler_with_scm (scm_uniform_vector_release_elements, uvec, SCM_F_WIND_EXPLICITLY); } +void * +scm_uniform_vector_writable_elements (SCM uvec) +{ + if (scm_is_uniform_vector (uvec)) + return SCM_UVEC_BASE (uvec); + else + scm_wrong_type_arg_msg (NULL, 0, uvec, "uniform vector"); +} + +void +scm_uniform_vector_release_writable_elements (SCM uvec) +{ + /* Nothing to do right now, but this function might come in handy + when uniform vectors need to be locked when giving away a pointer + to their elements. + + Also, a call to scm_uniform_vector_release acts like + scm_remember_upto_here, which is needed in any case. + */ + + scm_remember_upto_here_1 (uvec); +} + +void +scm_frame_uniform_vector_release_writable_elements (SCM uvec) +{ + scm_frame_unwind_handler_with_scm + (scm_uniform_vector_release_writable_elements, uvec, + SCM_F_WIND_EXPLICITLY); +} + size_t scm_uniform_vector_element_size (SCM uvec) { @@ -690,8 +723,8 @@ SCM_DEFINE (scm_uniform_vector_read_x, "uniform-vector-read!", 1, 3, 0, vlen = scm_c_uniform_vector_length (uvec); sz = scm_uniform_vector_element_size (uvec); - base = scm_uniform_vector_elements (uvec); - scm_frame_uniform_vector_release (uvec); + base = scm_uniform_vector_writable_elements (uvec); + scm_frame_uniform_vector_release_writable_elements (uvec); cstart = 0; cend = vlen; @@ -782,7 +815,7 @@ SCM_DEFINE (scm_uniform_vector_write, "uniform-vector-write", 1, 3, 0, size_t vlen, sz, ans; size_t cstart, cend; size_t amount, off; - void *base; + const void *base; port_or_fd = SCM_COERCE_OUTPORT (port_or_fd); @@ -798,7 +831,7 @@ SCM_DEFINE (scm_uniform_vector_write, "uniform-vector-write", 1, 3, 0, vlen = scm_c_generalized_vector_length (uvec); sz = scm_uniform_vector_element_size (uvec); base = scm_uniform_vector_elements (uvec); - scm_frame_uniform_vector_release (uvec); + scm_frame_uniform_vector_release_elements (uvec); cstart = 0; cend = vlen; |