30ce3731a1
* denisenkom/go-mssqldb untagged -> v0.9.0 * github.com/editorconfig/editorconfig-core-go v2.3.7 -> v2.3.8 * github.com/go-testfixtures/testfixtures v3.4.0 -> v3.4.1 * github.com/mholt/archiver v3.3.2 -> v3.5.0 * github.com/olivere/elastic v7.0.20 -> v7.0.21 * github.com/urfave/cli v1.22.4 -> v1.22.5 * github.com/xanzy/go-gitlab v0.38.1 -> v0.39.0 * github.com/yuin/goldmark-meta untagged -> v1.0.0 * github.com/ethantkoenig/rupture 0a76f03a811a -> c3b3b810dc77 * github.com/jaytaylor/html2text 8fb95d837f7d -> 3577fbdbcff7 * github.com/kballard/go-shellquote cd60e84ee657 -> 95032a82bc51 * github.com/msteinert/pam 02ccfbfaf0cc -> 913b8f8cdf8b * github.com/unknwon/paginater 7748a72e0141 -> 042474bd0eae * CI.restart() Co-authored-by: techknowlogick <techknowlogick@gitea.io>
88 lines
1.8 KiB
Go
Vendored
88 lines
1.8 KiB
Go
Vendored
// Package lz4block provides LZ4 BlockSize types and pools of buffers.
|
|
package lz4block
|
|
|
|
import "sync"
|
|
|
|
const (
|
|
Block64Kb uint32 = 1 << (16 + iota*2)
|
|
Block256Kb
|
|
Block1Mb
|
|
Block4Mb
|
|
Block8Mb = 2 * Block4Mb
|
|
legacyBlockSize = Block8Mb + Block8Mb/255 + 16 // CompressBound(Block8Mb)
|
|
)
|
|
|
|
var (
|
|
BlockPool64K = sync.Pool{New: func() interface{} { return make([]byte, Block64Kb) }}
|
|
BlockPool256K = sync.Pool{New: func() interface{} { return make([]byte, Block256Kb) }}
|
|
BlockPool1M = sync.Pool{New: func() interface{} { return make([]byte, Block1Mb) }}
|
|
BlockPool4M = sync.Pool{New: func() interface{} { return make([]byte, Block4Mb) }}
|
|
BlockPool8M = sync.Pool{New: func() interface{} { return make([]byte, legacyBlockSize) }}
|
|
)
|
|
|
|
func Index(b uint32) BlockSizeIndex {
|
|
switch b {
|
|
case Block64Kb:
|
|
return 4
|
|
case Block256Kb:
|
|
return 5
|
|
case Block1Mb:
|
|
return 6
|
|
case Block4Mb:
|
|
return 7
|
|
case Block8Mb: // only valid in legacy mode
|
|
return 3
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func IsValid(b uint32) bool {
|
|
return Index(b) > 0
|
|
}
|
|
|
|
type BlockSizeIndex uint8
|
|
|
|
func (b BlockSizeIndex) IsValid() bool {
|
|
switch b {
|
|
case 4, 5, 6, 7:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (b BlockSizeIndex) Get() []byte {
|
|
var buf interface{}
|
|
switch b {
|
|
case 4:
|
|
buf = BlockPool64K.Get()
|
|
case 5:
|
|
buf = BlockPool256K.Get()
|
|
case 6:
|
|
buf = BlockPool1M.Get()
|
|
case 7:
|
|
buf = BlockPool4M.Get()
|
|
case 3:
|
|
buf = BlockPool8M.Get()
|
|
}
|
|
return buf.([]byte)
|
|
}
|
|
|
|
func Put(buf []byte) {
|
|
// Safeguard: do not allow invalid buffers.
|
|
switch c := cap(buf); uint32(c) {
|
|
case Block64Kb:
|
|
BlockPool64K.Put(buf[:c])
|
|
case Block256Kb:
|
|
BlockPool256K.Put(buf[:c])
|
|
case Block1Mb:
|
|
BlockPool1M.Put(buf[:c])
|
|
case Block4Mb:
|
|
BlockPool4M.Put(buf[:c])
|
|
case legacyBlockSize:
|
|
BlockPool8M.Put(buf[:c])
|
|
}
|
|
}
|
|
|
|
type CompressionLevel uint32
|
|
|
|
const Fast CompressionLevel = 0
|