summaryrefslogtreecommitdiff
path: root/libguile/strings.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-08-25 18:04:02 +0200
committerAndy Wingo <wingo@pobox.com>2009-08-25 18:04:02 +0200
commit108e18b18abc066b2709a09283751e9138ccc935 (patch)
treef55cf91309b7b069bc2f2d725fb788aa08870fa5 /libguile/strings.c
parentc15d8e6ab9bf991ca55038fa895993bbb4c1efaa (diff)
parentcd43fdc5b7a7c851ee0f2b4e96a1f394fb50d869 (diff)
downloadguile-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.c31
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 ()
{