Add stream-peek1 and remove it from images.gif and dns. Add sequence-peek but not stream-peek (yet?)
							parent
							
								
									4dd1ba4ab2
								
							
						
					
					
						commit
						f7af445625
					
				| 
						 | 
					@ -25,7 +25,7 @@ $nl
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
"Reading from the buffer:"
 | 
					"Reading from the buffer:"
 | 
				
			||||||
{ $subsections
 | 
					{ $subsections
 | 
				
			||||||
    buffer-peek
 | 
					    buffer-peek1
 | 
				
			||||||
    buffer-pop
 | 
					    buffer-pop
 | 
				
			||||||
    buffer-read
 | 
					    buffer-read
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,7 @@ HELP: n>buffer
 | 
				
			||||||
{ $description "Advances the fill pointer by " { $snippet "n" } " bytes." }
 | 
					{ $description "Advances the fill pointer by " { $snippet "n" } " bytes." }
 | 
				
			||||||
{ $warning "This word will leave the buffer in an invalid state if it does not have " { $snippet "n" } " bytes available." } ;
 | 
					{ $warning "This word will leave the buffer in an invalid state if it does not have " { $snippet "n" } " bytes available." } ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HELP: buffer-peek
 | 
					HELP: buffer-peek1
 | 
				
			||||||
{ $values { "buffer" buffer } { "byte" "a byte" } }
 | 
					{ $values { "buffer" buffer } { "byte" "a byte" } }
 | 
				
			||||||
{ $description "Outputs the byte at the buffer position." } ;
 | 
					{ $description "Outputs the byte at the buffer position." } ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,11 +32,11 @@ M: buffer dispose* ptr>> free ;
 | 
				
			||||||
    dup [ pos>> ] [ fill>> ] bi <
 | 
					    dup [ pos>> ] [ fill>> ] bi <
 | 
				
			||||||
    [ 0 >>pos 0 >>fill ] unless drop ; inline
 | 
					    [ 0 >>pos 0 >>fill ] unless drop ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: buffer-peek ( buffer -- byte )
 | 
					: buffer-peek1 ( buffer -- byte )
 | 
				
			||||||
    [ ptr>> ] [ pos>> ] bi alien-unsigned-1 ; inline
 | 
					    [ ptr>> ] [ pos>> ] bi alien-unsigned-1 ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: buffer-pop ( buffer -- byte )
 | 
					: buffer-pop ( buffer -- byte )
 | 
				
			||||||
    [ buffer-peek ] [ 1 swap buffer-consume ] bi ; inline
 | 
					    [ buffer-peek1 ] [ 1 swap buffer-consume ] bi ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: buffer-length ( buffer -- n )
 | 
					: buffer-length ( buffer -- n )
 | 
				
			||||||
    [ fill>> ] [ pos>> ] bi - ; inline
 | 
					    [ fill>> ] [ pos>> ] bi - ; inline
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,6 +41,10 @@ HOOK: (wait-to-read) io-backend ( port -- )
 | 
				
			||||||
        dup (wait-to-read) buffer>> buffer-empty?
 | 
					        dup (wait-to-read) buffer>> buffer-empty?
 | 
				
			||||||
    ] [ drop f ] if ; inline
 | 
					    ] [ drop f ] if ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: input-port stream-peek1
 | 
				
			||||||
 | 
					    dup check-disposed dup wait-to-read
 | 
				
			||||||
 | 
					    [ drop f ] [ buffer>> buffer-peek1 ] if ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: input-port stream-read1
 | 
					M: input-port stream-read1
 | 
				
			||||||
    dup check-disposed
 | 
					    dup check-disposed
 | 
				
			||||||
    dup wait-to-read [ drop f ] [ buffer>> buffer-pop ] if ; inline
 | 
					    dup wait-to-read [ drop f ] [ buffer>> buffer-pop ] if ; inline
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@ SYMBOLS: +byte+ +character+ ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GENERIC: stream-element-type ( stream -- type )
 | 
					GENERIC: stream-element-type ( stream -- type )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERIC: stream-peek1 ( stream -- byte/f )
 | 
				
			||||||
