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

Uses (10)

Used by (1)