| btree_traverse_root# (MOD, RP, ADRT, ROOTADR, ISTORE0, GINVAL, GSTORE, GSTORE0, NL, MAXINO, OS, PSTATE, PSYNCED; DIRTY, EXISTS, ADR, RT, ZH, ISTORE; ERR) {btree_traverse# (MOD, RP, ADRT, ROOTADR, ISTORE0, GINVAL, GSTORE, GSTORE0, NL, MAXINO, OS, PSTATE, PSYNCED; RT, DIRTY, EXISTS, ADR, ZH, ISTORE; ERR); if ERR = ESUCCESS then if ZH[RT].usedsize = BRANCH_SIZE then let RL = null, RR = null, POSITION = MIN_SIZE in {btree_io_split#(POSITION, RT; RL, RR, ERR, ZH); choose R with ¬ R ∈ ZH ∧ R ≠ null in {ZH := ZH ++ R; ZH[R] := mkznode(null, mkzbrarray(BRANCH_SIZE), false, true, 2); RT := R; DIRTY := true}; let KEY = ZH[RL].zbranches[POSITION - 1].key in {ZH[RL].parent := RT; ZH[RR].parent := RT; ZH[RT].zbranches[0] := mkzbranch(KEY, ADRT, RL); ZH[RT].zbranches[1] := mkzbranch(KEY, ADRT, RR)}} } |