diff options
author | Andy Wingo <wingo@pobox.com> | 2014-02-09 12:31:59 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2014-02-09 12:48:21 +0100 |
commit | cf64dca65c4ee4d845a73e7d7c15ab7583aff15b (patch) | |
tree | 690ecc2fd6357077f0e736df9bf4637bce6b0aa6 /libguile/bitvectors.c | |
parent | 8269f0be18c046d94f01f83dcff80794e97e6c27 (diff) | |
download | guile-cf64dca65c4ee4d845a73e7d7c15ab7583aff15b.tar.gz |
Remove array impl. registry; instead, hard-code array handle creation
* libguile/array-handle.h (scm_t_vector_ref, scm_t_vector_set): Rename
from scm_t_array_ref, scm_t_array_set. These were named
scm_i_t_array_ref and scm_i_t_array_set in 1.8 and 2.0. Change to
take the vector directly, instead of the array handle. In this way,
generic array handles are layered on top of specific implementations
of backing stores.
Remove scm_t_array_implementation, introduced in 2.0 but never
documented. It was a failed attempt to layer the array implementation
that actually introduced too many layers, as it prevented the "vref"
and "vset" members of scm_t_array_handle (called "ref" and "set" in
1.8, not present in 2.0) from specializing on array backing stores.
(scm_i_register_array_implementation) (scm_i_array_implementation_for_obj):
Remove these internal interfaces.
(scm_t_array_handle): Adapt to scm_t_vector_ref / scm_t_vector_set
change.
(scm_array_handle_ref, scm_array_handle_set): Adapt to change in
vref/vset prototype.
* libguile/array-handle.c (scm_array_get_handle): Inline all the
necessary initializations here for all specific array types.
* libguile/array-map.c (rafill, racp, ramap, rafe, array_index_map_1):
* libguile/arrays.c: Remove array implementation code.
* libguile/bitvectors.h:
* libguile/bitvectors.c: Remove array implementation code.
(scm_i_bitvector_bits): New internal interface.
* libguile/bytevectors.c: Remove array implementation code.
* libguile/srfi-4.h: Remove declarations for internal procedures that
don't exist (!).
* libguile/strings.c: Remove array implementation code.
* libguile/vectors.c: Remove array implementation code.
Diffstat (limited to 'libguile/bitvectors.c')
-rw-r--r-- | libguile/bitvectors.c | 39 |
1 files changed, 8 insertions, 31 deletions
diff --git a/libguile/bitvectors.c b/libguile/bitvectors.c index 2eef1dc56..1611119ab 100644 --- a/libguile/bitvectors.c +++ b/libguile/bitvectors.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995,1996,1997,1998,2000,2001,2002,2003,2004, 2005, 2006, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +/* Copyright (C) 1995,1996,1997,1998,2000,2001,2002,2003,2004, 2005, 2006, 2009, 2010, 2011, 2012, 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 @@ -42,6 +42,13 @@ #define BITVECTOR_LENGTH(obj) ((size_t)SCM_CELL_WORD_1(obj)) #define BITVECTOR_BITS(obj) ((scm_t_uint32 *)SCM_CELL_WORD_2(obj)) +scm_t_uint32 *scm_i_bitvector_bits (SCM vec) +{ + if (!IS_BITVECTOR (vec)) + abort (); + return BITVECTOR_BITS (vec); +} + int scm_i_print_bitvector (SCM vec, SCM port, scm_print_state *pstate) { @@ -852,36 +859,6 @@ scm_istr2bve (SCM str) return res; } -/* FIXME: h->array should be h->vector */ -static SCM -bitvector_handle_ref (scm_t_array_handle *h, size_t pos) -{ - return scm_c_bitvector_ref (h->array, pos); -} - -static void -bitvector_handle_set (scm_t_array_handle *h, size_t pos, SCM val) -{ - scm_c_bitvector_set_x (h->array, pos, val); -} - -static void -bitvector_get_handle (SCM bv, scm_t_array_handle *h) -{ - h->array = bv; - h->ndims = 1; - h->dims = &h->dim0; - h->dim0.lbnd = 0; - h->dim0.ubnd = BITVECTOR_LENGTH (bv) - 1; - h->dim0.inc = 1; - h->element_type = SCM_ARRAY_ELEMENT_TYPE_BIT; - h->elements = h->writable_elements = BITVECTOR_BITS (bv); -} - -SCM_ARRAY_IMPLEMENTATION (scm_tc7_bitvector, - 0x7f, - bitvector_handle_ref, bitvector_handle_set, - bitvector_get_handle) SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_BIT, scm_make_bitvector) void |