1// Copyright 2019+ Klaus Post. All rights reserved.
2// License information can be found in the LICENSE file.
3// Based on work by Yann Collet, released under BSD License.
4
5package zstd
6
7/*
8// encParams are not really used, just here for reference.
9type encParams struct {
10	// largest match distance : larger == more compression, more memory needed during decompression
11	windowLog uint8
12
13	// fully searched segment : larger == more compression, slower, more memory (useless for fast)
14	chainLog uint8
15
16	//  dispatch table : larger == faster, more memory
17	hashLog uint8
18
19	// < nb of searches : larger == more compression, slower
20	searchLog uint8
21
22	// < match length searched : larger == faster decompression, sometimes less compression
23	minMatch uint8
24
25	// acceptable match size for optimal parser (only) : larger == more compression, slower
26	targetLength uint32
27
28	// see ZSTD_strategy definition above
29	strategy strategy
30}
31
32// strategy defines the algorithm to use when generating sequences.
33type strategy uint8
34
35const (
36	// Compression strategies, listed from fastest to strongest
37	strategyFast strategy = iota + 1
38	strategyDfast
39	strategyGreedy
40	strategyLazy
41	strategyLazy2
42	strategyBtlazy2
43	strategyBtopt
44	strategyBtultra
45	strategyBtultra2
46	// note : new strategies _might_ be added in the future.
47	//   Only the order (from fast to strong) is guaranteed
48
49)
50
51var defEncParams = [4][]encParams{
52	{ // "default" - for any srcSize > 256 KB
53		// W,  C,  H,  S,  L, TL, strat
54		{19, 12, 13, 1, 6, 1, strategyFast},       // base for negative levels
55		{19, 13, 14, 1, 7, 0, strategyFast},       // level  1
56		{20, 15, 16, 1, 6, 0, strategyFast},       // level  2
57		{21, 16, 17, 1, 5, 1, strategyDfast},      // level  3
58		{21, 18, 18, 1, 5, 1, strategyDfast},      // level  4
59		{21, 18, 19, 2, 5, 2, strategyGreedy},     // level  5
60		{21, 19, 19, 3, 5, 4, strategyGreedy},     // level  6
61		{21, 19, 19, 3, 5, 8, strategyLazy},       // level  7
62		{21, 19, 19, 3, 5, 16, strategyLazy2},     // level  8
63		{21, 19, 20, 4, 5, 16, strategyLazy2},     // level  9
64		{22, 20, 21, 4, 5, 16, strategyLazy2},     // level 10
65		{22, 21, 22, 4, 5, 16, strategyLazy2},     // level 11
66		{22, 21, 22, 5, 5, 16, strategyLazy2},     // level 12
67		{22, 21, 22, 5, 5, 32, strategyBtlazy2},   // level 13
68		{22, 22, 23, 5, 5, 32, strategyBtlazy2},   // level 14
69		{22, 23, 23, 6, 5, 32, strategyBtlazy2},   // level 15
70		{22, 22, 22, 5, 5, 48, strategyBtopt},     // level 16
71		{23, 23, 22, 5, 4, 64, strategyBtopt},     // level 17
72		{23, 23, 22, 6, 3, 64, strategyBtultra},   // level 18
73		{23, 24, 22, 7, 3, 256, strategyBtultra2}, // level 19
74		{25, 25, 23, 7, 3, 256, strategyBtultra2}, // level 20
75		{26, 26, 24, 7, 3, 512, strategyBtultra2}, // level 21
76		{27, 27, 25, 9, 3, 999, strategyBtultra2}, // level 22
77	},
78	{ // for srcSize <= 256 KB
79		// W,  C,  H,  S,  L,  T, strat
80		{18, 12, 13, 1, 5, 1, strategyFast},        // base for negative levels
81		{18, 13, 14, 1, 6, 0, strategyFast},        // level  1
82		{18, 14, 14, 1, 5, 1, strategyDfast},       // level  2
83		{18, 16, 16, 1, 4, 1, strategyDfast},       // level  3
84		{18, 16, 17, 2, 5, 2, strategyGreedy},      // level  4.
85		{18, 18, 18, 3, 5, 2, strategyGreedy},      // level  5.
86		{18, 18, 19, 3, 5, 4, strategyLazy},        // level  6.
87		{18, 18, 19, 4, 4, 4, strategyLazy},        // level  7
88		{18, 18, 19, 4, 4, 8, strategyLazy2},       // level  8
89		{18, 18, 19, 5, 4, 8, strategyLazy2},       // level  9
90		{18, 18, 19, 6, 4, 8, strategyLazy2},       // level 10
91		{18, 18, 19, 5, 4, 12, strategyBtlazy2},    // level 11.
92		{18, 19, 19, 7, 4, 12, strategyBtlazy2},    // level 12.
93		{18, 18, 19, 4, 4, 16, strategyBtopt},      // level 13
94		{18, 18, 19, 4, 3, 32, strategyBtopt},      // level 14.
95		{18, 18, 19, 6, 3, 128, strategyBtopt},     // level 15.
96		{18, 19, 19, 6, 3, 128, strategyBtultra},   // level 16.
97		{18, 19, 19, 8, 3, 256, strategyBtultra},   // level 17.
98		{18, 19, 19, 6, 3, 128, strategyBtultra2},  // level 18.
99		{18, 19, 19, 8, 3, 256, strategyBtultra2},  // level 19.
100		{18, 19, 19, 10, 3, 512, strategyBtultra2}, // level 20.
101		{18, 19, 19, 12, 3, 512, strategyBtultra2}, // level 21.
102		{18, 19, 19, 13, 3, 999, strategyBtultra2}, // level 22.
103	},
104	{ // for srcSize <= 128 KB
105		// W,  C,  H,  S,  L,  T, strat
106		{17, 12, 12, 1, 5, 1, strategyFast},        // base for negative levels
107		{17, 12, 13, 1, 6, 0, strategyFast},        // level  1
108		{17, 13, 15, 1, 5, 0, strategyFast},        // level  2
109		{17, 15, 16, 2, 5, 1, strategyDfast},       // level  3
110		{17, 17, 17, 2, 4, 1, strategyDfast},       // level  4
111		{17, 16, 17, 3, 4, 2, strategyGreedy},      // level  5
112		{17, 17, 17, 3, 4, 4, strategyLazy},        // level  6
113		{17, 17, 17, 3, 4, 8, strategyLazy2},       // level  7
114		{17, 17, 17, 4, 4, 8, strategyLazy2},       // level  8
115		{17, 17, 17, 5, 4, 8, strategyLazy2},       // level  9
116		{17, 17, 17, 6, 4, 8, strategyLazy2},       // level 10
117		{17, 17, 17, 5, 4, 8, strategyBtlazy2},     // level 11
118		{17, 18, 17, 7, 4, 12, strategyBtlazy2},    // level 12
119		{17, 18, 17, 3, 4, 12, strategyBtopt},      // level 13.
120		{17, 18, 17, 4, 3, 32, strategyBtopt},      // level 14.
121		{17, 18, 17, 6, 3, 256, strategyBtopt},     // level 15.
122		{17, 18, 17, 6, 3, 128, strategyBtultra},   // level 16.
123		{17, 18, 17, 8, 3, 256, strategyBtultra},   // level 17.
124		{17, 18, 17, 10, 3, 512, strategyBtultra},  // level 18.
125		{17, 18, 17, 5, 3, 256, strategyBtultra2},  // level 19.
126		{17, 18, 17, 7, 3, 512, strategyBtultra2},  // level 20.
127		{17, 18, 17, 9, 3, 512, strategyBtultra2},  // level 21.
128		{17, 18, 17, 11, 3, 999, strategyBtultra2}, // level 22.
129	},
130	{ // for srcSize <= 16 KB
131		// W,  C,  H,  S,  L,  T, strat
132		{14, 12, 13, 1, 5, 1, strategyFast},        // base for negative levels
133		{14, 14, 15, 1, 5, 0, strategyFast},        // level  1
134		{14, 14, 15, 1, 4, 0, strategyFast},        // level  2
135		{14, 14, 15, 2, 4, 1, strategyDfast},       // level  3
136		{14, 14, 14, 4, 4, 2, strategyGreedy},      // level  4
137		{14, 14, 14, 3, 4, 4, strategyLazy},        // level  5.
138		{14, 14, 14, 4, 4, 8, strategyLazy2},       // level  6
139		{14, 14, 14, 6, 4, 8, strategyLazy2},       // level  7
140		{14, 14, 14, 8, 4, 8, strategyLazy2},       // level  8.
141		{14, 15, 14, 5, 4, 8, strategyBtlazy2},     // level  9.
142		{14, 15, 14, 9, 4, 8, strategyBtlazy2},     // level 10.
143		{14, 15, 14, 3, 4, 12, strategyBtopt},      // level 11.
144		{14, 15, 14, 4, 3, 24, strategyBtopt},      // level 12.
145		{14, 15, 14, 5, 3, 32, strategyBtultra},    // level 13.
146		{14, 15, 15, 6, 3, 64, strategyBtultra},    // level 14.
147		{14, 15, 15, 7, 3, 256, strategyBtultra},   // level 15.
148		{14, 15, 15, 5, 3, 48, strategyBtultra2},   // level 16.
149		{14, 15, 15, 6, 3, 128, strategyBtultra2},  // level 17.
150		{14, 15, 15, 7, 3, 256, strategyBtultra2},  // level 18.
151		{14, 15, 15, 8, 3, 256, strategyBtultra2},  // level 19.
152		{14, 15, 15, 8, 3, 512, strategyBtultra2},  // level 20.
153		{14, 15, 15, 9, 3, 512, strategyBtultra2},  // level 21.
154		{14, 15, 15, 10, 3, 999, strategyBtultra2}, // level 22.
155	},
156}
157*/
158