io.buffers: adding a buffer-read-into that can take a c-ptr or a sequence.

db4
John Benediktsson 2014-11-20 14:40:43 -08:00
parent 0a31a7c17a
commit c60a3e6e80
2 changed files with 27 additions and 4 deletions

View File

@ -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

View File

@ -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