mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-19 02:00:26 +02:00
(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.
This commit is contained in:
parent
1d0df896c9
commit
b590aceb96
6 changed files with 90 additions and 35 deletions
|
@ -67,7 +67,7 @@ CTYPE *
|
|||
SCM2CTYPES (SCM obj, CTYPE *data)
|
||||
{
|
||||
size_t len, i;
|
||||
UVEC_CTYPE *uvec_elements;
|
||||
const UVEC_CTYPE *uvec_elements;
|
||||
|
||||
obj = F(scm_any_to_,UVEC_TAG,vector) (obj);
|
||||
len = scm_c_uniform_vector_length (obj);
|
||||
|
@ -78,7 +78,7 @@ SCM2CTYPES (SCM obj, CTYPE *data)
|
|||
for (i = 0; i < len; i++)
|
||||
data[i] = uvec_elements[i];
|
||||
|
||||
scm_uniform_vector_release (obj);
|
||||
scm_uniform_vector_release_elements (obj);
|
||||
return data;
|
||||
}
|
||||
|
||||
|
@ -108,12 +108,12 @@ CTYPES2UVECT (const CTYPE *data, long n)
|
|||
UVEC_CTYPE *uvec_elements;
|
||||
|
||||
uvec = F(scm_make_,UVEC_TAG,vector) (scm_from_long (n), SCM_UNDEFINED);
|
||||
uvec_elements = F(scm_,UVEC_TAG,vector_elements) (uvec);
|
||||
uvec_elements = F(scm_,UVEC_TAG,vector_writable_elements) (uvec);
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
uvec_elements[i] = data[i];
|
||||
|
||||
scm_uniform_vector_release (uvec);
|
||||
scm_uniform_vector_release_writable_elements (uvec);
|
||||
return uvec;
|
||||
}
|
||||
|
||||
|
|
|
@ -284,7 +284,7 @@ scm2whatever (SCM obj, void *m, size_t size)
|
|||
if (m == NULL)
|
||||
return NULL;
|
||||
memcpy (m, scm_uniform_vector_elements (obj), n * size);
|
||||
scm_uniform_vector_release (obj);
|
||||
scm_uniform_vector_release_elements (obj);
|
||||
return m;
|
||||
}
|
||||
|
||||
|
|
|
@ -439,11 +439,11 @@ vector_scale_x (SCM v, double c)
|
|||
else
|
||||
{
|
||||
/* must be a f64vector. */
|
||||
double *elts = scm_f64vector_elements (v);
|
||||
double *elts = scm_f64vector_writable_elements (v);
|
||||
n = scm_c_uniform_vector_length (v);
|
||||
while (n-- > 0)
|
||||
elts[n] *= c;
|
||||
scm_uniform_vector_release (v);
|
||||
scm_uniform_vector_release_writable_elements (v);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -464,14 +464,14 @@ vector_sum_squares (SCM v)
|
|||
else
|
||||
{
|
||||
/* must be a f64vector. */
|
||||
double *elts = scm_f64vector_elements (v);
|
||||
const double *elts = scm_f64vector_elements (v);
|
||||
n = scm_c_uniform_vector_length (v);
|
||||
while (n-- > 0)
|
||||
{
|
||||
x = elts[n];
|
||||
sum += x * x;
|
||||
}
|
||||
scm_uniform_vector_release (v);
|
||||
scm_uniform_vector_release_elements (v);
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
@ -545,11 +545,11 @@ SCM_DEFINE (scm_random_normal_vector_x, "random:normal-vector!", 1, 1, 0,
|
|||
else
|
||||
{
|
||||
/* must be a f64vector. */
|
||||
double *elts = scm_f64vector_elements (v);
|
||||
double *elts = scm_f64vector_writable_elements (v);
|
||||
n = scm_c_uniform_vector_length (v);
|
||||
while (n-- > 0)
|
||||
elts[n] = scm_c_normal01 (SCM_RSTATE (state));
|
||||
scm_uniform_vector_release (v);
|
||||
scm_uniform_vector_release_writable_elements (v);
|
||||
}
|
||||
return SCM_UNSPECIFIED;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -41,10 +41,13 @@ SCM_API size_t scm_c_uniform_vector_size (SCM v);
|
|||
SCM_API SCM scm_c_uniform_vector_ref (SCM v, size_t idx);
|
||||
SCM_API void scm_c_uniform_vector_set_x (SCM v, size_t idx, SCM val);
|
||||
|
||||
SCM_API void *scm_uniform_vector_elements (SCM uvec);
|
||||
SCM_API size_t scm_uniform_vector_element_size (SCM uvec);
|
||||
SCM_API void scm_uniform_vector_release (SCM uvec);
|
||||
SCM_API void scm_frame_uniform_vector_release (SCM uvec);
|
||||
SCM_API const void *scm_uniform_vector_elements (SCM uvec);
|
||||
SCM_API void scm_uniform_vector_release_elements (SCM uvec);
|
||||
SCM_API void scm_frame_uniform_vector_release_elements (SCM uvec);
|
||||
SCM_API void *scm_uniform_vector_writable_elements (SCM uvec);
|
||||
SCM_API void scm_uniform_vector_release_writable_elements (SCM uvec);
|
||||
SCM_API void scm_frame_uniform_vector_release_writable_elements (SCM uvec);
|
||||
|
||||
/* Specific procedures.
|
||||
*/
|
||||
|
@ -59,7 +62,8 @@ SCM_API SCM scm_u8vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_u8vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_u8vector (SCM l);
|
||||
SCM_API SCM scm_any_to_u8vector (SCM obj);
|
||||
SCM_API scm_t_uint8 *scm_u8vector_elements (SCM uvec);
|
||||
SCM_API const scm_t_uint8 *scm_u8vector_elements (SCM uvec);
|
||||
SCM_API scm_t_uint8 *scm_u8vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_s8vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_s8vector (SCM n, SCM fill);
|
||||
|
@ -71,7 +75,8 @@ SCM_API SCM scm_s8vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_s8vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_s8vector (SCM l);
|
||||
SCM_API SCM scm_any_to_s8vector (SCM obj);
|
||||
SCM_API scm_t_int8 *scm_s8vector_elements (SCM uvec);
|
||||
SCM_API const scm_t_int8 *scm_s8vector_elements (SCM uvec);
|
||||
SCM_API scm_t_int8 *scm_s8vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_u16vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_u16vector (SCM n, SCM fill);
|
||||
|
@ -83,7 +88,8 @@ SCM_API SCM scm_u16vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_u16vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_u16vector (SCM l);
|
||||
SCM_API SCM scm_any_to_u16vector (SCM obj);
|
||||
SCM_API scm_t_uint16 *scm_u16vector_elements (SCM uvec);
|
||||
SCM_API const scm_t_uint16 *scm_u16vector_elements (SCM uvec);
|
||||
SCM_API scm_t_uint16 *scm_u16vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_s16vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_s16vector (SCM n, SCM fill);
|
||||
|
@ -95,7 +101,8 @@ SCM_API SCM scm_s16vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_s16vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_s16vector (SCM l);
|
||||
SCM_API SCM scm_any_to_s16vector (SCM obj);
|
||||
SCM_API scm_t_int16 *scm_s16vector_elements (SCM uvec);
|
||||
SCM_API const scm_t_int16 *scm_s16vector_elements (SCM uvec);
|
||||
SCM_API scm_t_int16 *scm_s16vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_u32vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_u32vector (SCM n, SCM fill);
|
||||
|
@ -107,7 +114,8 @@ SCM_API SCM scm_u32vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_u32vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_u32vector (SCM l);
|
||||
SCM_API SCM scm_any_to_u32vector (SCM obj);
|
||||
SCM_API scm_t_uint32 *scm_u32vector_elements (SCM uvec);
|
||||
SCM_API const scm_t_uint32 *scm_u32vector_elements (SCM uvec);
|
||||
SCM_API scm_t_uint32 *scm_u32vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_s32vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_s32vector (SCM n, SCM fill);
|
||||
|
@ -119,7 +127,8 @@ SCM_API SCM scm_s32vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_s32vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_s32vector (SCM l);
|
||||
SCM_API SCM scm_any_to_s32vector (SCM obj);
|
||||
SCM_API scm_t_int32 *scm_s32vector_elements (SCM uvec);
|
||||
SCM_API const scm_t_int32 *scm_s32vector_elements (SCM uvec);
|
||||
SCM_API scm_t_int32 *scm_s32vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_u64vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_u64vector (SCM n, SCM fill);
|
||||
|
@ -131,7 +140,8 @@ SCM_API SCM scm_u64vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_u64vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_u64vector (SCM l);
|
||||
SCM_API SCM scm_any_to_u64vector (SCM obj);
|
||||
SCM_API scm_t_uint64 *scm_u64vector_elements (SCM uvec);
|
||||
SCM_API const scm_t_uint64 *scm_u64vector_elements (SCM uvec);
|
||||
SCM_API scm_t_uint64 *scm_u64vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_s64vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_s64vector (SCM n, SCM fill);
|
||||
|
@ -143,7 +153,8 @@ SCM_API SCM scm_s64vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_s64vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_s64vector (SCM l);
|
||||
SCM_API SCM scm_any_to_s64vector (SCM obj);
|
||||
SCM_API scm_t_int64 *scm_s64vector_elements (SCM uvec);
|
||||
SCM_API const scm_t_int64 *scm_s64vector_elements (SCM uvec);
|
||||
SCM_API scm_t_int64 *scm_s64vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_f32vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_f32vector (SCM n, SCM fill);
|
||||
|
@ -155,7 +166,8 @@ SCM_API SCM scm_f32vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_f32vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_f32vector (SCM l);
|
||||
SCM_API SCM scm_any_to_f32vector (SCM obj);
|
||||
SCM_API float *scm_f32vector_elements (SCM uvec);
|
||||
SCM_API const float *scm_f32vector_elements (SCM uvec);
|
||||
SCM_API float *scm_f32vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_f64vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_f64vector (SCM n, SCM fill);
|
||||
|
@ -167,7 +179,8 @@ SCM_API SCM scm_f64vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_f64vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_f64vector (SCM l);
|
||||
SCM_API SCM scm_any_to_f64vector (SCM obj);
|
||||
SCM_API double *scm_f64vector_elements (SCM uvec);
|
||||
SCM_API const double *scm_f64vector_elements (SCM uvec);
|
||||
SCM_API double *scm_f64vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_c32vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_c32vector (SCM n, SCM fill);
|
||||
|
@ -179,7 +192,8 @@ SCM_API SCM scm_c32vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_c32vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_c32vector (SCM l);
|
||||
SCM_API SCM scm_any_to_c32vector (SCM obj);
|
||||
SCM_API float *scm_c32vector_elements (SCM uvec);
|
||||
SCM_API const float *scm_c32vector_elements (SCM uvec);
|
||||
SCM_API float *scm_c32vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_c64vector_p (SCM obj);
|
||||
SCM_API SCM scm_make_c64vector (SCM n, SCM fill);
|
||||
|
@ -191,7 +205,8 @@ SCM_API SCM scm_c64vector_set_x (SCM uvec, SCM index, SCM value);
|
|||
SCM_API SCM scm_c64vector_to_list (SCM uvec);
|
||||
SCM_API SCM scm_list_to_c64vector (SCM l);
|
||||
SCM_API SCM scm_any_to_c64vector (SCM obj);
|
||||
SCM_API double *scm_c64vector_elements (SCM uvec);
|
||||
SCM_API const double *scm_c64vector_elements (SCM uvec);
|
||||
SCM_API double *scm_c64vector_writable_elements (SCM uvec);
|
||||
|
||||
SCM_API SCM scm_i_generalized_vector_creator (SCM uvec);
|
||||
SCM_API const char *scm_i_uniform_vector_tag (SCM uvec);
|
||||
|
|
|
@ -138,8 +138,15 @@ SCM_DEFINE (F(scm_any_to_,TAG,vector), "any->"S(TAG)"vector", 1, 0, 0,
|
|||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
CTYPE *
|
||||
const CTYPE *
|
||||
F(scm_,TAG,vector_elements) (SCM obj)
|
||||
{
|
||||
uvec_assert (TYPE, obj);
|
||||
return (const CTYPE *)SCM_UVEC_BASE (obj);
|
||||
}
|
||||
|
||||
CTYPE *
|
||||
F(scm_,TAG,vector_writable_elements) (SCM obj)
|
||||
{
|
||||
uvec_assert (TYPE, obj);
|
||||
return (CTYPE *)SCM_UVEC_BASE (obj);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue