mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
Reuse SCM_BYTEVECTOR_TYPED_LENGTH in scm_array_get_handle
* libguile/bytevectors.h (SCM_BYTEVECTOR_TYPE_SIZE, SCM_BYTEVECTOR_TYPED_LENGTH): moved from libguile/bytevectors.c. * libguile/array-handle.c (scm_array_get_handle): reuse SCM_BYTEVECTOR_TYPED_LENGTH.
This commit is contained in:
parent
212c5b0f29
commit
b9cbf3b6de
3 changed files with 14 additions and 16 deletions
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (C) 1995,1996,1997,1998,2000,2001,2002,2003,2004, 2005,
|
||||
* 2006, 2009, 2011, 2013, 2014 Free Software Foundation, Inc.
|
||||
*
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 3 of
|
||||
|
@ -185,15 +185,13 @@ scm_array_get_handle (SCM array, scm_t_array_handle *h)
|
|||
break;
|
||||
case scm_tc7_bytevector:
|
||||
{
|
||||
size_t byte_length, length, element_byte_size;
|
||||
size_t length;
|
||||
scm_t_array_element_type element_type;
|
||||
scm_t_vector_ref vref;
|
||||
scm_t_vector_set vset;
|
||||
|
||||
byte_length = scm_c_bytevector_length (array);
|
||||
element_type = SCM_BYTEVECTOR_ELEMENT_TYPE (array);
|
||||
element_byte_size = scm_i_array_element_type_sizes[element_type] / 8;
|
||||
length = byte_length / element_byte_size;
|
||||
length = SCM_BYTEVECTOR_TYPED_LENGTH (array);
|
||||
|
||||
switch (element_type)
|
||||
{
|
||||
|
@ -248,7 +246,7 @@ scm_array_handle_pos (scm_t_array_handle *h, SCM indices)
|
|||
scm_t_array_dim *s = scm_array_handle_dims (h);
|
||||
ssize_t pos = 0, i;
|
||||
size_t k = scm_array_handle_rank (h);
|
||||
|
||||
|
||||
while (k > 0 && scm_is_pair (indices))
|
||||
{
|
||||
i = scm_to_signed_integer (SCM_CAR (indices), s->lbnd, s->ubnd);
|
||||
|
@ -340,7 +338,7 @@ scm_init_array_handle (void)
|
|||
{
|
||||
#define DEFINE_ARRAY_TYPE(tag, TAG) \
|
||||
scm_i_array_element_types[SCM_ARRAY_ELEMENT_TYPE_##TAG] = scm_from_utf8_symbol (#tag)
|
||||
|
||||
|
||||
scm_i_array_element_types[SCM_ARRAY_ELEMENT_TYPE_SCM] = SCM_BOOL_T;
|
||||
DEFINE_ARRAY_TYPE (a, CHAR);
|
||||
DEFINE_ARRAY_TYPE (b, BIT);
|
||||
|
|
|
@ -192,11 +192,6 @@
|
|||
#define SCM_BYTEVECTOR_SET_PARENT(_bv, _parent) \
|
||||
SCM_SET_CELL_OBJECT_3 ((_bv), (_parent))
|
||||
|
||||
#define SCM_BYTEVECTOR_TYPE_SIZE(var) \
|
||||
(scm_i_array_element_type_sizes[SCM_BYTEVECTOR_ELEMENT_TYPE (var)]/8)
|
||||
#define SCM_BYTEVECTOR_TYPED_LENGTH(var) \
|
||||
(SCM_BYTEVECTOR_LENGTH (var) / SCM_BYTEVECTOR_TYPE_SIZE (var))
|
||||
|
||||
/* The empty bytevector. */
|
||||
SCM scm_null_bytevector = SCM_UNSPECIFIED;
|
||||
|
||||
|
@ -414,7 +409,7 @@ scm_i_print_bytevector (SCM bv, SCM port, scm_print_state *pstate SCM_UNUSED)
|
|||
{
|
||||
ssize_t ubnd, inc, i;
|
||||
scm_t_array_handle h;
|
||||
|
||||
|
||||
scm_array_get_handle (bv, &h);
|
||||
|
||||
scm_putc ('#', port);
|
||||
|
@ -643,7 +638,7 @@ SCM_DEFINE (scm_uniform_array_to_bytevector, "uniform-array->bytevector",
|
|||
size_t len, sz, byte_len;
|
||||
scm_t_array_handle h;
|
||||
const void *elts;
|
||||
|
||||
|
||||
contents = scm_array_contents (array, SCM_BOOL_T);
|
||||
if (scm_is_false (contents))
|
||||
scm_wrong_type_arg_msg (FUNC_NAME, 0, array, "uniform contiguous array");
|
||||
|
@ -1940,7 +1935,7 @@ utf_encoding_name (char *name, size_t utf_width, SCM endianness)
|
|||
memcpy (SCM_BYTEVECTOR_CONTENTS (utf), c_utf, c_utf_len); \
|
||||
scm_dynwind_end (); \
|
||||
\
|
||||
return (utf);
|
||||
return (utf);
|
||||
|
||||
|
||||
|
||||
|
@ -2001,7 +1996,7 @@ SCM_DEFINE (scm_string_to_utf32, "string->utf32",
|
|||
if (!scm_is_eq (SCM_UNBNDP (endianness) ? scm_endianness_big : endianness,
|
||||
scm_i_native_endianness))
|
||||
swap_u32 (wchars, wchar_len);
|
||||
|
||||
|
||||
bv = make_bytevector (bytes_len, SCM_ARRAY_ELEMENT_TYPE_VU8);
|
||||
memcpy (SCM_BYTEVECTOR_CONTENTS (bv), wchars, bytes_len);
|
||||
free (wchars);
|
||||
|
|
|
@ -129,6 +129,11 @@ SCM_API SCM scm_utf32_to_string (SCM, SCM);
|
|||
#define SCM_BYTEVECTOR_CONTIGUOUS_P(_bv) \
|
||||
(SCM_BYTEVECTOR_FLAGS (_bv) >> 8UL)
|
||||
|
||||
#define SCM_BYTEVECTOR_TYPE_SIZE(var) \
|
||||
(scm_i_array_element_type_sizes[SCM_BYTEVECTOR_ELEMENT_TYPE (var)]/8)
|
||||
#define SCM_BYTEVECTOR_TYPED_LENGTH(var) \
|
||||
(SCM_BYTEVECTOR_LENGTH (var) / SCM_BYTEVECTOR_TYPE_SIZE (var))
|
||||
|
||||
/* Hint that is passed to `scm_gc_malloc ()' and friends. */
|
||||
#define SCM_GC_BYTEVECTOR "bytevector"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue