aboutsummaryrefslogtreecommitdiff
path: root/src/org/tukaani/xz/lzma/State.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/tukaani/xz/lzma/State.java')
-rw-r--r--src/org/tukaani/xz/lzma/State.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/org/tukaani/xz/lzma/State.java b/src/org/tukaani/xz/lzma/State.java
new file mode 100644
index 0000000..0ece860
--- /dev/null
+++ b/src/org/tukaani/xz/lzma/State.java
@@ -0,0 +1,75 @@
+/*
+ * 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;
+ }
+}