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
|
IN: io.buffers.tests
|
||||||
USING: alien alien.c-types alien.data io.buffers kernel
|
USING: accessors alien alien.data arrays byte-arrays destructors
|
||||||
kernel.private libc sequences tools.test namespaces byte-arrays
|
io.buffers kernel libc namespaces sequences strings tools.test ;
|
||||||
strings accessors destructors ;
|
|
||||||
|
|
||||||
: buffer-set ( string buffer -- )
|
: buffer-set ( string buffer -- )
|
||||||
[ ptr>> swap >byte-array binary-object memcpy ]
|
[ ptr>> swap >byte-array binary-object memcpy ]
|
||||||
|
@ -63,3 +62,15 @@ strings accessors destructors ;
|
||||||
"hello world" string>buffer "b" set
|
"hello world" string>buffer "b" set
|
||||||
[ "hello" CHAR: \s ] [ " " "b" get buffer-read-until [ >string ] dip ] unit-test
|
[ "hello" CHAR: \s ] [ " " "b" get buffer-read-until [ >string ] dip ] unit-test
|
||||||
"b" get dispose
|
"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.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien alien.accessors alien.data byte-arrays
|
USING: accessors alien alien.accessors alien.data byte-arrays
|
||||||
combinators destructors kernel libc math math.order sequences
|
combinators destructors kernel libc math math.order sequences
|
||||||
typed ;
|
sequences.private typed ;
|
||||||
IN: io.buffers
|
IN: io.buffers
|
||||||
|
|
||||||
TUPLE: buffer
|
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 )
|
TYPED: buffer-read ( n: fixnum buffer: buffer -- byte-array )
|
||||||
buffer-read-unsafe swap memory>byte-array ; inline
|
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 )
|
TYPED: buffer-end ( buffer: buffer -- alien )
|
||||||
[ fill>> ] [ ptr>> ] bi <displaced-alien> ; inline
|
[ fill>> ] [ ptr>> ] bi <displaced-alien> ; inline
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue