diff options
author | Andy Wingo <wingo@pobox.com> | 2009-08-25 18:04:02 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-08-25 18:04:02 +0200 |
commit | 108e18b18abc066b2709a09283751e9138ccc935 (patch) | |
tree | f55cf91309b7b069bc2f2d725fb788aa08870fa5 /libguile/strings.c | |
parent | c15d8e6ab9bf991ca55038fa895993bbb4c1efaa (diff) | |
parent | cd43fdc5b7a7c851ee0f2b4e96a1f394fb50d869 (diff) | |
download | guile-108e18b18abc066b2709a09283751e9138ccc935.tar.gz |
Merge wip-array refactor, up to cd43fdc5b7a7c
Conflicts:
NEWS
libguile/print.c
Diffstat (limited to 'libguile/strings.c')
-rw-r--r-- | libguile/strings.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/libguile/strings.c b/libguile/strings.c index c6464de6b..39dab3a38 100644 --- a/libguile/strings.c +++ b/libguile/strings.c @@ -32,6 +32,7 @@ #include "libguile/chars.h" #include "libguile/root.h" #include "libguile/strings.h" +#include "libguile/generalized-vectors.h" #include "libguile/deprecation.h" #include "libguile/validate.h" #include "libguile/dynwind.h" @@ -1750,6 +1751,36 @@ scm_i_deprecated_string_length (SCM str) #endif +static SCM +string_handle_ref (scm_t_array_handle *h, size_t index) +{ + return scm_c_string_ref (h->array, index); +} + +static void +string_handle_set (scm_t_array_handle *h, size_t index, SCM val) +{ + scm_c_string_set_x (h->array, index, val); +} + +static void +string_get_handle (SCM v, scm_t_array_handle *h) +{ + h->array = v; + h->ndims = 1; + h->dims = &h->dim0; + h->dim0.lbnd = 0; + h->dim0.ubnd = scm_c_string_length (v) - 1; + h->dim0.inc = 1; + h->element_type = SCM_ARRAY_ELEMENT_TYPE_CHAR; + h->elements = h->writable_elements = NULL; +} + +SCM_ARRAY_IMPLEMENTATION (scm_tc7_string, 0x7f & ~2, + string_handle_ref, string_handle_set, + string_get_handle); +SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_CHAR, scm_make_string); + void scm_init_strings () { |