serialization of byte arrays
parent
2a6cd307de
commit
89435bd1b8
|
@ -7,7 +7,7 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
!
|
!
|
||||||
IN: serialize
|
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
|
! Variable holding a sequence of objects already serialized
|
||||||
SYMBOL: serialized
|
SYMBOL: serialized
|
||||||
|
@ -117,6 +117,16 @@ M: wrapper serialize ( obj -- )
|
||||||
"W" write
|
"W" write
|
||||||
wrapped serialize ;
|
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 )
|
DEFER: deserialize ( -- obj )
|
||||||
|
|
||||||
: intern-object ( id obj -- )
|
: intern-object ( id obj -- )
|
||||||
|
@ -186,6 +196,14 @@ DEFER: deserialize ( -- obj )
|
||||||
deserialize array>tuple
|
deserialize array>tuple
|
||||||
[ intern-object ] keep ;
|
[ 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-unknown ( -- object )
|
||||||
deserialize serialized get nth ;
|
deserialize serialized get nth ;
|
||||||
|
|
||||||
|
@ -206,6 +224,7 @@ DEFER: deserialize ( -- obj )
|
||||||
{ "h" deserialize-hashtable }
|
{ "h" deserialize-hashtable }
|
||||||
{ "T" deserialize-tuple }
|
{ "T" deserialize-tuple }
|
||||||
{ "z" deserialize-zero }
|
{ "z" deserialize-zero }
|
||||||
|
{ "A" deserialize-byte-array }
|
||||||
{ "o" deserialize-unknown }
|
{ "o" deserialize-unknown }
|
||||||
}
|
}
|
||||||
hash dup [ "Unknown typecode" throw ] unless nip execute ;
|
hash dup [ "Unknown typecode" throw ] unless nip execute ;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2006 Chris Double.
|
! Copyright (C) 2006 Chris Double.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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
|
IN: temporary
|
||||||
|
|
||||||
[ f ] [
|
[ f ] [
|
||||||
|
@ -151,4 +151,8 @@ TUPLE: serialize-test a b ;
|
||||||
[ [ deserialize deserialize ] with-serialized ] string-in eq?
|
[ [ deserialize deserialize ] with-serialized ] string-in eq?
|
||||||
] unit-test
|
] 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