// Package lz4block provides LZ4 BlockSize types and pools of buffers.
package lz4block import 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 ( uint32) BlockSizeIndex { switch { 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 ( uint32) bool { return Index() > 0 } type BlockSizeIndex uint8 func ( BlockSizeIndex) () bool { switch { case 4, 5, 6, 7: return true } return false } func ( BlockSizeIndex) () []byte { var interface{} switch { case 4: = BlockPool64K.Get() case 5: = BlockPool256K.Get() case 6: = BlockPool1M.Get() case 7: = BlockPool4M.Get() case 3: = BlockPool8M.Get() } return .([]byte) } func ( []byte) { // Safeguard: do not allow invalid buffers. switch := cap(); uint32() { case Block64Kb: BlockPool64K.Put([:]) case Block256Kb: BlockPool256K.Put([:]) case Block1Mb: BlockPool1M.Put([:]) case Block4Mb: BlockPool4M.Put([:]) case Block8Mb: BlockPool8M.Put([:]) } } type CompressionLevel uint32 const Fast CompressionLevel = 0