From: Arthur Gleckler Date: Fri, 9 Nov 1990 21:31:56 +0000 (+0000) Subject: Change INPUT-BUFFER/READ-UNTIL-DELIMITER to a linear time algorithm. X-Git-Tag: 20090517-FFI~11084 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=9d4cc9cd2c9c29ca15c7a23f0d98979eea5bccfe;p=mit-scheme.git Change INPUT-BUFFER/READ-UNTIL-DELIMITER to a linear time algorithm. Previously was quadratic time when more than one buffer-full was read through. --- diff --git a/v7/src/runtime/io.scm b/v7/src/runtime/io.scm index b12e31f8e..dea94ea74 100644 --- a/v7/src/runtime/io.scm +++ b/v7/src/runtime/io.scm @@ -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)