Add LENGTH member to external-string structure. It turns out that
authorChris Hanson <org/chris-hanson/cph>
Mon, 19 Mar 2001 22:13:16 +0000 (22:13 +0000)
committerChris Hanson <org/chris-hanson/cph>
Mon, 19 Mar 2001 22:13:16 +0000 (22:13 +0000)
it's important that fetching the length be fast.

v7/src/runtime/string.scm

index 8464060e561180e3b51a9823e169be28645b68a4..8cdaf3eb922d7c4c94049f47c1402bfed41bc003 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: string.scm,v 14.38 2001/01/05 20:15:29 cph Exp $
+$Id: string.scm,v 14.39 2001/03/19 22:13:16 cph Exp $
 
 Copyright (c) 1988-2001 Massachusetts Institute of Technology
 
@@ -975,23 +975,17 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   unspecific)
 
 (define-structure external-string
-  (descriptor #f read-only #t))
+  (descriptor #f read-only #t)
+  (length #f read-only #t))
 
 (define (allocate-external-string n-bytes)
   (without-interrupts
    (lambda ()
      (let ((descriptor ((ucode-primitive allocate-external-string) n-bytes)))
-       (let ((xstring (make-external-string descriptor)))
+       (let ((xstring (make-external-string descriptor n-bytes)))
         (add-to-gc-finalizer! external-strings xstring descriptor)
         xstring)))))
 
-(define (external-string-length xstring)
-  (if (not (external-string? xstring))
-      (error:wrong-type-argument xstring "external string"
-                                'EXTERNAL-STRING-LENGTH))
-   ((ucode-primitive extended-string-length)
-    (external-string-descriptor xstring)))
-
 (define (xstring? object)
   (or (string? object)
       (external-string? object)))
@@ -1000,8 +994,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   (cond ((string? xstring)
         (string-length xstring))
        ((external-string? xstring)
-        ((ucode-primitive extended-string-length)
-         (external-string-descriptor xstring)))
+        (external-string-length string))
        (else
         (error:wrong-type-argument xstring "xstring" 'XSTRING-LENGTH))))