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