fix bitsPerBlock calculation bug in NewXXXXPaletteContainerWithData

This commit is contained in:
Tnze
2023-01-02 22:43:43 +08:00
parent e12b2f368d
commit 36bec6e63d
2 changed files with 12 additions and 3 deletions

View File

@ -67,6 +67,16 @@ func calcBitStorageSize(bits, length int) (size int) {
return (length + valuesPerLong - 1) / valuesPerLong return (length + valuesPerLong - 1) / valuesPerLong
} }
// calcBitsPerValue calculate when "longs" number of uint64 stores
// "length" number of value, how many bits are used for each value.
func calcBitsPerValue(length, longs int) (bits int) {
if longs == 0 || length == 0 {
return 0
}
valuePerLong := (length + longs - 1) / longs
return 64 / valuePerLong
}
type newBitStorageErr struct { type newBitStorageErr struct {
ArrlLen int ArrlLen int
WantLen int WantLen int

View File

@ -2,7 +2,6 @@ package level
import ( import (
"io" "io"
"math/bits"
"strconv" "strconv"
"github.com/Tnze/go-mc/level/biome" "github.com/Tnze/go-mc/level/biome"
@ -36,7 +35,7 @@ func NewStatesPaletteContainer(length int, defaultValue BlocksState) *PaletteCon
func NewStatesPaletteContainerWithData(length int, data []uint64, pat []BlocksState) *PaletteContainer[BlocksState] { func NewStatesPaletteContainerWithData(length int, data []uint64, pat []BlocksState) *PaletteContainer[BlocksState] {
var p palette[BlocksState] var p palette[BlocksState]
n := bits.Len(uint(len(pat) - 1)) n := calcBitsPerValue(length, len(data))
switch n { switch n {
case 0: case 0:
p = &singleValuePalette[BlocksState]{pat[0]} p = &singleValuePalette[BlocksState]{pat[0]}
@ -78,7 +77,7 @@ func NewBiomesPaletteContainer(length int, defaultValue BiomesState) *PaletteCon
func NewBiomesPaletteContainerWithData(length int, data []uint64, pat []BiomesState) *PaletteContainer[BiomesState] { func NewBiomesPaletteContainerWithData(length int, data []uint64, pat []BiomesState) *PaletteContainer[BiomesState] {
var p palette[BiomesState] var p palette[BiomesState]
n := bits.Len(uint(len(pat) - 1)) n := calcBitsPerValue(length, len(data))
switch n { switch n {
case 0: case 0:
p = &singleValuePalette[BiomesState]{pat[0]} p = &singleValuePalette[BiomesState]{pat[0]}