// Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

type encParams struct {
	// largest match distance : larger == more compression, more memory needed during decompression
	windowLog uint8

	// fully searched segment : larger == more compression, slower, more memory (useless for fast)
	chainLog uint8

	//  dispatch table : larger == faster, more memory
	hashLog uint8

	// < nb of searches : larger == more compression, slower
	searchLog uint8

	// < match length searched : larger == faster decompression, sometimes less compression
	minMatch uint8

	// acceptable match size for optimal parser (only) : larger == more compression, slower
	targetLength uint32

	// see ZSTD_strategy definition above
	strategy strategy
}

// strategy defines the algorithm to use when generating sequences.
type strategy uint8

const (
	// Compression strategies, listed from fastest to strongest
	strategyFast strategy = iota + 1
	strategyDfast
	strategyGreedy
	strategyLazy
	strategyLazy2
	strategyBtlazy2
	strategyBtopt
	strategyBtultra
	strategyBtultra2
	// note : new strategies _might_ be added in the future.
	//   Only the order (from fast to strong) is guaranteed

)

var defEncParams = [4][]encParams{
	{ // "default" - for any srcSize > 256 KB
		// W,  C,  H,  S,  L, TL, strat
		{19, 12, 13, 1, 6, 1, strategyFast},       // base for negative levels
		{19, 13, 14, 1, 7, 0, strategyFast},       // level  1
		{20, 15, 16, 1, 6, 0, strategyFast},       // level  2
		{21, 16, 17, 1, 5, 1, strategyDfast},      // level  3
		{21, 18, 18, 1, 5, 1, strategyDfast},      // level  4
		{21, 18, 19, 2, 5, 2, strategyGreedy},     // level  5
		{21, 19, 19, 3, 5, 4, strategyGreedy},     // level  6
		{21, 19, 19, 3, 5, 8, strategyLazy},       // level  7
		{21, 19, 19, 3, 5, 16, strategyLazy2},     // level  8
		{21, 19, 20, 4, 5, 16, strategyLazy2},     // level  9
		{22, 20, 21, 4, 5, 16, strategyLazy2},     // level 10
		{22, 21, 22, 4, 5, 16, strategyLazy2},     // level 11
		{22, 21, 22, 5, 5, 16, strategyLazy2},     // level 12
		{22, 21, 22, 5, 5, 32, strategyBtlazy2},   // level 13
		{22, 22, 23, 5, 5, 32, strategyBtlazy2},   // level 14
		{22, 23, 23, 6, 5, 32, strategyBtlazy2},   // level 15
		{22, 22, 22, 5, 5, 48, strategyBtopt},     // level 16
		{23, 23, 22, 5, 4, 64, strategyBtopt},     // level 17
		{23, 23, 22, 6, 3, 64, strategyBtultra},   // level 18
		{23, 24, 22, 7, 3, 256, strategyBtultra2}, // level 19
		{25, 25, 23, 7, 3, 256, strategyBtultra2}, // level 20
		{26, 26, 24, 7, 3, 512, strategyBtultra2}, // level 21
		{27, 27, 25, 9, 3, 999, strategyBtultra2}, // level 22
	},
	{ // for srcSize <= 256 KB
		// W,  C,  H,  S,  L,  T, strat
		{18, 12, 13, 1, 5, 1, strategyFast},        // base for negative levels
		{18, 13, 14, 1, 6, 0, strategyFast},        // level  1
		{18, 14, 14, 1, 5, 1, strategyDfast},       // level  2
		{18, 16, 16, 1, 4, 1, strategyDfast},       // level  3
		{18, 16, 17, 2, 5, 2, strategyGreedy},      // level  4.
		{18, 18, 18, 3, 5, 2, strategyGreedy},      // level  5.
		{18, 18, 19, 3, 5, 4, strategyLazy},        // level  6.
		{18, 18, 19, 4, 4, 4, strategyLazy},        // level  7
		{18, 18, 19, 4, 4, 8, strategyLazy2},       // level  8
		{18, 18, 19, 5, 4, 8, strategyLazy2},       // level  9
		{18, 18, 19, 6, 4, 8, strategyLazy2},       // level 10
		{18, 18, 19, 5, 4, 12, strategyBtlazy2},    // level 11.
		{18, 19, 19, 7, 4, 12, strategyBtlazy2},    // level 12.
		{18, 18, 19, 4, 4, 16, strategyBtopt},      // level 13
		{18, 18, 19, 4, 3, 32, strategyBtopt},      // level 14.
		{18, 18, 19, 6, 3, 128, strategyBtopt},     // level 15.
		{18, 19, 19, 6, 3, 128, strategyBtultra},   // level 16.
		{18, 19, 19, 8, 3, 256, strategyBtultra},   // level 17.
		{18, 19, 19, 6, 3, 128, strategyBtultra2},  // level 18.
		{18, 19, 19, 8, 3, 256, strategyBtultra2},  // level 19.
		{18, 19, 19, 10, 3, 512, strategyBtultra2}, // level 20.
		{18, 19, 19, 12, 3, 512, strategyBtultra2}, // level 21.
		{18, 19, 19, 13, 3, 999, strategyBtultra2}, // level 22.
	},
	{ // for srcSize <= 128 KB
		// W,  C,  H,  S,  L,  T, strat
		{17, 12, 12, 1, 5, 1, strategyFast},        // base for negative levels
		{17, 12, 13, 1, 6, 0, strategyFast},        // level  1
		{17, 13, 15, 1, 5, 0, strategyFast},        // level  2
		{17, 15, 16, 2, 5, 1, strategyDfast},       // level  3
		{17, 17, 17, 2, 4, 1, strategyDfast},       // level  4
		{17, 16, 17, 3, 4, 2, strategyGreedy},      // level  5
		{17, 17, 17, 3, 4, 4, strategyLazy},        // level  6
		{17, 17, 17, 3, 4, 8, strategyLazy2},       // level  7
		{17, 17, 17, 4, 4, 8, strategyLazy2},       // level  8
		{17, 17, 17, 5, 4, 8, strategyLazy2},       // level  9
		{17, 17, 17, 6, 4, 8, strategyLazy2},       // level 10
		{17, 17, 17, 5, 4, 8, strategyBtlazy2},     // level 11
		{17, 18, 17, 7, 4, 12, strategyBtlazy2},    // level 12
		{17, 18, 17, 3, 4, 12, strategyBtopt},      // level 13.
		{17, 18, 17, 4, 3, 32, strategyBtopt},      // level 14.
		{17, 18, 17, 6, 3, 256, strategyBtopt},     // level 15.
		{17, 18, 17, 6, 3, 128, strategyBtultra},   // level 16.
		{17, 18, 17, 8, 3, 256, strategyBtultra},   // level 17.
		{17, 18, 17, 10, 3, 512, strategyBtultra},  // level 18.
		{17, 18, 17, 5, 3, 256, strategyBtultra2},  // level 19.
		{17, 18, 17, 7, 3, 512, strategyBtultra2},  // level 20.
		{17, 18, 17, 9, 3, 512, strategyBtultra2},  // level 21.
		{17, 18, 17, 11, 3, 999, strategyBtultra2}, // level 22.
	},
	{ // for srcSize <= 16 KB
		// W,  C,  H,  S,  L,  T, strat
		{14, 12, 13, 1, 5, 1, strategyFast},        // base for negative levels
		{14, 14, 15, 1, 5, 0, strategyFast},        // level  1
		{14, 14, 15, 1, 4, 0, strategyFast},        // level  2
		{14, 14, 15, 2, 4, 1, strategyDfast},       // level  3
		{14, 14, 14, 4, 4, 2, strategyGreedy},      // level  4
		{14, 14, 14, 3, 4, 4, strategyLazy},        // level  5.
		{14, 14, 14, 4, 4, 8, strategyLazy2},       // level  6
		{14, 14, 14, 6, 4, 8, strategyLazy2},       // level  7
		{14, 14, 14, 8, 4, 8, strategyLazy2},       // level  8.
		{14, 15, 14, 5, 4, 8, strategyBtlazy2},     // level  9.
		{14, 15, 14, 9, 4, 8, strategyBtlazy2},     // level 10.
		{14, 15, 14, 3, 4, 12, strategyBtopt},      // level 11.
		{14, 15, 14, 4, 3, 24, strategyBtopt},      // level 12.
		{14, 15, 14, 5, 3, 32, strategyBtultra},    // level 13.
		{14, 15, 15, 6, 3, 64, strategyBtultra},    // level 14.
		{14, 15, 15, 7, 3, 256, strategyBtultra},   // level 15.
		{14, 15, 15, 5, 3, 48, strategyBtultra2},   // level 16.
		{14, 15, 15, 6, 3, 128, strategyBtultra2},  // level 17.
		{14, 15, 15, 7, 3, 256, strategyBtultra2},  // level 18.
		{14, 15, 15, 8, 3, 256, strategyBtultra2},  // level 19.
		{14, 15, 15, 8, 3, 512, strategyBtultra2},  // level 20.
		{14, 15, 15, 9, 3, 512, strategyBtultra2},  // level 21.
		{14, 15, 15, 10, 3, 999, strategyBtultra2}, // level 22.
	},
}
