enc_params.go 6.9 KB

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