| /* |
| * BCJDecoder |
| * |
| * 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 java.io.InputStream; |
| import org.tukaani.xz.simple.*; |
| |
| class BCJDecoder extends BCJCoder implements FilterDecoder { |
| private final long filterID; |
| private final int startOffset; |
| |
| BCJDecoder(long filterID, byte[] props) |
| throws UnsupportedOptionsException { |
| assert isBCJFilterID(filterID); |
| this.filterID = filterID; |
| |
| if (props.length == 0) { |
| startOffset = 0; |
| } else if (props.length == 4) { |
| int n = 0; |
| for (int i = 0; i < 4; ++i) |
| n |= (props[i] & 0xFF) << (i * 8); |
| |
| startOffset = n; |
| } else { |
| throw new UnsupportedOptionsException( |
| "Unsupported BCJ filter properties"); |
| } |
| } |
| |
| public int getMemoryUsage() { |
| return SimpleInputStream.getMemoryUsage(); |
| } |
| |
| public InputStream getInputStream(InputStream in) { |
| SimpleFilter simpleFilter = null; |
| |
| if (filterID == X86_FILTER_ID) |
| simpleFilter = new X86(false, startOffset); |
| else if (filterID == POWERPC_FILTER_ID) |
| simpleFilter = new PowerPC(false, startOffset); |
| else if (filterID == IA64_FILTER_ID) |
| simpleFilter = new IA64(false, startOffset); |
| else if (filterID == ARM_FILTER_ID) |
| simpleFilter = new ARM(false, startOffset); |
| else if (filterID == ARMTHUMB_FILTER_ID) |
| simpleFilter = new ARMThumb(false, startOffset); |
| else if (filterID == SPARC_FILTER_ID) |
| simpleFilter = new SPARC(false, startOffset); |
| else |
| assert false; |
| |
| return new SimpleInputStream(in, simpleFilter); |
| } |
| } |