GENERIC: stream-read1 ( stream -- elt )
 | 
					GENERIC: stream-read1 ( stream -- elt )
 | 
				
			||||||
GENERIC: stream-read ( n stream -- seq )
 | 
					GENERIC: stream-read ( n stream -- seq )
 | 
				
			||||||
GENERIC: stream-read-until ( seps stream -- seq sep/f )
 | 
					GENERIC: stream-read-until ( seps stream -- seq sep/f )
 | 
				
			||||||
| 
						 | 
					@ -33,6 +34,7 @@ SYMBOL: input-stream
 | 
				
			||||||
SYMBOL: output-stream
 | 
					SYMBOL: output-stream
 | 
				
			||||||
SYMBOL: error-stream
 | 
					SYMBOL: error-stream
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: peek1 ( -- byte ) input-stream get stream-peek1 ;
 | 
				
			||||||
: readln ( -- str/f ) input-stream get stream-readln ;
 | 
					: readln ( -- str/f ) input-stream get stream-readln ;
 | 
				
			||||||
: read1 ( -- elt ) input-stream get stream-read1 ;
 | 
					: read1 ( -- elt ) input-stream get stream-read1 ;
 | 
				
			||||||
: read ( n -- seq ) input-stream get stream-read ;
 | 
					: read ( n -- seq ) input-stream get stream-read ;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@ TUPLE: byte-reader { underlying byte-array read-only } { i array-capacity } ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: byte-reader stream-element-type drop +byte+ ;
 | 
					M: byte-reader stream-element-type drop +byte+ ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: byte-reader stream-peek1 sequence-peek1 ;
 | 
				
			||||||
M: byte-reader stream-read-partial stream-read ;
 | 
					M: byte-reader stream-read-partial stream-read ;
 | 
				
			||||||
M: byte-reader stream-read sequence-read ;
 | 
					M: byte-reader stream-read sequence-read ;
 | 
				
			||||||
M: byte-reader stream-read1 sequence-read1 ;
 | 
					M: byte-reader stream-read1 sequence-read1 ;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,6 +14,12 @@ SLOT: i
 | 
				
			||||||
: next ( stream -- )
 | 
					: next ( stream -- )
 | 
				
			||||||
    [ 1 + ] change-i drop ; inline
 | 
					    [ 1 + ] change-i drop ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: sequence-peek1 ( seq -- elt/f )
 | 
				
			||||||
 | 
					    [ i>> ] [ underlying>> ] bi ?nth ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: sequence-peek ( n seq -- elt/f )
 | 
				
			||||||
 | 
					    [ nip i>> dup ] [ [ + ] [ underlying>> ] bi* ] 2bi ?subseq ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: sequence-read1 ( stream -- elt/f )
 | 
					: sequence-read1 ( stream -- elt/f )
 | 
				
			||||||
    [ >sequence-stream< ?nth ] [ next ] bi ; inline
 | 
					    [ >sequence-stream< ?nth ] [ next ] bi ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,6 +13,11 @@ IN: sequences.tests
 | 
				
			||||||
[ V{ 4 5 } ] [ { 1 2 3 4 5 } 2 tail-slice* >vector ] unit-test
 | 
					[ V{ 4 5 } ] [ { 1 2 3 4 5 } 2 tail-slice* >vector ] unit-test
 | 
				
			||||||
[ V{ 3 4 } ] [ 2 4 1 10 dup iota <slice> subseq >vector ] unit-test
 | 
					[ V{ 3 4 } ] [ 2 4 1 10 dup iota <slice> subseq >vector ] unit-test
 | 
				
			||||||
