def retained_bytes.keep.go
mylsm-lsm-store@0.6.0.1 · src/ByteMemTable.bend:477
import mylsm-lsm-store@0.6.0.1/src/ByteMemTable.bend as ByteMemTable
import Base
import bend-kit-bytes@0.3.2.0/bytes.bend as Bytes
477def retained_bytes.keep.go(
478 entries: List<&1, Entry>,
479 reversed: List<&1, Entry>,
480 total: Nat
481) -> List<&1, Entry> & Nat:
482 match entries:
483 case Nil{}:
484 (List.reverse(&1, Entry, reversed), total)
485 case Con{Entry{key, value}, tail}:
486 match key:
487 case Bytes.Bytes{+key_len, key_buffer}:
488 match value:
489 case None{}:
490 retained_bytes.keep.go(tail,
491 Con{Entry{Bytes.Bytes{key_len, key_buffer}, None{}}, reversed},
492 Nat.add(total, Nat.add(32n, U32.to_nat(key_len))))
493 case Some{Bytes.Bytes{+value_len, value_buffer}}:
494 retained_bytes.keep.go(tail,
495 Con{Entry{Bytes.Bytes{key_len, key_buffer},
496 Some{Bytes.Bytes{value_len, value_buffer}}}, reversed},
497 Nat.add(total, Nat.add(Nat.add(32n, U32.to_nat(key_len)),
498 U32.to_nat(value_len))))