1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-20 10:40:19 +02:00

Remove generalized-vectors.[hc]

* libguile/arrays.c: Assume the registry of array element types.
* libguile/arrays.h (scm_make_generalized_vector): Last decl from
  generalized-vectors.h.
* libguile/generalized-vectors.h:
* libguile/generalized-vectors.c: Remove.

Elsewhere remove references to generalized-vectors.
This commit is contained in:
Daniel Llorens 2020-02-06 16:15:47 +01:00
parent 26510db52c
commit 68ae22eb5e
8 changed files with 80 additions and 155 deletions

View file

@ -39,7 +39,6 @@
#include "feature.h"
#include "fports.h"
#include "generalized-arrays.h"
#include "generalized-vectors.h"
#include "gsubr.h"
#include "list.h"
#include "modules.h"
@ -56,7 +55,53 @@
#include "arrays.h"
/* ---------------------- */
/* Handling of root types */
/* ---------------------- */
struct scm_t_vector_ctor
{
SCM tag;
SCM (*ctor)(SCM, SCM);
};
#define VECTOR_CTORS_N_STATIC_ALLOC 20
static struct scm_t_vector_ctor vector_ctors[VECTOR_CTORS_N_STATIC_ALLOC];
static int num_vector_ctors_registered = 0;
static void
scm_i_register_vector_constructor (SCM type, SCM (*ctor)(SCM, SCM))
{
if (num_vector_ctors_registered >= VECTOR_CTORS_N_STATIC_ALLOC)
/* need to increase VECTOR_CTORS_N_STATIC_ALLOC, buster */
abort ();
else
{
vector_ctors[num_vector_ctors_registered].tag = type;
vector_ctors[num_vector_ctors_registered].ctor = ctor;
num_vector_ctors_registered++;
}
}
SCM_DEFINE (scm_make_generalized_vector, "make-generalized-vector", 2, 1, 0,
(SCM type, SCM len, SCM fill),
"Make a generalized vector")
#define FUNC_NAME s_scm_make_generalized_vector
{
int i;
for (i = 0; i < num_vector_ctors_registered; i++)
if (scm_is_eq (vector_ctors[i].tag, type))
return vector_ctors[i].ctor(len, fill);
scm_wrong_type_arg_msg (FUNC_NAME, SCM_ARG1, type, "array type");
}
#undef FUNC_NAME
/* ------------------- */
/* Basic array library */
/* ------------------- */
size_t
scm_c_array_rank (SCM array)
{
@ -954,11 +999,42 @@ scm_i_print_array (SCM array, SCM port, scm_print_state *pstate)
return d;
}
/* ---------------------- */
/* Init hook */
/* ---------------------- */
#define SCM_VECTOR_IMPLEMENTATION(type, ctor) \
SCM_SNARF_INIT (scm_i_register_vector_constructor \
(scm_i_array_element_types[type], ctor))
SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_SCM, scm_make_vector)
SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_BIT, scm_make_bitvector)
SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_CHAR, scm_make_string)
SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_VU8, scm_make_bytevector)
void
scm_init_arrays ()
{
#define REGISTER(tag, TAG) \
scm_i_register_vector_constructor \
(scm_i_array_element_types[SCM_ARRAY_ELEMENT_TYPE_##TAG], \
scm_make_##tag##vector)
REGISTER (u8, U8);
REGISTER (s8, S8);
REGISTER (u16, U16);
REGISTER (s16, S16);
REGISTER (u32, U32);
REGISTER (s32, S32);
REGISTER (u64, U64);
REGISTER (s64, S64);
REGISTER (f32, F32);
REGISTER (f64, F64);
REGISTER (c32, C32);
REGISTER (c64, C64);
scm_add_feature ("array");
#include "arrays.x"
}