Compress Vector of Short Integers R←X(219⌶)Y
In this section, the term sint_vector is used to refer to a simple integer vector whose items are all in the range ¯128
to 127
, that is, they are type 83.
For further information see Data Representation (Monadic).
In most cases this I-Beam functionality will be used in conjunction with 220⌶
(Serialise/Deserialise Array). However, it may be possible to pass the raw compressed data to and from other applications.
X
specifies the operation to be performed, either compression or decompression, the compression library to be used, and any optional parameters. Y
contains the data to be operated on.
Compression
Y
must be a sint_vector.
R
is a two item vector, each of which is a sint_vector. R[1]
describes the compression, and R[2]
contains the raw data which is the result of applying the compression library to the input data Y
.
X
is specified as follows:
X[1] |
X[2] |
Compression Library |
1 | n/a | LZ4 |
2 | 0 .. 9 | zlib |
3 | 0 .. 9 | gzip |
4 | n/a | LZ4 with frames (compresses arrays >2GB) |
If LZ4 compression is required, then X
must either be a scalar or a one element vector. Otherwise, X[2]
, if present, specifies the compression level; higher numbers produce better compression, but take longer.
Decompression
R
is a sint_vector, containing the output of applying the decompression library to the input data, Y
.
If X
is a scalar or a one item vector, and has the value 0, then Y
must be a vector of two items which is the result of previously calling 219⌶
to compress a sint_vector.
Otherwise, X
is a scalar or one or two element vector and Y
must be a sint_vector.
The first element of X
must be one of the following values.
X[1] |
Compression Library |
¯1 |
LZ4 |
¯2 |
zlib |
¯3 |
gzip |
The second, optional, element of X
specifies the length of the uncompressed data. Its presence results in a more efficient use of the compression library.
X
may not be a two item vector whose first item has the value 0.
Examples
sint←{⍵-256×⍵>127}
utf8←'UTF-8'∘⎕ucs
str←'empty←⍬'
⊣v←sint utf8 str
101 109 112 116 121 ¯30 ¯122 ¯112 ¯30 ¯115 ¯84
⊣comp←1 (219⌶) v
8 ¯55 1 0 0 0 0 11 ¯80 101 109 112 116 121 ¯30 ¯122 ¯112 ¯30 ¯115 ¯84
utf8 256| 0(219⌶)comp
empty←⍬
utf8 256| ¯1(219⌶)2⊃comp
empty←⍬