Source File
move_to_front.go
Belonging Package
compress/bzip2
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package bzip2
// moveToFrontDecoder implements a move-to-front list. Such a list is an
// efficient way to transform a string with repeating elements into one with
// many small valued numbers, which is suitable for entropy encoding. It works
// by starting with an initial list of symbols and references symbols by their
// index into that list. When a symbol is referenced, it's moved to the front
// of the list. Thus, a repeated symbol ends up being encoded with many zeros,
// as the symbol will be at the front of the list after the first access.
type moveToFrontDecoder []byte
// newMTFDecoder creates a move-to-front decoder with an explicit initial list
// of symbols.
func newMTFDecoder( []byte) moveToFrontDecoder {
if len() > 256 {
panic("too many symbols")
}
return moveToFrontDecoder()
}
// newMTFDecoderWithRange creates a move-to-front decoder with an initial
// symbol list of 0...n-1.
func newMTFDecoderWithRange( int) moveToFrontDecoder {
if > 256 {
panic("newMTFDecoderWithRange: cannot have > 256 symbols")
}
:= make([]byte, )
for := 0; < ; ++ {
[] = byte()
}
return moveToFrontDecoder()
}
func ( moveToFrontDecoder) ( int) ( byte) {
// Implement move-to-front with a simple copy. This approach
// beats more sophisticated approaches in benchmarking, probably
// because it has high locality of reference inside of a
// single cache line (most move-to-front operations have n < 64).
= []
copy([1:], [:])
[0] =
return
}
// First returns the symbol at the front of the list.
func ( moveToFrontDecoder) () byte {
return [0]
}
The pages are generated with Golds v0.7.0-preview. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |