Deflate (String function)
Compress a longstring with deflate (String class)
[Introduced in Sirius Mods 7.4]
This function compresses a longstring using the "deflate" algorithm. The deflate algorithm is described completely in RFC 1951. It is very effective with HTML and XML data.
Syntax
%outString = string:Deflate[( [FixedCode= boolean], [LazyMatch= boolean], - [MaxChain= number], [Software= boolean])]
Syntax terms
| %outString | The resulting compressed string. |
|---|---|
| string | The string to be compressed. |
| FixedCode | FixedCode is an optional, name required, parameter that is a Boolean value that specifies whether the compression uses fixed codes or is dynamic, based on the contents of the input string.
|
| LazyMatch | LazyMatch is an optional, name required, parameter that is a Boolean value that specifies whether to use "lazy match" compression, as specified in RFC 1951. The default value for this argument is False (do not use "lazy match" compression). |
| MaxChain | MaxChain is an optional, name required, parameter that is a numeric value that specifies the maximum hash chain length, as explained in RFC 1951. The default value for this argument is 0. If specified, it must be between 0 and 99, inclusive. |
| Software | [Introduced in Model 204 version 8.0]
Software is an optional, name required, parameter that is a Boolean value that specifies whether to force the use of software compression instead of hardware compression.
The default value for this argument is False. |
Usage notes
- The NCMPBUF parameter must be set to a non-0 value during Model 204 initialization to allow use of the Deflate function; otherwise, invoking Deflate causes request cancellation.
- As with any compression scheme, it is possible that a particular string will become longer after compression. This would happen, for example, if a deflated string were passed to Deflate.
- Short strings (less than 128 bytes) typically compress better with
fixedCode=true.
Hardware vs. software compression
[Introduced in Model 204 version 8.0]
On IBM z15 and above processors, the Deflate method automatically exploits the DFLTCC (DEFLate Conversion Call) hardware instruction for significantly improved compression performance. The following differences apply when using hardware compression:
- The LazyMatch and MaxChain parameters have no effect when hardware compression is used. The hardware uses its own internal matching algorithm.
- The FixedCode parameter is honored by both hardware and software compression. When
fixedCode=true, the hardware generates compressed data with fixed Huffman codes instead of generating a Dynamic Huffman Table (GDHT). - Compressing the same input data multiple times may produce different compressed output due to the implementation-dependent hash function for duplicate string matching, as documented in the z/Architecture Principles of Operation. This is a property of the hardware itself, not a software issue.
- Hardware-compressed data can always be decompressed by any standards-compliant inflate implementation (and vice versa).
These differences also apply to the Gzip and Zip methods, which use Deflate compression internally.
Examples
In the following example, %out is set to the compressed version of the given string:
%out = 'How much wood could a woodchuck chuck':deflate(fixedCode=true)
The following example forces software compression:
%out = 'How much wood could a woodchuck chuck':deflate(software=true)
See also
- Inflate is used to decompress the string to its original value.
- Other related methods: