11e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan/* 21e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * State 31e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * 41e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * Authors: Lasse Collin <lasse.collin@tukaani.org> 51e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * Igor Pavlov <http://7-zip.org/> 61e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * 71e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * This file has been put into the public domain. 81e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * You can do whatever you want with this file. 91e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan */ 101e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 111e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnanpackage org.tukaani.xz.lzma; 121e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 131e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnanfinal class State { 141e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan static final int STATES = 12; 151e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 161e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int LIT_STATES = 7; 171e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 181e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int LIT_LIT = 0; 191e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int MATCH_LIT_LIT = 1; 201e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int REP_LIT_LIT = 2; 211e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int SHORTREP_LIT_LIT = 3; 221e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int MATCH_LIT = 4; 231e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int REP_LIT = 5; 241e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int SHORTREP_LIT = 6; 251e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int LIT_MATCH = 7; 261e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int LIT_LONGREP = 8; 271e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int LIT_SHORTREP = 9; 281e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int NONLIT_MATCH = 10; 291e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private static final int NONLIT_REP = 11; 301e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 311e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan private int state; 321e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 331e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan State() {} 341e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 351e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan State(State other) { 361e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan state = other.state; 371e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 381e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 391e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan void reset() { 401e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan state = LIT_LIT; 411e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 421e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 431e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan int get() { 441e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan return state; 451e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 461e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 471e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan void set(State other) { 481e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan state = other.state; 491e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 501e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 511e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan void updateLiteral() { 521e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan if (state <= SHORTREP_LIT_LIT) 531e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan state = LIT_LIT; 541e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan else if (state <= LIT_SHORTREP) 551e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan state -= 3; 561e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan else 571e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan state -= 6; 581e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 591e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 601e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan void updateMatch() { 611e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan state = state < LIT_STATES ? LIT_MATCH : NONLIT_MATCH; 621e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 631e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 641e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan void updateLongRep() { 651e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan state = state < LIT_STATES ? LIT_LONGREP : NONLIT_REP; 661e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 671e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 681e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan void updateShortRep() { 691e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan state = state < LIT_STATES ? LIT_SHORTREP : NONLIT_REP; 701e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 711e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 721e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan boolean isLiteral() { 731e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan return state < LIT_STATES; 741e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 751e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan} 76