@@ -175,20 +175,21 @@ module internal AdaptiveIndexListHelpers =
175175 let mutable store = MapExt.empty< 'k, Index>
176176
177177 member x.Invoke ( k : 'k ) =
178- let ( left , self , right ) = MapExt.neighbours k store
179- match self with
180- | Some i ->
181- i
182- | None ->
183- let result =
178+ let mutable index = Index.zero
179+ let inline ret i = index <- i; Some i
180+ let newStore =
181+ store |> MapExt.changeWithNeighbours k ( fun left self right ->
182+ match self with
183+ | Some i -> ret i
184+ | None ->
184185 match left, right with
185- | None, None -> Index.after Index.zero
186- | Some(_, l), None -> Index.after l
187- | None, Some(_, r) -> Index.before r
188- | Some (_, l), Some(_, r) -> Index.between l r
189-
190- store <- MapExt.add k result store
191- result
186+ | None, None -> Index.after Index.zero |> ret
187+ | Some(_, l), None -> Index.after l |> ret
188+ | None, Some(_, r) -> Index.before r |> ret
189+ | Some (_, l), Some(_, r) -> Index.between l r |> ret
190+ )
191+ store <- newStore
192+ index
192193
193194 member x.Revoke ( k : 'k ) =
194195 match MapExt.tryRemove k store with
0 commit comments