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}})