diff --git a/basis/pack/pack.factor b/basis/pack/pack.factor index 8f00792c47..136deb9ff5 100755 --- a/basis/pack/pack.factor +++ b/basis/pack/pack.factor @@ -11,9 +11,13 @@ SYMBOL: big-endian : big-endian? ( -- ? ) 1 *char zero? ; + + : >endian ( obj n -- str ) big-endian get [ >be ] [ >le ] if ; inline @@ -44,6 +48,8 @@ M: string b, ( n string -- ) heap-size b, ; : double, ( n -- ) double>bits 8 b, ; : c-string, ( str -- ) % 0 u8, ; +128-ber) ( n -- ) dup 0 > [ [ HEX: 7f bitand HEX: 80 bitor , ] keep -7 shift @@ -52,6 +58,8 @@ M: string b, ( n string -- ) heap-size b, ; drop ] if ; +PRIVATE> + : >128-ber ( n -- str ) [ [ HEX: 7f bitand , ] keep -7 shift @@ -99,6 +107,8 @@ M: string b, ( n string -- ) heap-size b, ; : read-128-ber ( -- n ) 0 (read-128-ber) ; + : pack-native ( seq str -- seq ) - [ set-big-endian (pack) ] with-scope ; inline + [ set-big-endian pack ] with-scope ; inline : pack-be ( seq str -- seq ) - [ big-endian on (pack) ] with-scope ; inline + [ big-endian on pack ] with-scope ; inline : pack-le ( seq str -- seq ) - [ big-endian off (pack) ] with-scope ; inline + [ big-endian off pack ] with-scope ; inline -MACRO: (unpack) ( str -- quot ) + + : unpack-native ( seq str -- seq ) - [ set-big-endian (unpack) ] with-scope ; inline + [ set-big-endian unpack ] with-scope ; inline : unpack-be ( seq str -- seq ) - [ big-endian on (unpack) ] with-scope ; inline + [ big-endian on unpack ] with-scope ; inline : unpack-le ( seq str -- seq ) - [ big-endian off (unpack) ] with-scope ; inline + [ big-endian off unpack ] with-scope ; inline : packed-length ( str -- n ) [ packed-length-table at ] sigma ;