def snapshot.list.cursor.acquire.loop
mylsm-lsm-store@0.6.0.1 · src/scan/Snapshot.bend:741
import mylsm-lsm-store@0.6.0.1/src/scan/Snapshot.bend as Snapshot
import Base
741
742def snapshot.list.cursor.acquire.loop(
743 fuel: Nat,
744 state: SnapshotListCursorState
745) -> SnapshotListCursorDecision:
746 match fuel:
747 case 0n:
748 snapshot.list.cursor.exhausted(state)
749 case 1n+rest:
750 match state:
751 case SnapshotCursorSearch{snapshots, snapshot_id, action,
752 prefix}:
753 match snapshots:
754 case Nil{}:
755 SnapshotListRejected{snapshot.list.cursor.restore(prefix,
756 Nil{})}
757 case Con{resource, tail}:
758 snapshot.list.cursor.acquire.loop(rest,
759 SnapshotCursorCompareCopies{
760 snapshot.resource.duplicate(resource), tail,
761 u32.duplicate(snapshot_id), action, prefix})
762 case SnapshotCursorCompareCopies{copies, tail, snapshot_ids,
763 action, prefix}:
764 match copies:
765 case (for_check, for_update):
766 match for_check:
767 case SnapshotResource{id, _, _, _}:
768 match snapshot_ids:
769 case (current_id, next_id):
770 snapshot.list.cursor.acquire.loop(rest,
771 SnapshotCursorCompare{U32.is_eq(id, current_id),
772 for_update, tail, next_id, action, prefix})
773 case SnapshotCursorCompare{matches, resource, tail, snapshot_id,
774 action, prefix}:
775 match matches:
776 case True{}:
777 snapshot.list.cursor.action(prefix, tail, resource, action)
778 case False{}:
779 snapshot.list.cursor.acquire.loop(rest,
780 SnapshotCursorSearch{tail, snapshot_id, action,
781 Con{resource, prefix}})