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

Method nextBlock

zstd/encoder.go:285–437  ·  view source on GitHub ↗

nextBlock will synchronize and start compressing input in e.state.filling. If an error has occurred during encoding it will be returned.

(final bool)

Source from the content-addressed store, hash-verified

283// nextBlock will synchronize and start compressing input in e.state.filling.
284// If an error has occurred during encoding it will be returned.
285func (e *Encoder) nextBlock(final bool) error {
286 s := &e.state
287 // Wait for current block.
288 s.wg.Wait()
289 if s.err != nil {
290 return s.err
291 }
292 if len(s.filling) > e.o.blockSize {
293 return fmt.Errorf("block > maxStoreBlockSize")
294 }
295 if !s.headerWritten {
296 // If we have a single block encode, do a sync compression.
297 if final && len(s.filling) == 0 && !e.o.fullZero {
298 s.headerWritten = true
299 s.fullFrameWritten = true
300 s.eofWritten = true
301 return nil
302 }
303 if final && len(s.filling) > 0 {
304 s.current = e.encodeAll(s.encoder, s.filling, s.current[:0])
305 var n2 int
306 n2, s.err = s.w.Write(s.current)
307 if s.err != nil {
308 return s.err
309 }
310 s.nWritten += int64(n2)
311 s.nInput += int64(len(s.filling))
312 s.current = s.current[:0]
313 s.filling = s.filling[:0]
314 s.headerWritten = true
315 s.fullFrameWritten = true
316 s.eofWritten = true
317 return nil
318 }
319
320 var tmp [maxHeaderSize]byte
321 fh := frameHeader{
322 ContentSize: uint64(s.frameContentSize),
323 WindowSize: uint32(s.encoder.WindowSize(s.frameContentSize)),
324 SingleSegment: false,
325 Checksum: e.o.crc,
326 DictID: e.o.dict.ID(),
327 }
328
329 dst := fh.appendTo(tmp[:0])
330 s.headerWritten = true
331 s.wWg.Wait()
332 var n2 int
333 n2, s.err = s.w.Write(dst)
334 if s.err != nil {
335 return s.err
336 }
337 s.nWritten += int64(n2)
338 }
339 if s.eofWritten {
340 // Ensure we only write it once.
341 final = false
342 }

Callers 4

writeBlocksMethod · 0.95
ReadFromMethod · 0.95
FlushMethod · 0.95
CloseMethod · 0.95

Calls 13

encodeAllMethod · 0.95
appendToMethod · 0.95
printlnFunction · 0.85
IDMethod · 0.80
encodeRawMethod · 0.80
swapEncodersMethod · 0.80
WriteMethod · 0.65
WindowSizeMethod · 0.65
BlockMethod · 0.65
EncodeMethod · 0.65
UseBlockMethod · 0.65
resetMethod · 0.45

Tested by

no test coverage detected