take-n returns the rest of the sequence if not enough elements are present

db4
Doug Coleman 2009-06-09 11:49:22 -04:00
parent a59bf32a33
commit 9861fdc9b3
2 changed files with 6 additions and 4 deletions

View File

@ -118,10 +118,10 @@ IN: sequence-parser.tests
[ "abcd e \\\"f g" ]
[ "\"abcd e \\\"f g\"" <sequence-parser> CHAR: \ CHAR: " take-token* ] unit-test
[ "" ]
[ f ]
[ "" <sequence-parser> take-rest ] unit-test
[ "" ]
[ f ]
[ "abc" <sequence-parser> dup "abc" take-sequence drop take-rest ] unit-test
[ f ]

View File

@ -35,6 +35,8 @@ TUPLE: sequence-parser sequence n ;
: advance* ( sequence-parser -- )
advance drop ; inline
: next ( sequence-parser -- obj ) [ current ] [ advance* ] bi ;
: get+increment ( sequence-parser -- char/f )
[ current ] [ advance drop ] bi ; inline
@ -148,7 +150,7 @@ TUPLE: sequence-parser sequence n ;
2dup [ length ] dip < [ 2drop f ] [ tail-slice ] if ; inline
: take-rest ( sequence-parser -- sequence )
[ take-rest-slice ] [ sequence>> like ] bi ;
[ take-rest-slice ] [ sequence>> like ] bi f like ;
: take-until-object ( sequence-parser obj -- sequence )
'[ current _ = ] take-until ;
@ -190,7 +192,7 @@ TUPLE: sequence-parser sequence n ;
:: take-n ( sequence-parser n -- seq/f )
n sequence-parser [ n>> + ] [ sequence>> length ] bi > [
f
sequence-parser take-rest
] [
sequence-parser n>> dup n + sequence-parser sequence>> subseq
sequence-parser [ n + ] change-n drop