123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // 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
- )
- 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, Block8Mb) }}
- )
- 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 Block8Mb:
- BlockPool8M.Put(buf[:c])
- }
- }
- type CompressionLevel uint32
- const Fast CompressionLevel = 0
|