diff options
Diffstat (limited to 'src/org/tukaani/xz/LZMA2Encoder.java')
-rw-r--r-- | src/org/tukaani/xz/LZMA2Encoder.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/org/tukaani/xz/LZMA2Encoder.java b/src/org/tukaani/xz/LZMA2Encoder.java new file mode 100644 index 0000000..6f3cab4 --- /dev/null +++ b/src/org/tukaani/xz/LZMA2Encoder.java @@ -0,0 +1,51 @@ +/* + * LZMA2Encoder + * + * Author: Lasse Collin <lasse.collin@tukaani.org> + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + */ + +package org.tukaani.xz; + +import org.tukaani.xz.lzma.LZMAEncoder; + +class LZMA2Encoder extends LZMA2Coder implements FilterEncoder { + private final LZMA2Options options; + private final byte[] props = new byte[1]; + + LZMA2Encoder(LZMA2Options options) { + if (options.getPresetDict() != null) + throw new IllegalArgumentException( + "XZ doesn't support a preset dictionary for now"); + + if (options.getMode() == LZMA2Options.MODE_UNCOMPRESSED) { + props[0] = (byte)0; + } else { + int d = Math.max(options.getDictSize(), + LZMA2Options.DICT_SIZE_MIN); + props[0] = (byte)(LZMAEncoder.getDistSlot(d - 1) - 23); + } + + // Make a private copy so that the caller is free to change its copy. + this.options = (LZMA2Options)options.clone(); + } + + public long getFilterID() { + return FILTER_ID; + } + + public byte[] getFilterProps() { + return props; + } + + public boolean supportsFlushing() { + return true; + } + + public FinishableOutputStream getOutputStream(FinishableOutputStream out, + ArrayCache arrayCache) { + return options.getOutputStream(out, arrayCache); + } +} |