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