// Path: src/main/java/org/jamel/j7zip/common/LongVector.java
// public class LongVector {
//     private static final int CAPACITY_INCR = 10;
// 
//     private long[] data = new long[CAPACITY_INCR];
//     int elt = 0;
// 
//     public LongVector() {
//     }
// 
//     public int size() {
//         return elt;
//     }
// 
//     private void ensureCapacity(int minCapacity) {
//         int oldCapacity = data.length;
//         if (minCapacity > oldCapacity) {
//             long[] oldData = data;
//             int newCapacity = oldCapacity + CAPACITY_INCR;
//             if (newCapacity < minCapacity) {
//                 newCapacity = minCapacity;
//             }
//             data = new long[newCapacity];
//             System.arraycopy(oldData, 0, data, 0, elt);
//         }
//     }
// 
//     public long get(int index) {
//         if (index >= elt) {
//             throw new ArrayIndexOutOfBoundsException(index);
//         }
// 
//         return data[index];
//     }
// 
//     public void Reserve(int s) {
//         ensureCapacity(s);
//     }
// 
//     public void add(long b) {
//         ensureCapacity(elt + 1);
//         data[elt++] = b;
//     }
// 
//     public void clear() {
//         elt = 0;
//     }
// 
//     public boolean isEmpty() {
//         return elt == 0;
//     }
// 
//     public long Back() {
//         if (elt < 1) {
//             throw new ArrayIndexOutOfBoundsException(0);
//         }
// 
//         return data[elt - 1];
//     }
// 
//     public void DeleteBack() {
//         remove(elt - 1);
//     }
// 
//     public long remove(int index) {
//         if (index >= elt) {
//             throw new ArrayIndexOutOfBoundsException(index);
//         }
//         long oldValue = data[index];
// 
//         int numMoved = elt - index - 1;
//         if (numMoved > 0) {
//             System.arraycopy(data, index + 1, data, index, numMoved);
//         }
// 
//         return oldValue;
//     }
// 
// }
// 
// Path: src/main/java/org/jamel/j7zip/common/ObjectVector.java
// public class ObjectVector<E> extends ArrayList<E> {
// 
//     public ObjectVector() {
//         super();
//     }
// 
//     public void reserve(int s) {
//         ensureCapacity(s);
//     }
// 
//     public E last() {
//         return get(size() - 1);
//     }
// 
//     public E first() {
//         return get(0);
//     }
// 
//     public E popLast() {
//         return remove(size() - 1);
//     }
// }
// 
// Path: src/main/java/org/jamel/j7zip/ICompressCoder.java
// public interface ICompressCoder {
// 
//     void code(InputStream inStream, OutputStream outStream, long outSize) throws IOException;
// }
// 
// Path: src/main/java/org/jamel/j7zip/ICompressCoder2.java
// public interface ICompressCoder2 {
// 
//     public Result code(
//             ObjectVector<InputStream> inStreams,
//             int numInStreams,
//             ObjectVector<OutputStream> outStreams,
//             int numOutStreams) throws java.io.IOException;
// 
//     public void close() throws java.io.IOException;
// }
// 
// Path: src/main/java/org/jamel/j7zip/ICompressSetInStream.java
// public interface ICompressSetInStream {
// 
//     public void setInStream(java.io.InputStream inStream);
// 
//     public void releaseInStream() throws java.io.IOException;
// }
// 
// Path: src/main/java/org/jamel/j7zip/ICompressSetOutStream.java
// public interface ICompressSetOutStream {
// 
//     void setOutStream(OutputStream inStream);
// }
// 
// Path: src/main/java/org/jamel/j7zip/ICompressSetOutStreamSize.java
// public interface ICompressSetOutStreamSize {
//     public static final int INVALID_OUTSIZE = -1;
// 
//     public void setOutStreamSize(long outSize);
// }
// 
// Path: src/main/java/org/jamel/j7zip/Result.java
// public enum Result {
//     OK,
//     FALSE,
// 
//     ERROR_NOT_IMPLEMENTED,
//     ERROR_FAIL,
//     ERROR_INVALID_ARGS,
//     ;
// }


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.jamel.j7zip.common.LongVector;
import org.jamel.j7zip.common.ObjectVector;
import org.jamel.j7zip.ICompressCoder;
import org.jamel.j7zip.ICompressCoder2;
import org.jamel.j7zip.ICompressSetInStream;
import org.jamel.j7zip.ICompressSetOutStream;
import org.jamel.j7zip.ICompressSetOutStreamSize;
import org.jamel.j7zip.Result;
package org.jamel.j7zip.archive.common;



public class CoderMixer2ST implements ICompressCoder2, CoderMixer2 {

    private BindInfo bindInfo = new BindInfo();
    private ObjectVector<STCoderInfo> coders = new ObjectVector<>();


    public void setBindInfo(BindInfo bindInfo) {
        this.bindInfo = bindInfo;
    }

    public void addCoderCommon(boolean isMain) {
        CoderStreamsInfo csi = bindInfo.coders.get(coders.size());
        coders.add(new STCoderInfo(csi.getInStreamsCount(), csi.getOutStreamsCount(), isMain));
    }

    public void addCoder2(ICompressCoder2 coder, boolean isMain) {
        addCoderCommon(isMain);
        coders.last().Coder2 = coder;
    }

