summaryrefslogtreecommitdiff
path: root/libguile/srfi-4.c
diff options
context:
space:
mode:
authorMarius Vollmer <mvo@zagadka.de>2004-12-27 02:10:14 +0000
committerMarius Vollmer <mvo@zagadka.de>2004-12-27 02:10:14 +0000
commitb590aceb96a8a483b0938e5b2fbe7c94fe9e7a1e (patch)
treebccd3db8aaa254187e3a681b230b9dc0deb27788 /libguile/srfi-4.c
parent1d0df896c97b3f876700206a4b5e2d8d452cece4 (diff)
downloadguile-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.c49
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;