1 | /*
|
---|
2 | * State
|
---|
3 | *
|
---|
4 | * Authors: Lasse Collin <lasse.collin@tukaani.org>
|
---|
5 | * Igor Pavlov <http://7-zip.org/>
|
---|
6 | *
|
---|
7 | * This file has been put into the public domain.
|
---|
8 | * You can do whatever you want with this file.
|
---|
9 | */
|
---|
10 |
|
---|
11 | package org.tukaani.xz.lzma;
|
---|
12 |
|
---|
13 | final class State {
|
---|
14 | static final int STATES = 12;
|
---|
15 |
|
---|
16 | private static final int LIT_STATES = 7;
|
---|
17 |
|
---|
18 | private static final int LIT_LIT = 0;
|
---|
19 | private static final int MATCH_LIT_LIT = 1;
|
---|
20 | private static final int REP_LIT_LIT = 2;
|
---|
21 | private static final int SHORTREP_LIT_LIT = 3;
|
---|
22 | private static final int MATCH_LIT = 4;
|
---|
23 | private static final int REP_LIT = 5;
|
---|
24 | private static final int SHORTREP_LIT = 6;
|
---|
25 | private static final int LIT_MATCH = 7;
|
---|
26 | private static final int LIT_LONGREP = 8;
|
---|
27 | private static final int LIT_SHORTREP = 9;
|
---|
28 | private static final int NONLIT_MATCH = 10;
|
---|
29 | private static final int NONLIT_REP = 11;
|
---|
30 |
|
---|
31 | private int state;
|
---|
32 |
|
---|
33 | State() {}
|
---|
34 |
|
---|
35 | State(State other) {
|
---|
36 | state = other.state;
|
---|
37 | }
|
---|
38 |
|
---|
39 | void reset() {
|
---|
40 | state = LIT_LIT;
|
---|
41 | }
|
---|
42 |
|
---|
43 | int get() {
|
---|
44 | return state;
|
---|
45 | }
|
---|
46 |
|
---|
47 | void set(State other) {
|
---|
48 | state = other.state;
|
---|
49 | }
|
---|
50 |
|
---|
51 | void updateLiteral() {
|
---|
52 | if (state <= SHORTREP_LIT_LIT)
|
---|
53 | state = LIT_LIT;
|
---|
54 | else if (state <= LIT_SHORTREP)
|
---|
55 | state -= 3;
|
---|
56 | else
|
---|
57 | state -= 6;
|
---|
58 | }
|
---|
59 |
|
---|
60 | void updateMatch() {
|
---|
61 | state = state < LIT_STATES ? LIT_MATCH : NONLIT_MATCH;
|
---|
62 | }
|
---|
63 |
|
---|
64 | void updateLongRep() {
|
---|
65 | state = state < LIT_STATES ? LIT_LONGREP : NONLIT_REP;
|
---|
66 | }
|
---|
67 |
|
---|
68 | void updateShortRep() {
|
---|
69 | state = state < LIT_STATES ? LIT_SHORTREP : NONLIT_REP;
|
---|
70 | }
|
---|
71 |
|
---|
72 | boolean isLiteral() {
|
---|
73 | return state < LIT_STATES;
|
---|
74 | }
|
---|
75 | }
|
---|