mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 21:10:27 +02:00
Don't use array handles in scm_c_array_rank
* libguile/arrays.c (scm_c_array_rank): moved from libguile/generalized-arrays.c. Don't use array handles, but follow the same type check sequence as the other array functions (shared-array-root, etc). (scm_array_rank): moved from libguile/generalized-arrays.h. * libguile/arrays.h: move prototypes here.
This commit is contained in:
parent
3aafc2c857
commit
ed6c65507a
4 changed files with 35 additions and 35 deletions
|
@ -64,6 +64,27 @@
|
||||||
(SCM_SET_CELL_WORD_0 ((x), SCM_CELL_WORD_0 (x) & ~(SCM_I_ARRAY_FLAG_CONTIGUOUS << 16)))
|
(SCM_SET_CELL_WORD_0 ((x), SCM_CELL_WORD_0 (x) & ~(SCM_I_ARRAY_FLAG_CONTIGUOUS << 16)))
|
||||||
|
|
||||||
|
|
||||||
|
size_t
|
||||||
|
scm_c_array_rank (SCM array)
|
||||||
|
{
|
||||||
|
if (SCM_I_ARRAYP (array))
|
||||||
|
return SCM_I_ARRAY_NDIM (array);
|
||||||
|
else if (scm_is_array (array))
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
scm_wrong_type_arg_msg ("array-rank", SCM_ARG1, array, "array");
|
||||||
|
}
|
||||||
|
|
||||||
|
SCM_DEFINE (scm_array_rank, "array-rank", 1, 0, 0,
|
||||||
|
(SCM array),
|
||||||
|
"Return the number of dimensions of the array @var{array.}\n")
|
||||||
|
#define FUNC_NAME s_scm_array_rank
|
||||||
|
{
|
||||||
|
return scm_from_size_t (scm_c_array_rank (array));
|
||||||
|
}
|
||||||
|
#undef FUNC_NAME
|
||||||
|
|
||||||
|
|
||||||
SCM_DEFINE (scm_shared_array_root, "shared-array-root", 1, 0, 0,
|
SCM_DEFINE (scm_shared_array_root, "shared-array-root", 1, 0, 0,
|
||||||
(SCM ra),
|
(SCM ra),
|
||||||
"Return the root vector of a shared array.")
|
"Return the root vector of a shared array.")
|
||||||
|
|
|
@ -56,6 +56,9 @@ SCM_API SCM scm_array_amend_x (SCM ra, SCM b, SCM indices);
|
||||||
SCM_API SCM scm_list_to_array (SCM ndim, SCM lst);
|
SCM_API SCM scm_list_to_array (SCM ndim, SCM lst);
|
||||||
SCM_API SCM scm_list_to_typed_array (SCM type, SCM ndim, SCM lst);
|
SCM_API SCM scm_list_to_typed_array (SCM type, SCM ndim, SCM lst);
|
||||||
|
|
||||||
|
SCM_API size_t scm_c_array_rank (SCM ra);
|
||||||
|
SCM_API SCM scm_array_rank (SCM ra);
|
||||||
|
|
||||||
/* internal. */
|
/* internal. */
|
||||||
|
|
||||||
#define SCM_I_ARRAY_FLAG_CONTIGUOUS (1 << 0) /* currently unused */
|
#define SCM_I_ARRAY_FLAG_CONTIGUOUS (1 << 0) /* currently unused */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Copyright (C) 1995,1996,1997,1998,2000,2001,2002,2003,2004, 2005, 2006, 2009, 2010, 2013, 2014 Free Software Foundation, Inc.
|
/* Copyright (C) 1995,1996,1997,1998,2000,2001,2002,2003,2004, 2005, 2006, 2009, 2010, 2013, 2014 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
* as published by the Free Software Foundation; either version 3 of
|
* as published by the Free Software Foundation; either version 3 of
|
||||||
|
@ -104,27 +104,6 @@ SCM_DEFINE (scm_typed_array_p, "typed-array?", 2, 0, 0,
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
||||||
size_t
|
|
||||||
scm_c_array_rank (SCM array)
|
|
||||||
{
|
|
||||||
scm_t_array_handle handle;
|
|
||||||
size_t res;
|
|
||||||
|
|
||||||
scm_array_get_handle (array, &handle);
|
|
||||||
res = scm_array_handle_rank (&handle);
|
|
||||||
scm_array_handle_release (&handle);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
SCM_DEFINE (scm_array_rank, "array-rank", 1, 0, 0,
|
|
||||||
(SCM array),
|
|
||||||
"Return the number of dimensions of the array @var{array.}\n")
|
|
||||||
#define FUNC_NAME s_scm_array_rank
|
|
||||||
{
|
|
||||||
return scm_from_size_t (scm_c_array_rank (array));
|
|
||||||
}
|
|
||||||
#undef FUNC_NAME
|
|
||||||
|
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
scm_c_array_length (SCM array)
|
scm_c_array_length (SCM array)
|
||||||
|
@ -144,7 +123,7 @@ scm_c_array_length (SCM array)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
SCM_DEFINE (scm_array_length, "array-length", 1, 0, 0,
|
SCM_DEFINE (scm_array_length, "array-length", 1, 0, 0,
|
||||||
(SCM array),
|
(SCM array),
|
||||||
"Return the length of an array: its first dimension.\n"
|
"Return the length of an array: its first dimension.\n"
|
||||||
"It is an error to ask for the length of an array of rank 0.")
|
"It is an error to ask for the length of an array of rank 0.")
|
||||||
|
@ -155,7 +134,7 @@ SCM_DEFINE (scm_array_length, "array-length", 1, 0, 0,
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
||||||
|
|
||||||
SCM_DEFINE (scm_array_dimensions, "array-dimensions", 1, 0, 0,
|
SCM_DEFINE (scm_array_dimensions, "array-dimensions", 1, 0, 0,
|
||||||
(SCM ra),
|
(SCM ra),
|
||||||
"@code{array-dimensions} is similar to @code{array-shape} but replaces\n"
|
"@code{array-dimensions} is similar to @code{array-shape} but replaces\n"
|
||||||
"elements with a @code{0} minimum with one greater than the maximum. So:\n"
|
"elements with a @code{0} minimum with one greater than the maximum. So:\n"
|
||||||
|
@ -168,7 +147,7 @@ SCM_DEFINE (scm_array_dimensions, "array-dimensions", 1, 0, 0,
|
||||||
scm_t_array_dim *s;
|
scm_t_array_dim *s;
|
||||||
SCM res = SCM_EOL;
|
SCM res = SCM_EOL;
|
||||||
size_t k;
|
size_t k;
|
||||||
|
|
||||||
scm_array_get_handle (ra, &handle);
|
scm_array_get_handle (ra, &handle);
|
||||||
s = scm_array_handle_dims (&handle);
|
s = scm_array_handle_dims (&handle);
|
||||||
k = scm_array_handle_rank (&handle);
|
k = scm_array_handle_rank (&handle);
|
||||||
|
@ -186,7 +165,7 @@ SCM_DEFINE (scm_array_dimensions, "array-dimensions", 1, 0, 0,
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
||||||
SCM_DEFINE (scm_array_type, "array-type", 1, 0, 0,
|
SCM_DEFINE (scm_array_type, "array-type", 1, 0, 0,
|
||||||
(SCM ra),
|
(SCM ra),
|
||||||
"")
|
"")
|
||||||
#define FUNC_NAME s_scm_array_type
|
#define FUNC_NAME s_scm_array_type
|
||||||
|
@ -197,7 +176,7 @@ SCM_DEFINE (scm_array_type, "array-type", 1, 0, 0,
|
||||||
scm_array_get_handle (ra, &h);
|
scm_array_get_handle (ra, &h);
|
||||||
type = scm_array_handle_element_type (&h);
|
type = scm_array_handle_element_type (&h);
|
||||||
scm_array_handle_release (&h);
|
scm_array_handle_release (&h);
|
||||||
|
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
@ -220,7 +199,7 @@ SCM_DEFINE (scm_array_type_code,
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
||||||
SCM_DEFINE (scm_array_in_bounds_p, "array-in-bounds?", 1, 0, 1,
|
SCM_DEFINE (scm_array_in_bounds_p, "array-in-bounds?", 1, 0, 1,
|
||||||
(SCM ra, SCM args),
|
(SCM ra, SCM args),
|
||||||
"Return @code{#t} if its arguments would be acceptable to\n"
|
"Return @code{#t} if its arguments would be acceptable to\n"
|
||||||
"@code{array-ref}.")
|
"@code{array-ref}.")
|
||||||
|
@ -376,7 +355,7 @@ SCM_DEFINE (scm_i_array_set_x, "array-set!", 2, 2, 1,
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
||||||
|
|
||||||
static SCM
|
static SCM
|
||||||
array_to_list (scm_t_array_handle *h, size_t dim, unsigned long pos)
|
array_to_list (scm_t_array_handle *h, size_t dim, unsigned long pos)
|
||||||
{
|
{
|
||||||
if (dim == scm_array_handle_rank (h))
|
if (dim == scm_array_handle_rank (h))
|
||||||
|
@ -397,7 +376,7 @@ array_to_list (scm_t_array_handle *h, size_t dim, unsigned long pos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SCM_DEFINE (scm_array_to_list, "array->list", 1, 0, 0,
|
SCM_DEFINE (scm_array_to_list, "array->list", 1, 0, 0,
|
||||||
(SCM array),
|
(SCM array),
|
||||||
"Return a list representation of @var{array}.\n\n"
|
"Return a list representation of @var{array}.\n\n"
|
||||||
"It is easiest to specify the behavior of this function by\n"
|
"It is easiest to specify the behavior of this function by\n"
|
||||||
|
@ -410,8 +389,8 @@ SCM_DEFINE (scm_array_to_list, "array->list", 1, 0, 0,
|
||||||
#define FUNC_NAME s_scm_array_to_list
|
#define FUNC_NAME s_scm_array_to_list
|
||||||
{
|
{
|
||||||
scm_t_array_handle h;
|
scm_t_array_handle h;
|
||||||
SCM res;
|
SCM res;
|
||||||
|
|
||||||
scm_array_get_handle (array, &h);
|
scm_array_get_handle (array, &h);
|
||||||
res = array_to_list (&h, 0, 0);
|
res = array_to_list (&h, 0, 0);
|
||||||
scm_array_handle_release (&h);
|
scm_array_handle_release (&h);
|
||||||
|
|
|
@ -41,9 +41,6 @@ SCM_INTERNAL SCM scm_array_p_2 (SCM);
|
||||||
SCM_API int scm_is_typed_array (SCM obj, SCM type);
|
SCM_API int scm_is_typed_array (SCM obj, SCM type);
|
||||||
SCM_API SCM scm_typed_array_p (SCM v, SCM type);
|
SCM_API SCM scm_typed_array_p (SCM v, SCM type);
|
||||||
|
|
||||||
SCM_API size_t scm_c_array_rank (SCM ra);
|
|
||||||
SCM_API SCM scm_array_rank (SCM ra);
|
|
||||||
|
|
||||||
SCM_API size_t scm_c_array_length (SCM ra);
|
SCM_API size_t scm_c_array_length (SCM ra);
|
||||||
SCM_API SCM scm_array_length (SCM ra);
|
SCM_API SCM scm_array_length (SCM ra);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue