def open.header.index.length.decoded
mylsm-lsm-store@0.6.0.1 · src/scan/ByteBlockReader.bend:309
import mylsm-lsm-store@0.6.0.1/src/scan/ByteBlockReader.bend as ByteBlockReader
import Base
import bend-kit-bytes@0.3.2.0/bytes.bend as Bytes
309def open.header.index.length.decoded(
310 file: File,
311 +size: Nat,
312 header: Bytes.Bytes,
313 total: U32,
314 block_count: U32,
315 +block_count_nat: U32,
316 result: Bytes.Bytes & Maybe<&2, U32>
317) -> IO(Result<&1, &1, U32 & String, Reader>):
318 match result:
319 case (_, Some{index_length_word}):
320 +index_length = U32.to_nat(index_length_word)
321 +blocks = U32.to_nat(block_count_nat)
322 +minimum_index_length = Nat.add(8n, Nat.mul(blocks, 16n))
323 +index_size = Nat.add(44n, index_length)
324 +index_offset = Nat.sub(size, index_size)
325 open.header.index(file, size, header, total, block_count,
326 index_offset,
327 Nat.is_le(minimum_index_length, index_length) &&
328 Nat.is_le(index_size, size) && Nat.is_le(20n, index_offset))
329 case (_, None{}):
330 open.failed(file, corruption("byte SST footer has no index length"))