def cursor.list.remove.loop

mylsm-lsm-store@0.6.0.1 · src/scan/Snapshot.bend:968

import mylsm-lsm-store@0.6.0.1/src/scan/Snapshot.bend as Snapshot
import Base

968def cursor.list.remove.loop(
969  fuel: Nat,
970  state: CursorListRemoveState
971) -> CursorListRemoveDecision:
972  match fuel:
973    case 0n: cursor.list.remove.exhausted(state)
974    case 1n+rest:
975      match state:
976        case CursorSearch{cursors, cursor_id, prefix}:
977          match cursors:
978            case Nil{}:
979              CursorListMissing{cursor.list.restore(prefix, Nil{})}
980            case Con{resource, tail}:
981              cursor.list.remove.loop(rest, CursorCompareCopies{
982                cursor.resource.duplicate(resource), tail,
983                u32.duplicate(cursor_id), prefix})
984        case CursorCompareCopies{copies, tail, cursor_ids, prefix}:
985          match copies:
986            case (for_check, for_update):
987              match for_check:
988                case CursorResource{id, _}:
989                  match cursor_ids:
990                    case (current_id, next_id):
991                      cursor.list.remove.loop(rest,
992                        CursorCompare{U32.is_eq(id, current_id), for_update,
993                          tail, next_id, prefix})
994        case CursorCompare{matches, resource, tail, cursor_id, prefix}:
995          match matches:
996            case True{}:
997              CursorListRemoved{prefix, resource, tail}
998            case False{}:
999              cursor.list.remove.loop(rest, CursorSearch{tail, cursor_id,
1000                Con{resource, prefix}})

Uses (12)

Used by (1)