/*
 * 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) {
        return options.getOutputStream(out);
    }
}
