diff options
author | Andy Wingo <wingo@pobox.com> | 2016-05-24 08:37:57 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2016-05-24 08:37:57 +0200 |
commit | 48dbadd8e60ca6335593e4a93179da3e8de8b34e (patch) | |
tree | 2e25910578be906b2b80e6fee6dc4b782f405aee | |
parent | 7c8b80e076dd7d7219c985bcd8097dd1f115b92a (diff) | |
download | guile-48dbadd8e60ca6335593e4a93179da3e8de8b34e.tar.gz |
Speed golf on Scheme put-u8, put-bytevector
* module/ice-9/sports.scm (put-u8, put-bytevector): Speed hack.
-rw-r--r-- | module/ice-9/sports.scm | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/module/ice-9/sports.scm b/module/ice-9/sports.scm index 37ea09221..86d9a5b06 100644 --- a/module/ice-9/sports.scm +++ b/module/ice-9/sports.scm @@ -309,13 +309,13 @@ (else (fill-directly pos)))))) (define (put-u8 port byte) - (when (port-random-access? port) - (flush-input port)) (let* ((buf (port-write-buffer port)) (bv (port-buffer-bytevector buf)) (end (port-buffer-end buf))) (unless (<= 0 end (bytevector-length bv)) (error "not an output port" port)) + (when (and (eq? (port-buffer-cur buf) end) (port-random-access? port)) + (flush-input port)) (bytevector-u8-set! bv end byte) (set-port-buffer-end! buf (1+ end)) (when (= (1+ end) (bytevector-length bv)) (flush-output port)))) @@ -324,14 +324,14 @@ (count (- (bytevector-length src) start))) (unless (<= 0 start (+ start count) (bytevector-length src)) (error "invalid start/count" start count)) - (when (port-random-access? port) - (flush-input port)) (let* ((buf (port-write-buffer port)) (bv (port-buffer-bytevector buf)) (size (bytevector-length bv)) (cur (port-buffer-cur buf)) (end (port-buffer-end buf)) (buffered (- end cur))) + (when (and (eq? cur end) (port-random-access? port)) + (flush-input port)) (cond ((<= size count) ;; The write won't fit in the buffer at all; write directly. |