From 6781e4c16d0dc623d123279c4806c6d0cc75e39a Mon Sep 17 00:00:00 2001 From: adman Date: Sat, 2 May 2026 00:21:17 +0200 Subject: [PATCH] support upsizing storage on import if bpe not available --- level/storage.go | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/level/storage.go b/level/storage.go index 8f48638..83fef6d 100644 --- a/level/storage.go +++ b/level/storage.go @@ -29,13 +29,30 @@ func (r StorageFormat) Import(data []uint64, bpe uint8, palette []int32) (s *Sto return } - if !slices.Contains(r.AvailableBpes, bpe) { - err = BpeNotAvailableErr - return - } s = new(Storage) s.format = r s.resize(bpe) + + if !slices.Contains(r.AvailableBpes, bpe) { + var newBpe uint8 + for _, newBpe = range r.AvailableBpes { + if bpe < newBpe { + continue + } + } + var tmps *Storage + tmps, err = StorageFormat{ + AvailableBpes: []uint8{bpe}, + BiggestDirect: false, + Len: r.Len, + }.ImportDataDirect(data) + if err != nil { + return + } + tmps.resize(newBpe) + data = tmps.data + bpe = newBpe + } if bpe == 0 && len(palette) != 1 { err = Bpe0PalletMustBeLenOneErr return