MCPcopy
hub / github.com/klauspost/compress / loadDict

Function loadDict

zstd/dict.go:71–150  ·  view source on GitHub ↗

Load a dictionary as described in https://github.com/facebook/zstd/blob/master/doc/zstd_compression_format.md#dictionary-format

(b []byte)

Source from the content-addressed store, hash-verified

69// Load a dictionary as described in
70// https://github.com/facebook/zstd/blob/master/doc/zstd_compression_format.md#dictionary-format
71func loadDict(b []byte) (*dict, error) {
72 // Check static field size.
73 if len(b) <= 8+(3*4) {
74 return nil, io.ErrUnexpectedEOF
75 }
76 d := dict{
77 llDec: sequenceDec{fse: &fseDecoder{}},
78 ofDec: sequenceDec{fse: &fseDecoder{}},
79 mlDec: sequenceDec{fse: &fseDecoder{}},
80 }
81 if string(b[:4]) != dictMagic {
82 return nil, ErrMagicMismatch
83 }
84 d.id = binary.LittleEndian.Uint32(b[4:8])
85 if d.id == 0 {
86 return nil, errors.New("dictionaries cannot have ID 0")
87 }
88
89 // Read literal table
90 var err error
91 d.litEnc, b, err = huff0.ReadTable(b[8:], nil)
92 if err != nil {
93 return nil, fmt.Errorf("loading literal table: %w", err)
94 }
95 d.litEnc.Reuse = huff0.ReusePolicyMust
96
97 br := byteReader{
98 b: b,
99 off: 0,
100 }
101 readDec := func(i tableIndex, dec *fseDecoder) error {
102 if err := dec.readNCount(&br, uint16(maxTableSymbol[i])); err != nil {
103 return err
104 }
105 if br.overread() {
106 return io.ErrUnexpectedEOF
107 }
108 err = dec.transform(symbolTableX[i])
109 if err != nil {
110 println("Transform table error:", err)
111 return err
112 }
113 if debugDecoder || debugEncoder {
114 println("Read table ok", "symbolLen:", dec.symbolLen)
115 }
116 // Set decoders as predefined so they aren't reused.
117 dec.preDefined = true
118 return nil
119 }
120
121 if err := readDec(tableOffsets, d.ofDec.fse); err != nil {
122 return nil, err
123 }
124 if err := readDec(tableMatchLengths, d.mlDec.fse); err != nil {
125 return nil, err
126 }
127 if err := readDec(tableLiteralLengths, d.llDec.fse); err != nil {
128 return nil, err

Callers 4

WithDecoderDictsFunction · 0.85
WithEncoderDictFunction · 0.85
InspectDictionaryFunction · 0.85
BuildDictFunction · 0.85

Calls 9

Uint32Method · 0.95
overreadMethod · 0.95
remainMethod · 0.95
advanceMethod · 0.95
unreadMethod · 0.95
ReadTableFunction · 0.92
printlnFunction · 0.85
transformMethod · 0.80
readNCountMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…