mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-30 00:40:20 +02:00
More docs.
This commit is contained in:
parent
5d1015ec8c
commit
34dedee007
1 changed files with 49 additions and 10 deletions
|
@ -818,9 +818,10 @@ same vector, @code{vector-move-right!} is usually appropriate when
|
||||||
@node Uniform Vectors
|
@node Uniform Vectors
|
||||||
@subsection Uniform Vectors
|
@subsection Uniform Vectors
|
||||||
|
|
||||||
A uniform vector is a vector elements are all of a single type. Guile
|
A uniform vector is a vector whose elements are all of a single type.
|
||||||
offers uniform vectors for signed and unsigned 8-bit, 16-bit, 32-bit,
|
Guile offers uniform vectors for signed and unsigned 8-bit, 16-bit,
|
||||||
and 64-bit integers and for two sizes of floating point values.
|
32-bit, and 64-bit integers, two sizes of floating point values, and
|
||||||
|
complex floating-point numbers of these two sizes.
|
||||||
|
|
||||||
Strings could be regarded as uniform vectors of characters,
|
Strings could be regarded as uniform vectors of characters,
|
||||||
@xref{Strings}. Likewise, bit vectors could be regarded as uniform
|
@xref{Strings}. Likewise, bit vectors could be regarded as uniform
|
||||||
|
@ -829,7 +830,7 @@ that the procedures described here do not apply to these two data types.
|
||||||
However, both strings and bit vectors are arrays, @xref{Arrays}.
|
However, both strings and bit vectors are arrays, @xref{Arrays}.
|
||||||
|
|
||||||
Uniform vectors are the special case of one-dimensional, uniform,
|
Uniform vectors are the special case of one-dimensional, uniform,
|
||||||
zero-origin array.
|
zero-origin arrays.
|
||||||
|
|
||||||
Uniform vectors can be useful since they consume less memory than the
|
Uniform vectors can be useful since they consume less memory than the
|
||||||
non-uniform, general vectors. Also, since the types they can store
|
non-uniform, general vectors. Also, since the types they can store
|
||||||
|
@ -839,12 +840,18 @@ where you want to apply a filter to some image. While you could store
|
||||||
the pixels of an image in a general vector and write a general
|
the pixels of an image in a general vector and write a general
|
||||||
convolution function, things are much more efficient with uniform
|
convolution function, things are much more efficient with uniform
|
||||||
vectors: the convolution function knows that all pixels are unsigned
|
vectors: the convolution function knows that all pixels are unsigned
|
||||||
8-bit values (say), and can use a very tight inner loop. (That is, when
|
8-bit values (say), and can use a very tight inner loop.
|
||||||
it is written in C.)
|
|
||||||
|
That is, when it is written in C. Functions for efficiently working
|
||||||
|
with uniform vectors from C are listed at the end of this section.
|
||||||
|
|
||||||
Procedures similar to the vector procedures (@pxref{Vectors}) are
|
Procedures similar to the vector procedures (@pxref{Vectors}) are
|
||||||
provided for handling these homogeneous vectors, but they are distinct
|
provided for handling these homogeneous vectors, but they are distinct
|
||||||
datatypes and the two cannot be inter-mixed.
|
datatypes and the two cannot be inter-mixed. If you want to work
|
||||||
|
primarily with uniform vectorsd, but want to offer support for general
|
||||||
|
vectors as a convenience, you can use one of the @code{scm_any_to_*}
|
||||||
|
functions. They will coerce lists and vectors to the given type of
|
||||||
|
uniform vector.
|
||||||
|
|
||||||
One set of these procedures is a generic one: it works with all types of
|
One set of these procedures is a generic one: it works with all types of
|
||||||
uniform vectors. In addition to that, there is a set of procedures for
|
uniform vectors. In addition to that, there is a set of procedures for
|
||||||
|
@ -853,9 +860,6 @@ generality of the first set, it is best to use the more specific
|
||||||
functions. They might not be that much faster, but their use can serve
|
functions. They might not be that much faster, but their use can serve
|
||||||
as a kind of declaration and makes it easier to optimize later on.
|
as a kind of declaration and makes it easier to optimize later on.
|
||||||
|
|
||||||
(Functions for efficiently working with uniform vectors from C are
|
|
||||||
listed at the end of this section.)
|
|
||||||
|
|
||||||
The generic set of procedures uses @code{uniform-vector} in its names,
|
The generic set of procedures uses @code{uniform-vector} in its names,
|
||||||
the specific ones use the tag from the following table.
|
the specific ones use the tag from the following table.
|
||||||
|
|
||||||
|
@ -1151,6 +1155,35 @@ Return a newly allocated homogeneous numeric vector of the indicated type,
|
||||||
initialized with the elements of the list @var{lst}.
|
initialized with the elements of the list @var{lst}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} any->u8vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->s8vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->u16vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->s16vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->u32vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->s32vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->u64vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->s64vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->f32vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->f64vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->c32vector obj
|
||||||
|
@deffnx {Scheme Procedure} any->c64vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_u8vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_s8vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_u16vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_s16vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_u32vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_s32vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_u64vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_s64vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_f32vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_f64vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_c32vector obj
|
||||||
|
@deffnx {C Function} scm_any_to_c64vector obj
|
||||||
|
Return a newly allocated homogeneous numeric vector of the indicated
|
||||||
|
type, initialized with the elements of @var{obj}, which must be a list,
|
||||||
|
a vector, or a uniform vector.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
@deftypefn {C Function} int scm_is_uniform_vector (SCM uvec)
|
@deftypefn {C Function} int scm_is_uniform_vector (SCM uvec)
|
||||||
Return @code{1} when @var{uvec} is a uniform vector, @code{0} otherwise.
|
Return @code{1} when @var{uvec} is a uniform vector, @code{0} otherwise.
|
||||||
@end deftypefn
|
@end deftypefn
|
||||||
|
@ -1206,6 +1239,12 @@ Finish the access to the elements of a uniform vector, as exlained
|
||||||
above.
|
above.
|
||||||
@end deftypefn
|
@end deftypefn
|
||||||
|
|
||||||
|
@deftypefn {C Function} void scm_frame_uniform_vector_release (SCM uvec)
|
||||||
|
Arrange for @code{uniform_vector_release} to be called with @var{uvec}
|
||||||
|
when the current frame is unwound, implicitely or explicitely;
|
||||||
|
@xref{Frames}.
|
||||||
|
@end deftypefn
|
||||||
|
|
||||||
@deftypefn {C Function} size_t scm_c_uniform_vector_length (SCM uvec)
|
@deftypefn {C Function} size_t scm_c_uniform_vector_length (SCM uvec)
|
||||||
Return the number of elements of @var{uvec} as a @code{size_t}.
|
Return the number of elements of @var{uvec} as a @code{size_t}.
|
||||||
@end deftypefn
|
@end deftypefn
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue