From 1abe7942054e4d73a0df2b8cdf8d68d652c66960 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Wed, 9 Nov 2016 10:43:47 -0800 Subject: [PATCH] io.buffers: refactor buffer-read-until to use buffer-find. --- basis/io/buffers/buffers-tests.factor | 4 ++++ basis/io/buffers/buffers.factor | 17 +++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/basis/io/buffers/buffers-tests.factor b/basis/io/buffers/buffers-tests.factor index 821b025800..3a834cd712 100644 --- a/basis/io/buffers/buffers-tests.factor +++ b/basis/io/buffers/buffers-tests.factor @@ -61,6 +61,10 @@ io.buffers kernel libc namespaces sequences strings tools.test ; { "hello" CHAR: \s } [ " " "b" get buffer-read-until [ >string ] dip ] unit-test "b" get dispose +"hello world" string>buffer "b" set +{ "hello worl" CHAR: d } [ "d" "b" get buffer-read-until [ >string ] dip ] unit-test +"b" get dispose + "hello world" string>buffer "b" set { "hello world" f } [ "\n" "b" get buffer-read-until [ >string ] dip ] unit-test "b" get dispose diff --git a/basis/io/buffers/buffers.factor b/basis/io/buffers/buffers.factor index 2accf4508e..fed9a480a3 100644 --- a/basis/io/buffers/buffers.factor +++ b/basis/io/buffers/buffers.factor @@ -76,16 +76,22 @@ TYPED: buffer-write1 ( byte: fixnum buffer: buffer -- ) [ [ ptr>> ] [ fill>> ] bi set-alien-unsigned-1 ] [ 1 swap buffer+ ] bi ; inline +TYPED: buffer-find ( seps buffer: buffer -- n/f ) + [ + swap [ [ pos>> ] [ fill>> ] [ ptr>> ] tri ] dip + [ swap alien-unsigned-1 ] [ member-eq? ] bi-curry* + compose (find-integer) + ] [ + [ pos>> - ] curry [ f ] if* + ] bi ; inline + > - over buffer-read swap buffer-pop ] [ @@ -96,6 +102,5 @@ TYPED: buffer-write1 ( byte: fixnum buffer: buffer -- ) PRIVATE> TYPED: buffer-read-until ( seps buffer: buffer -- byte-array sep/f ) - swap [ { [ ] [ pos>> ] [ fill>> ] [ ptr>> ] } cleave ] dip search-buffer-until finish-buffer-until ;