Change INPUT-BUFFER/READ-UNTIL-DELIMITER to a linear time algorithm.
authorArthur Gleckler <edu/mit/csail/zurich/arthur>
Fri, 9 Nov 1990 21:31:56 +0000 (21:31 +0000)
committerArthur Gleckler <edu/mit/csail/zurich/arthur>
Fri, 9 Nov 1990 21:31:56 +0000 (21:31 +0000)
Previously was quadratic time when more than one buffer-full was read through.

v7/src/runtime/io.scm

index b12e31f8edd6a05c6ea1b56516c99bd38ce9b52c..dea94ea74b4f9b28812f0f798c7a5bae6144a0cc 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/io.scm,v 14.11 1990/11/09 08:43:59 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/io.scm,v 14.12 1990/11/09 21:31:56 arthur Exp $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -647,7 +647,7 @@ MIT in each case. |#
     (lambda ()
       (if (char-ready? buffer input-buffer/fill*)
          (let ((string (input-buffer/string buffer)))
-           (let loop ()
+           (let loop ((buffers '()))
              (let ((start-index (input-buffer/start-index buffer))
                    (end-index (input-buffer/end-index buffer)))
                (let ((delimiter-index
@@ -663,8 +663,8 @@ MIT in each case. |#
                      (let ((head (substring string start-index end-index)))
                        (set-input-buffer/start-index! buffer end-index)
                        (if (input-buffer/fill* buffer)
-                           (string-append head (loop))
-                           head)))))))
+                           (loop (cons head buffers))
+                           (apply string-append (reverse (cons head buffers))))))))))
          eof-object))))
 
 (define (input-buffer/discard-until-delimiter buffer delimiters)