@@ -1081,42 +1081,25 @@ let fixpoint ~(init : ('k, unit) t) ~(edges : ('k, 'k list) t) () : ('k, unit) t
10811081 my_stats.updates_received < - my_stats.updates_received + 1 ;
10821082 match delta with
10831083 | Batch entries ->
1084- (* OPTIMIZED: Process all entries with single BFS instead of per-entry BFS *)
1085- (* Phase 1: Separate adds and removes, collect new roots *)
1086- let new_roots = ref [] in
1087- let removes = ref [] in
1084+ (* Process all init entries as a batch *)
1085+ let all_added = ref [] in
1086+ let all_removed = ref [] in
10881087 entries
10891088 |> List. iter (fun (k , v_opt ) ->
1090- match v_opt with
1091- | Some () ->
1092- if not (Hashtbl. mem state.base k) then begin
1093- Hashtbl. replace state.base k () ;
1094- new_roots := k :: ! new_roots
1095- end
1096- | None -> removes := k :: ! removes);
1097-
1098- (* Phase 2: Single BFS expansion from all new roots *)
1099- let added_from_expansion =
1100- if ! new_roots <> [] then Fixpoint. expand state ~frontier: ! new_roots
1101- else []
1102- in
1103-
1104- (* Phase 3: Handle removes (may trigger contraction) *)
1105- let all_added = ref added_from_expansion in
1106- let all_removed = ref [] in
1107- ! removes
1108- |> List. iter (fun k ->
1109- let added, removed =
1110- Fixpoint. apply_init_delta state (Remove k)
1089+ let d =
1090+ match v_opt with
1091+ | Some () -> Set (k, () )
1092+ | None -> Remove k
11111093 in
1094+ let added, removed = Fixpoint. apply_init_delta state d in
11121095 all_added := added @ ! all_added;
11131096 all_removed := removed @ ! all_removed);
1114-
11151097 (* Deduplicate and emit as batch *)
11161098 let added_set = Hashtbl. create (List. length ! all_added) in
11171099 List. iter (fun k -> Hashtbl. replace added_set k () ) ! all_added;
11181100 let removed_set = Hashtbl. create (List. length ! all_removed) in
11191101 List. iter (fun k -> Hashtbl. replace removed_set k () ) ! all_removed;
1102+ (* Net changes: added if in added_set but not removed_set, etc. *)
11201103 let net_added =
11211104 Hashtbl. fold
11221105 (fun k () acc -> if Hashtbl. mem removed_set k then acc else k :: acc)
0 commit comments