OSDN Git Service

Add new source files
[armadillo/armadillo1.git] / src / jp / sfjp / armadillo / archive / lzh / LzhMethod.java
1 package jp.sfjp.armadillo.archive.lzh;
2
3 /**
4  * LZH compression method.
5  */
6 public final class LzhMethod {
7
8     /** <code>LHD</code> */
9     public static final String LHD = "-lhd-";
10     /** <code>LH0</code> */
11     public static final String LH0 = "-lh0-";
12     /** <code>LH4</code> */
13     public static final String LH4 = "-lh4-";
14     /** <code>LH5</code> */
15     public static final String LH5 = "-lh5-";
16     /** <code>LH6</code> */
17     public static final String LH6 = "-lh6-";
18     /** <code>LH7</code> */
19     public static final String LH7 = "-lh7-";
20
21     private final String methodName;
22     private final int dictionarySize;
23     private final int matchSize;
24     private final int threshold;
25
26     public LzhMethod(String methodName) throws LzhException {
27         this.methodName = methodName;
28         this.dictionarySize = detectDictionarySize(methodName);
29         this.matchSize = (dictionarySize == 0) ? 0 : 256;
30         this.threshold = (dictionarySize == 0) ? 0 : 3;
31     }
32
33     private static int detectDictionarySize(String methodName) throws LzhException {
34         if (methodName.matches("-lh[d0]-"))
35             return 0;
36         else if (methodName.matches("-lh[4567]-"))
37             switch (methodName.charAt(3)) {
38                 case '4':
39                     return 4096;
40                 case '5':
41                 default:
42                     return 8192;
43                 case '6':
44                     return 32768;
45                 case '7':
46                     return 65536;
47             }
48         else
49             throw new LzhException("unsupported method: " + methodName);
50     }
51
52     public String getMethodName() {
53         return methodName;
54     }
55
56     public int getDictionarySize() {
57         return dictionarySize;
58     }
59
60     public int getMatchSize() {
61         return matchSize;
62     }
63
64     public int getThreshold() {
65         return threshold;
66     }
67
68     public boolean isCompressing() {
69         return dictionarySize > 0;
70     }
71
72     public static boolean isCompressing(String methodName) throws LzhException {
73         return detectDictionarySize(methodName) > 0;
74     }
75
76 }