def merge_go

mylsm-lsm-store@0.6.0.1 · src/SortedRun.bend:223

import mylsm-lsm-store@0.6.0.1/src/SortedRun.bend as SortedRun
import Base
import mylsm-lsm-store@0.6.0.1/src/MemTable.bend as MemTable

223# Merge go for the sorted-run operations.
224def merge_go(
225  fuel: Nat,
226  state: List<&2, MemTable.Entry> & List<&2, MemTable.Entry> & List<&2, MemTable.Entry>
227) -> List<&2, MemTable.Entry>:
228  match fuel:
229    case 0n:
230      (acc, newer, older) = state
231      List.reverse.go(&2, MemTable.Entry, acc, List.append(&2, MemTable.Entry, newer, older))
232    case 1n+f:
233      (acc, newer, older) = state
234      match newer older:
235        case Nil{} Nil{}:
236          List.reverse(&2, MemTable.Entry, acc)
237        case Nil{} rest:
238          List.reverse.go(&2, MemTable.Entry, acc, rest)
239        case rest Nil{}:
240          List.reverse.go(&2, MemTable.Entry, acc, rest)
241        case Con{+nh, nt} Con{+oh, ot}:
242          merge_go(f, merge_step(entry_cmp(nh, oh), nh, nt, oh, ot, acc))

Uses (10)

Used by (1)