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"))

Uses (20)

Used by (1)