1
Fork 0
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:
Daniel Llorens 2015-02-12 10:15:42 +01:00
parent 3aafc2c857
commit ed6c65507a
4 changed files with 35 additions and 35 deletions

View file

@ -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.")

View file

@ -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 */

View file

@ -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);

View file

@ -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);