take-n returns the rest of the sequence if not enough elements are present
parent
a59bf32a33
commit
9861fdc9b3
|
@ -118,10 +118,10 @@ IN: sequence-parser.tests
|
||||||
[ "abcd e \\\"f g" ]
|
[ "abcd e \\\"f g" ]
|
||||||
[ "\"abcd e \\\"f g\"" <sequence-parser> CHAR: \ CHAR: " take-token* ] unit-test
|
[ "\"abcd e \\\"f g\"" <sequence-parser> CHAR: \ CHAR: " take-token* ] unit-test
|
||||||
|
|
||||||
[ "" ]
|
[ f ]
|
||||||
[ "" <sequence-parser> take-rest ] unit-test
|
[ "" <sequence-parser> take-rest ] unit-test
|
||||||
|
|
||||||
[ "" ]
|
[ f ]
|
||||||
[ "abc" <sequence-parser> dup "abc" take-sequence drop take-rest ] unit-test
|
[ "abc" <sequence-parser> dup "abc" take-sequence drop take-rest ] unit-test
|
||||||
|
|
||||||
[ f ]
|
[ f ]
|
||||||
|
|
|
@ -35,6 +35,8 @@ TUPLE: sequence-parser sequence n ;
|
||||||
: advance* ( sequence-parser -- )
|
: advance* ( sequence-parser -- )
|
||||||
advance drop ; inline
|
advance drop ; inline
|
||||||
|
|
||||||
|
: next ( sequence-parser -- obj ) [ current ] [ advance* ] bi ;
|
||||||
|
|
||||||
: get+increment ( sequence-parser -- char/f )
|
: get+increment ( sequence-parser -- char/f )
|
||||||
[ current ] [ advance drop ] bi ; inline
|
[ current ] [ advance drop ] bi ; inline
|
||||||
|
|
||||||
|
@ -148,7 +150,7 @@ TUPLE: sequence-parser sequence n ;
|
||||||
2dup [ length ] dip < [ 2drop f ] [ tail-slice ] if ; inline
|
2dup [ length ] dip < [ 2drop f ] [ tail-slice ] if ; inline
|
||||||
|
|
||||||
: take-rest ( sequence-parser -- sequence )
|
: 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 )
|
: take-until-object ( sequence-parser obj -- sequence )
|
||||||
'[ current _ = ] take-until ;
|
'[ current _ = ] take-until ;
|
||||||
|
@ -190,7 +192,7 @@ TUPLE: sequence-parser sequence n ;
|
||||||
|
|
||||||
:: take-n ( sequence-parser n -- seq/f )
|
:: take-n ( sequence-parser n -- seq/f )
|
||||||
n sequence-parser [ n>> + ] [ sequence>> length ] bi > [
|
n sequence-parser [ n>> + ] [ sequence>> length ] bi > [
|
||||||
f
|
sequence-parser take-rest
|
||||||
] [
|
] [
|
||||||
sequence-parser n>> dup n + sequence-parser sequence>> subseq
|
sequence-parser n>> dup n + sequence-parser sequence>> subseq
|
||||||
sequence-parser [ n + ] change-n drop
|
sequence-parser [ n + ] change-n drop
|
||||||
|
|
Loading…
Reference in New Issue