| /* |
| * State |
| * |
| * Authors: Lasse Collin <lasse.collin@tukaani.org> |
| * Igor Pavlov <http://7-zip.org/> |
| * |
| * This file has been put into the public domain. |
| * You can do whatever you want with this file. |
| */ |
| |
| package org.tukaani.xz.lzma; |
| |
| final class State { |
| static final int STATES = 12; |
| |
| private static final int LIT_STATES = 7; |
| |
| private static final int LIT_LIT = 0; |
| private static final int MATCH_LIT_LIT = 1; |
| private static final int REP_LIT_LIT = 2; |
| private static final int SHORTREP_LIT_LIT = 3; |
| private static final int MATCH_LIT = 4; |
| private static final int REP_LIT = 5; |
| private static final int SHORTREP_LIT = 6; |
| private static final int LIT_MATCH = 7; |
| private static final int LIT_LONGREP = 8; |
| private static final int LIT_SHORTREP = 9; |
| private static final int NONLIT_MATCH = 10; |
| private static final int NONLIT_REP = 11; |
| |
| private int state; |
| |
| State() {} |
| |
| State(State other) { |
| state = other.state; |
| } |
| |
| void reset() { |
| state = LIT_LIT; |
| } |
| |
| int get() { |
| return state; |
| } |
| |
| void set(State other) { |
| state = other.state; |
| } |
| |
| void updateLiteral() { |
| if (state <= SHORTREP_LIT_LIT) |
| state = LIT_LIT; |
| else if (state <= LIT_SHORTREP) |
| state -= 3; |
| else |
| state -= 6; |
| } |
| |
| void updateMatch() { |
| state = state < LIT_STATES ? LIT_MATCH : NONLIT_MATCH; |
| } |
| |
| void updateLongRep() { |
| state = state < LIT_STATES ? LIT_LONGREP : NONLIT_REP; |
| } |
| |
| void updateShortRep() { |
| state = state < LIT_STATES ? LIT_SHORTREP : NONLIT_REP; |
| } |
| |
| boolean isLiteral() { |
| return state < LIT_STATES; |
| } |
| } |