package incremental

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file reduce_balanced.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
open! Core
open! Import

let create state children ~f ~reduce =
  let len = Array.length children in
  if len = 0
  then None
  else (
    let reducer = Balanced_reducer.create_exn () ~len ~reduce in
    if debug then Balanced_reducer.invariant (const ()) reducer;
    let node =
      Expert1.Node.create state (fun () ->
        let a = Balanced_reducer.compute_exn reducer in
        if debug then Balanced_reducer.invariant (const ()) reducer;
        a)
    in
    for i = 0 to len - 1 do
      Expert1.Node.add_dependency
        node
        (Expert1.Dependency.create children.(i) ~on_change:(fun a ->
           Balanced_reducer.set_exn reducer i (f a);
           if debug then Balanced_reducer.invariant (const ()) reducer))
    done;
    Some (Expert1.Node.watch node))
;;