| persistence_io_decode_orphans#(SIZE, BUF; ; ORPHANS, ERR) {ORPHANS := ∅; ERR := ESUCCESS; let OFFSET = 0 in while ERR = ESUCCESS ∧ SIZE ≠ 0 do {/* (prepost-decode-orphans : invariant (ERR = ESUCCESS ∨ ⌊ERR⌋ ) ∧ OFFSET + SIZE * ENCODED_NAT_SIZE = # BUF ∧ ( ERR = ESUCCESS → (∃ orphans. is-encoded(ORPHANS, subarray(BUF, 0, OFFSET)) ∧ is-encoded(orphans, subarray(BUF, OFFSET, # BUF - OFFSET)) ∧ orphans ∩ ORPHANS = ∅)) wfbound SIZE) */; let N = ?, SIZE = ? in {decode_nat#(OFFSET, BUF; N, SIZE; ERR); if ERR = ESUCCESS then ORPHANS := ORPHANS ++ N; OFFSET := OFFSET + ENCODED_NAT_SIZE}; SIZE := SIZE - 1} } |