• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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