| /* |
| * Optimum |
| * |
| * 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 Optimum { |
| private static final int INFINITY_PRICE = 1 << 30; |
| |
| final State state = new State(); |
| final int[] reps = new int[LZMACoder.REPS]; |
| |
| /** |
| * Cumulative price of arriving to this byte. |
| */ |
| int price; |
| |
| int optPrev; |
| int backPrev; |
| boolean prev1IsLiteral; |
| |
| boolean hasPrev2; |
| int optPrev2; |
| int backPrev2; |
| |
| /** |
| * Resets the price. |
| */ |
| void reset() { |
| price = INFINITY_PRICE; |
| } |
| |
| /** |
| * Sets to indicate one LZMA symbol (literal, rep, or match). |
| */ |
| void set1(int newPrice, int optCur, int back) { |
| price = newPrice; |
| optPrev = optCur; |
| backPrev = back; |
| prev1IsLiteral = false; |
| } |
| |
| /** |
| * Sets to indicate two LZMA symbols of which the first one is a literal. |
| */ |
| void set2(int newPrice, int optCur, int back) { |
| price = newPrice; |
| optPrev = optCur + 1; |
| backPrev = back; |
| prev1IsLiteral = true; |
| hasPrev2 = false; |
| } |
| |
| /** |
| * Sets to indicate three LZMA symbols of which the second one |
| * is a literal. |
| */ |
| void set3(int newPrice, int optCur, int back2, int len2, int back) { |
| price = newPrice; |
| optPrev = optCur + len2 + 1; |
| backPrev = back; |
| prev1IsLiteral = true; |
| hasPrev2 = true; |
| optPrev2 = optCur; |
| backPrev2 = back2; |
| } |
| } |