    public void addCoder(ICompressCoder coder, boolean isMain) {
        addCoderCommon(isMain);
        coders.last().Coder = coder;
    }

// Path: src/main/java/org/jamel/j7zip/common/LongVector.java
// public class LongVector {
//     private static final int CAPACITY_INCR = 10;
// 
//     private long[] data = new long[CAPACITY_INCR];
//     int elt = 0;
// 
//     public LongVector() {
//     }
// 
//     public int size() {
//         return elt;
//     }
// 
//     private void ensureCapacity(int minCapacity) {
//         int oldCapacity = data.length;
//         if (minCapacity > oldCapacity) {
//             long[] oldData = data;
//             int newCapacity = oldCapacity + CAPACITY_INCR;
//             if (newCapacity < minCapacity) {
//                 newCapacity = minCapacity;
//             }
//             data = new long[newCapacity];
//             System.arraycopy(oldData, 0, data, 0, elt);
//         }
//     }
// 
//     public long get(int index) {
//         if (index >= elt) {
//             throw new ArrayIndexOutOfBoundsException(index);
//         }
// 
//         return data[index];
//     }
// 
//     public void Reserve(int s) {
//         ensureCapacity(s);
//     }
// 
//     public void add(long b) {
//         ensureCapacity(elt + 1);
//         data[elt++] = b;
//     }
// 
//     public void clear() {
//         elt = 0;
//     }
// 
//     public boolean isEmpty() {
//         return elt == 0;
//     }
// 
//     public long Back() {
//         if (elt < 1) {
//             throw new ArrayIndexOutOfBoundsException(0);
//         }
// 
//         return data[elt - 1];
//     }
// 
//     public void DeleteBack() {
//         remove(elt - 1);
//     }
// 
//     public long remove(int index) {
//         if (index >= elt) {
//             throw new ArrayIndexOutOfBoundsException(index);
//         }
//         long oldValue = data[index];
// 
//         int numMoved = elt - index - 1;
//         if (numMoved > 0) {
//             System.arraycopy(data, index + 1, data, index, numMoved);
//         }
// 
//         return oldValue;
//     }
// 
// }
// 
// Path: src/main/java/org/jamel/j7zip/common/ObjectVector.java
// public class ObjectVector<E> extends ArrayList<E> {
// 
//     public ObjectVector() {
//         super();
//     }
// 
//     public void reserve(int s) {
//         ensureCapacity(s);
//     }
// 
//     public E last() {
//         return get(size() - 1);
//     }
// 
//     public E first() {
//         return get(0);
//     }
// 
//     public E popLast() {
//         return remove(size() - 1);
//     }
// }
// 
// Path: src/main/java/org/jamel/j7zip/ICompressCoder.java
// public interface ICompressCoder {
// 
//     void code(InputStream inStream, OutputStream outStream, long outSize) throws IOException;
// }
// 
// Path: src/main/java/org/jamel/j7zip/ICompressCoder2.java
// public interface ICompressCoder2 {
// 
//     public Result code(
//             ObjectVector<InputStream> inStreams,
//             int numInStreams,
//             ObjectVector<OutputStream> outStreams,
//             int numOutStreams) throws java.io.IOException;
// 
//     public void close() throws java.io.IOException;
// }
// 
// Path: src/main/java/org/jamel/j7zip/ICompressSetInStream.java
// public interface ICompressSetInStream {
// 
//     public void setInStream(java.io.InputStream inStream);
// 
//     public void releaseInStream() throws java.io.IOException;
// }
// 
// Path: src/main/java/org/jamel/j7zip/ICompressSetOutStream.java
// public interface ICompressSetOutStream {
// 
//     void setOutStream(OutputStream inStream);
// }
// 
// Path: src/main/java/org/jamel/j7zip/ICompressSetOutStreamSize.java
// public interface ICompressSetOutStreamSize {
//     public static final int INVALID_OUTSIZE = -1;
// 
//     public void setOutStreamSize(long outSize);
// }
// 
// Path: src/main/java/org/jamel/j7zip/Result.java
// public enum Result {
//     OK,
//     FALSE,
// 
//     ERROR_NOT_IMPLEMENTED,
//     ERROR_FAIL,
//     ERROR_INVALID_ARGS,
//     ;
// }


// Path: src/main/java/org/jamel/j7zip/archive/common/CoderMixer2ST.java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.jamel.j7zip.common.LongVector;
import org.jamel.j7zip.common.ObjectVector;
import org.jamel.j7zip.ICompressCoder;
import org.jamel.j7zip.ICompressCoder2;
import org.jamel.j7zip.ICompressSetInStream;
import org.jamel.j7zip.ICompressSetOutStream;
import org.jamel.j7zip.ICompressSetOutStreamSize;
import org.jamel.j7zip.Result;

package org.jamel.j7zip.archive.common;



public class CoderMixer2ST implements ICompressCoder2, CoderMixer2 {

    private BindInfo bindInfo = new BindInfo();
    private ObjectVector<STCoderInfo> coders = new ObjectVector<>();


    public void setBindInfo(BindInfo bindInfo) {
        this.bindInfo = bindInfo;
    }

    public void addCoderCommon(boolean isMain) {
        CoderStreamsInfo csi = bindInfo.coders.get(coders.size());
        coders.add(new STCoderInfo(csi.getInStreamsCount(), csi.getOutStreamsCount(), isMain));
    }

    public void addCoder2(ICompressCoder2 coder, boolean isMain) {
        addCoderCommon(isMain);
        coders.last().Coder2 = coder;
    }

    public void addCoder(ICompressCoder coder, boolean isMain) {
        addCoderCommon(isMain);
        coders.last().Coder = coder;
    }

    public void setCoderInfo(int coderIndex, LongVector inSizes, LongVector outSizes) {