1 /* 2 * Optimum 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 Optimum { 14 private static final int INFINITY_PRICE = 1 << 30; 15 16 final State state = new State(); 17 final int[] reps = new int[LZMACoder.REPS]; 18 19 /** 20 * Cumulative price of arriving to this byte. 21 */ 22 int price; 23 24 int optPrev; 25 int backPrev; 26 boolean prev1IsLiteral; 27 28 boolean hasPrev2; 29 int optPrev2; 30 int backPrev2; 31 32 /** 33 * Resets the price. 34 */ reset()35 void reset() { 36 price = INFINITY_PRICE; 37 } 38 39 /** 40 * Sets to indicate one LZMA symbol (literal, rep, or match). 41 */ set1(int newPrice, int optCur, int back)42 void set1(int newPrice, int optCur, int back) { 43 price = newPrice; 44 optPrev = optCur; 45 backPrev = back; 46 prev1IsLiteral = false; 47 } 48 49 /** 50 * Sets to indicate two LZMA symbols of which the first one is a literal. 51 */ set2(int newPrice, int optCur, int back)52 void set2(int newPrice, int optCur, int back) { 53 price = newPrice; 54 optPrev = optCur + 1; 55 backPrev = back; 56 prev1IsLiteral = true; 57 hasPrev2 = false; 58 } 59 60 /** 61 * Sets to indicate three LZMA symbols of which the second one 62 * is a literal. 63 */ set3(int newPrice, int optCur, int back2, int len2, int back)64 void set3(int newPrice, int optCur, int back2, int len2, int back) { 65 price = newPrice; 66 optPrev = optCur + len2 + 1; 67 backPrev = back; 68 prev1IsLiteral = true; 69 hasPrev2 = true; 70 optPrev2 = optCur; 71 backPrev2 = back2; 72 } 73 } 74