Merge "Some more simplification of DecoderSpec works"
commit
9e58ae4698
|
@ -32,6 +32,7 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -52,12 +53,18 @@ public final class BinaryDictOffdeviceUtils {
|
||||||
public final static int ENCRYPTION = 2;
|
public final static int ENCRYPTION = 2;
|
||||||
private final static int MAX_DECODE_DEPTH = 4;
|
private final static int MAX_DECODE_DEPTH = 4;
|
||||||
|
|
||||||
ArrayList<Integer> mDecoderSpec = new ArrayList<>();
|
final int[] mDecoderSpec;
|
||||||
File mFile;
|
File mFile;
|
||||||
|
|
||||||
public DecoderChainSpec addStep(final int stepDescription) {
|
public DecoderChainSpec() {
|
||||||
mDecoderSpec.add(stepDescription);
|
mDecoderSpec = new int[0];
|
||||||
return this;
|
mFile = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DecoderChainSpec(final DecoderChainSpec src, final int newStep) {
|
||||||
|
mDecoderSpec = Arrays.copyOf(src.mDecoderSpec, src.mDecoderSpec.length + 1);
|
||||||
|
mDecoderSpec[src.mDecoderSpec.length] = newStep;
|
||||||
|
mFile = src.mFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getStepDescription(final int step) {
|
private String getStepDescription(final int step) {
|
||||||
|
@ -120,7 +127,7 @@ public final class BinaryDictOffdeviceUtils {
|
||||||
final DecoderChainSpec newSpec =
|
final DecoderChainSpec newSpec =
|
||||||
getRawDictionaryOrNullInternal(spec, uncompressedFile, depth + 1);
|
getRawDictionaryOrNullInternal(spec, uncompressedFile, depth + 1);
|
||||||
if (null == newSpec) return null;
|
if (null == newSpec) return null;
|
||||||
return newSpec.addStep(DecoderChainSpec.COMPRESSION);
|
return new DecoderChainSpec(newSpec, DecoderChainSpec.COMPRESSION);
|
||||||
}
|
}
|
||||||
// It's not a compressed either - try to see if it's crypted.
|
// It's not a compressed either - try to see if it's crypted.
|
||||||
final File decryptedFile = tryGetDecryptedFile(src);
|
final File decryptedFile = tryGetDecryptedFile(src);
|
||||||
|
@ -128,7 +135,7 @@ public final class BinaryDictOffdeviceUtils {
|
||||||
final DecoderChainSpec newSpec =
|
final DecoderChainSpec newSpec =
|
||||||
getRawDictionaryOrNullInternal(spec, decryptedFile, depth + 1);
|
getRawDictionaryOrNullInternal(spec, decryptedFile, depth + 1);
|
||||||
if (null == newSpec) return null;
|
if (null == newSpec) return null;
|
||||||
return newSpec.addStep(DecoderChainSpec.ENCRYPTION);
|
return new DecoderChainSpec(newSpec, DecoderChainSpec.ENCRYPTION);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,7 +82,7 @@ public class BinaryDictOffdeviceUtilsTests extends TestCase {
|
||||||
assertEquals("Wrong decode spec",
|
assertEquals("Wrong decode spec",
|
||||||
BinaryDictOffdeviceUtils.DecoderChainSpec.COMPRESSION, step);
|
BinaryDictOffdeviceUtils.DecoderChainSpec.COMPRESSION, step);
|
||||||
}
|
}
|
||||||
assertEquals("Wrong decode spec", 3, decodeSpec.mDecoderSpec.size());
|
assertEquals("Wrong decode spec", 3, decodeSpec.mDecoderSpec.length);
|
||||||
final DictDecoder dictDecoder = BinaryDictIOUtils.getDictDecoder(decodeSpec.mFile, 0,
|
final DictDecoder dictDecoder = BinaryDictIOUtils.getDictDecoder(decodeSpec.mFile, 0,
|
||||||
decodeSpec.mFile.length());
|
decodeSpec.mFile.length());
|
||||||
final FusionDictionary resultDict =
|
final FusionDictionary resultDict =
|
||||||
|
|
Loading…
Reference in New Issue