| btree_io_split#(POSITION, R; RL, RR, ERR, ZH) {let NUSED = ZH[R].usedsize in let LEFT = POSITION, RIGHT = NUSED - POSITION, RP = ZH[R].parent, LEAF = ZH[R].leaf, DIRTY = ZH[R].dirty in choose R0 with ¬ R0 ∈ ZH ∧ R0 ≠ null in {ZH := ZH ++ R0; ZH[R0] := mkznode(RP, mkzbrarray(BRANCH_SIZE), LEAF, DIRTY, RIGHT); RR := R0; RL := R; ZH[RL].usedsize := LEFT; let N = 0 in while N < RIGHT do ZH[RR].zbranches[N] := ZH[RL].zbranches[POSITION + N], N := N + 1; ZH[RL].dirty := true; ZH[RR].dirty := true; ERR := ESUCCESS} ifnone ERR := ENOMEM } |