()
| 73 | var predef sync.Once |
| 74 | |
| 75 | func initPredefined() { |
| 76 | predef.Do(func() { |
| 77 | // Literals length codes |
| 78 | tmp := make([]baseOffset, 36) |
| 79 | for i := range tmp[:16] { |
| 80 | tmp[i] = baseOffset{ |
| 81 | baseLine: uint32(i), |
| 82 | addBits: 0, |
| 83 | } |
| 84 | } |
| 85 | fillBase(tmp[16:], 16, 1, 1, 1, 1, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) |
| 86 | symbolTableX[tableLiteralLengths] = tmp |
| 87 | |
| 88 | // Match length codes |
| 89 | tmp = make([]baseOffset, 53) |
| 90 | for i := range tmp[:32] { |
| 91 | tmp[i] = baseOffset{ |
| 92 | // The transformation adds the 3 length. |
| 93 | baseLine: uint32(i) + 3, |
| 94 | addBits: 0, |
| 95 | } |
| 96 | } |
| 97 | fillBase(tmp[32:], 35, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) |
| 98 | symbolTableX[tableMatchLengths] = tmp |
| 99 | |
| 100 | // Offset codes |
| 101 | tmp = make([]baseOffset, maxOffsetBits+1) |
| 102 | tmp[1] = baseOffset{ |
| 103 | baseLine: 1, |
| 104 | addBits: 1, |
| 105 | } |
| 106 | fillBase(tmp[2:], 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30) |
| 107 | symbolTableX[tableOffsets] = tmp |
| 108 | |
| 109 | // Fill predefined tables and transform them. |
| 110 | // https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#default-distributions |
| 111 | for i := range fsePredef[:] { |
| 112 | f := &fsePredef[i] |
| 113 | switch tableIndex(i) { |
| 114 | case tableLiteralLengths: |
| 115 | // https://github.com/facebook/zstd/blob/ededcfca57366461021c922720878c81a5854a0a/lib/decompress/zstd_decompress_block.c#L243 |
| 116 | f.actualTableLog = 6 |
| 117 | copy(f.norm[:], []int16{4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, |
| 118 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 1, 1, 1, 1, 1, |
| 119 | -1, -1, -1, -1}) |
| 120 | f.symbolLen = 36 |
| 121 | case tableOffsets: |
| 122 | // https://github.com/facebook/zstd/blob/ededcfca57366461021c922720878c81a5854a0a/lib/decompress/zstd_decompress_block.c#L281 |
| 123 | f.actualTableLog = 5 |
| 124 | copy(f.norm[:], []int16{ |
| 125 | 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, |
| 126 | 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1}) |
| 127 | f.symbolLen = 29 |
| 128 | case tableMatchLengths: |
| 129 | //https://github.com/facebook/zstd/blob/ededcfca57366461021c922720878c81a5854a0a/lib/decompress/zstd_decompress_block.c#L304 |
| 130 | f.actualTableLog = 6 |
| 131 | copy(f.norm[:], []int16{ |
| 132 | 1, 4, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, |
searching dependent graphs…