123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- package zstd
- import (
- "errors"
- "log"
- "math/bits"
- )
- const debug = false
- const debugSequences = false
- const debugMatches = false
- const forcePreDef = false
- const zstdMinMatch = 3
- var (
-
-
- ErrReservedBlockType = errors.New("invalid input: reserved block type encountered")
-
-
- ErrCompressedSizeTooBig = errors.New("invalid input: compressed size too big")
-
-
- ErrBlockTooSmall = errors.New("block too small")
-
-
- ErrMagicMismatch = errors.New("invalid input: magic number mismatch")
-
-
- ErrWindowSizeExceeded = errors.New("window size exceeded")
-
-
- ErrWindowSizeTooSmall = errors.New("invalid input: window size was too small")
-
- ErrDecoderSizeExceeded = errors.New("decompressed size exceeds configured limit")
-
-
- ErrUnknownDictionary = errors.New("unknown dictionary")
-
-
- ErrFrameSizeExceeded = errors.New("frame size exceeded")
-
- ErrCRCMismatch = errors.New("CRC check failed")
-
-
- ErrDecoderClosed = errors.New("decoder used after Close")
- )
- func println(a ...interface{}) {
- if debug {
- log.Println(a...)
- }
- }
- func printf(format string, a ...interface{}) {
- if debug {
- log.Printf(format, a...)
- }
- }
- func matchLen(a, b []byte) int {
- b = b[:len(a)]
- for i := 0; i < len(a)-7; i += 8 {
- if diff := load64(a, i) ^ load64(b, i); diff != 0 {
- return i + (bits.TrailingZeros64(diff) >> 3)
- }
- }
- checked := (len(a) >> 3) << 3
- a = a[checked:]
- b = b[checked:]
-
- for i := range a {
- if a[i] != b[i] {
- return int(i) + checked
- }
- }
- return len(a) + checked
- }
- func matchLenIn(src []byte, s, t int32) int32 {
- s1 := len(src)
- b := src[t:]
- a := src[s:s1]
- b = b[:len(a)]
-
- for i := range a {
- if a[i] != b[i] {
- return int32(i)
- }
- }
- return int32(len(a))
- }
- func load3232(b []byte, i int32) uint32 {
-
- b = b[i:]
- b = b[:4]
- return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
- }
- func load6432(b []byte, i int32) uint64 {
-
- b = b[i:]
- b = b[:8]
- return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
- uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
- }
- func load64(b []byte, i int) uint64 {
-
- b = b[i:]
- b = b[:8]
- return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
- uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
- }
|