[ V{ 3 4 } ] [ 0 2 2 4 1 10 dup iota <slice> <slice> subseq >vector ] unit-test
 | 
					[ V{ 3 4 } ] [ 0 2 2 4 1 10 dup iota <slice> <slice> subseq >vector ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ "abc" ] [ 0 3 "abc" ?subseq ] unit-test
 | 
				
			||||||
 | 
					[ "abc" ] [ 0 5 "abc" ?subseq ] unit-test
 | 
				
			||||||
 | 
					[ "bc" ] [ 1 5 "abc" ?subseq ] unit-test
 | 
				
			||||||
 | 
					[ "abc" ] [ -1 3 "abc" ?subseq ] unit-test
 | 
				
			||||||
[ 0 10 "hello" <slice> ] must-fail
 | 
					[ 0 10 "hello" <slice> ] must-fail
 | 
				
			||||||
[ -10 3 "hello" <slice> ] must-fail
 | 
					[ -10 3 "hello" <slice> ] must-fail
 | 
				
			||||||
[ 2 1 "hello" <slice> ] must-fail
 | 
					[ 2 1 "hello" <slice> ] must-fail
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -293,6 +293,12 @@ PRIVATE>
 | 
				
			||||||
: subseq ( from to seq -- subseq )
 | 
					: subseq ( from to seq -- subseq )
 | 
				
			||||||
    [ check-slice subseq>copy (copy) ] keep like ;
 | 
					    [ check-slice subseq>copy (copy) ] keep like ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: ?subseq ( from to seq -- subseq )
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        [ 0 ] dip length [ clamp ] 2curry bi@
 | 
				
			||||||
 | 
					        2dup > [ nip dup ] when
 | 
				
			||||||
 | 
					    ] keep subseq f like ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: head ( seq n -- headseq ) (head) subseq ;
 | 
					: head ( seq n -- headseq ) (head) subseq ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: tail ( seq n -- tailseq ) (tail) subseq ;
 | 
					: tail ( seq n -- tailseq ) (tail) subseq ;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,17 +11,6 @@ nested-comments random sequences slots.syntax splitting strings
 | 
				
			||||||
system unicode.categories vectors vocabs.loader unicode.case ;
 | 
					system unicode.categories vectors vocabs.loader unicode.case ;
 | 
				
			||||||
IN: dns
 | 
					IN: dns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GENERIC: stream-peek1 ( stream -- byte/f )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
M: input-port stream-peek1
 | 
					 | 
				
			||||||
    dup check-disposed dup wait-to-read
 | 
					 | 
				
			||||||
    [ drop f ] [ buffer>> buffer-peek ] if ; inline
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
M: byte-reader stream-peek1
 | 
					 | 
				
			||||||
    [ i>> ] [ underlying>> ] bi ?nth ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: peek1 ( -- byte ) input-stream get stream-peek1 ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: with-temporary-input-seek ( n seek-type quot -- )
 | 
					: with-temporary-input-seek ( n seek-type quot -- )
 | 
				
			||||||
    tell-input [
 | 
					    tell-input [
 | 
				
			||||||
        [ seek-input ] dip call
 | 
					        [ seek-input ] dip call
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,14 +74,6 @@ CONSTANT: block-terminator HEX: 00
 | 
				
			||||||
        V{ } clone >>comment-extensions
 | 
					        V{ } clone >>comment-extensions
 | 
				
			||||||
        t >>loading? ;
 | 
					        t >>loading? ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GENERIC: stream-peek1 ( stream -- byte )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
M: input-port stream-peek1
 | 
					 | 
				
			||||||
    dup check-disposed dup wait-to-read
 | 
					 | 
				
			||||||
    [ drop f ] [ buffer>> buffer-peek ] if ; inline
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: peek1 ( -- byte ) input-stream get stream-peek1 ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: (read-sub-blocks) ( -- )
 | 
					: (read-sub-blocks) ( -- )
 | 
				
			||||||
    read1 [ read , (read-sub-blocks) ] unless-zero ;
 | 
					    read1 [ read , (read-sub-blocks) ] unless-zero ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue