aboutsummaryrefslogtreecommitdiff
path: root/src/org/tukaani/xz/LZMA2Encoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/tukaani/xz/LZMA2Encoder.java')
-rw-r--r--src/org/tukaani/xz/LZMA2Encoder.java51
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);
+ }
+}