def parse.multi.sized.index_length

mylsm-lsm-store@0.6.0.1 · src/ByteSstFile.bend:1883

import mylsm-lsm-store@0.6.0.1/src/ByteSstFile.bend as ByteSstFile
import Base
import mylsm-lsm-store@0.6.0.1/src/ByteMemTable.bend as ByteMemTable
import bend-kit-bytes@0.3.2.0/bytes.bend as Bytes

1883def parse.multi.sized.index_length(
1884  source: Bytes.Bytes,
1885  file: Bytes.Bytes,
1886  +blocks: Nat,
1887  +entries: Nat,
1888  +level: Nat,
1889  +size: Nat,
1890  result: Bytes.Bytes & Maybe<&2, U32>
1891) -> Result<&1, &1, Error, ByteMemTable.Table>:
1892  match result:
1893    case (_, Some{length}):
1894      +index_length = U32.to_nat(length)
1895      +minimum_index_length = Nat.add(8n, Nat.mul(blocks, 16n))
1896      +index_size = Nat.add(44n, index_length)
1897      parse.multi.sized.valid(source, file, blocks, entries, level, size,
1898        index_length,
1899        Nat.is_le(minimum_index_length, index_length) &&
1900          Nat.is_le(index_size, size) &&
1901          Nat.is_le(20n, Nat.sub(size, index_size)))
1902    case (_, None{}): Fail{Malformed{}}

Uses (16)

Used by (1)