serialization of byte arrays
parent
2a6cd307de
commit
89435bd1b8
|
@ -7,7 +7,7 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
!
|
||||
IN: serialize
|
||||
USING: kernel kernel-internals math hashtables namespaces io strings sequences generic words errors arrays vectors ;
|
||||
USING: kernel kernel-internals math hashtables namespaces io strings sequences generic words errors arrays vectors alien ;
|
||||
|
||||
! Variable holding a sequence of objects already serialized
|
||||
SYMBOL: serialized
|
||||
|
@ -117,6 +117,16 @@ M: wrapper serialize ( obj -- )
|
|||
"W" write
|
||||
wrapped serialize ;
|
||||
|
||||
M: byte-array serialize ( obj -- )
|
||||
[
|
||||
"A" write
|
||||
dup add-object serialize
|
||||
dup length cells dup serialize
|
||||
[
|
||||
2dup alien-unsigned-1 serialize
|
||||
] repeat
|
||||
] serialize-shared drop ;
|
||||
|
||||
DEFER: deserialize ( -- obj )
|
||||
|
||||
: intern-object ( id obj -- )
|
||||
|
@ -186,6 +196,14 @@ DEFER: deserialize ( -- obj )
|
|||
deserialize array>tuple
|
||||
[ intern-object ] keep ;
|
||||
|
||||
: deserialize-byte-array ( -- byte-array )
|
||||
deserialize
|
||||
deserialize dup <byte-array> swap
|
||||
[
|
||||
deserialize pick pick set-alien-unsigned-1
|
||||
] repeat
|
||||
[ intern-object ] keep ;
|
||||
|
||||
: deserialize-unknown ( -- object )
|
||||
deserialize serialized get nth ;
|
||||
|
||||
|
@ -206,6 +224,7 @@ DEFER: deserialize ( -- obj )
|
|||
{ "h" deserialize-hashtable }
|
||||
{ "T" deserialize-tuple }
|
||||
{ "z" deserialize-zero }
|
||||
{ "A" deserialize-byte-array }
|
||||
{ "o" deserialize-unknown }
|
||||
}
|
||||
hash dup [ "Unknown typecode" throw ] unless nip execute ;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2006 Chris Double.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
!
|
||||
USING: test kernel serialize io math ;
|
||||
USING: test kernel serialize io math alien arrays ;
|
||||
IN: temporary
|
||||
|
||||
[ f ] [
|
||||
|
@ -151,4 +151,8 @@ TUPLE: serialize-test a b ;
|
|||
[ [ deserialize deserialize ] with-serialized ] string-in eq?
|
||||
] unit-test
|
||||
|
||||
|
||||
[ 50 ] [
|
||||
[ [ 5 <byte-array> 50 over 0 set-alien-unsigned-1 serialize ] with-serialized ] string-out
|
||||
[ [ deserialize ] with-serialized ] string-in
|
||||
0 alien-unsigned-1
|
||||
] unit-test
|
||||
|
|
Loading…
Reference in New Issue