io.buffers: adding a buffer-read-into that can take a c-ptr or a sequence.
							parent
							
								
									0a31a7c17a
								
							
						
					
					
						commit
						c60a3e6e80
					
				| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
IN: io.buffers.tests
 | 
			
		||||
USING: alien alien.c-types alien.data io.buffers kernel
 | 
			
		||||
kernel.private libc sequences tools.test namespaces byte-arrays
 | 
			
		||||
strings accessors destructors ;
 | 
			
		||||
USING: accessors alien alien.data arrays byte-arrays destructors
 | 
			
		||||
io.buffers kernel libc namespaces sequences strings tools.test ;
 | 
			
		||||
 | 
			
		||||
: buffer-set ( string buffer -- )
 | 
			
		||||
    [ ptr>> swap >byte-array binary-object memcpy ]
 | 
			
		||||
| 
						 | 
				
			
			@ -63,3 +62,15 @@ strings accessors destructors ;
 | 
			
		|||
"hello world" string>buffer "b" set
 | 
			
		||||
[ "hello" CHAR: \s ] [ " " "b" get buffer-read-until [ >string ] dip ] unit-test
 | 
			
		||||
"b" get dispose
 | 
			
		||||
 | 
			
		||||
[ 4 B{ 1 2 3 4 0 0 0 0 0 0 } ] [
 | 
			
		||||
    10 <buffer>
 | 
			
		||||
    [ B{ 1 2 3 4 } binary-object rot buffer-write ]
 | 
			
		||||
    [ 10 <byte-array> [ 10 rot buffer-read-into ] keep ] bi
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
[ 4 { 1 2 3 4 f f f f f f } ] [
 | 
			
		||||
    10 <buffer>
 | 
			
		||||
    [ B{ 1 2 3 4 } binary-object rot buffer-write ]
 | 
			
		||||
    [ 10 f <array> [ 10 rot buffer-read-into ] keep ] bi
 | 
			
		||||
] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: accessors alien alien.accessors alien.data byte-arrays
 | 
			
		||||
combinators destructors kernel libc math math.order sequences
 | 
			
		||||
typed ;
 | 
			
		||||
sequences.private typed ;
 | 
			
		||||
IN: io.buffers
 | 
			
		||||
 | 
			
		||||
TUPLE: buffer
 | 
			
		||||
| 
						 | 
				
			
			@ -51,6 +51,18 @@ TYPED: buffer-read-unsafe ( n: fixnum buffer: buffer -- n ptr )
 | 
			
		|||
TYPED: buffer-read ( n: fixnum buffer: buffer -- byte-array )
 | 
			
		||||
    buffer-read-unsafe swap memory>byte-array ; inline
 | 
			
		||||
 | 
			
		||||
TYPED: buffer-read-into ( dst n: fixnum buffer: buffer -- count )
 | 
			
		||||
    buffer-read-unsafe swap [
 | 
			
		||||
        pick c-ptr? [
 | 
			
		||||
            memcpy
 | 
			
		||||
        ] [
 | 
			
		||||
            -rot swap
 | 
			
		||||
            [ swap alien-unsigned-1 ]
 | 
			
		||||
            [ set-nth-unsafe ] bi-curry*
 | 
			
		||||
            [ bi ] 2curry each-integer
 | 
			
		||||
        ] if
 | 
			
		||||
    ] keep ; inline
 | 
			
		||||
 | 
			
		||||
TYPED: buffer-end ( buffer: buffer -- alien )
 | 
			
		||||
    [ fill>> ] [ ptr>> ] bi <displaced-alien> ; inline
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue