Module Base.Avltree

type (!'k, !'v) t = private
  1. | Empty
  2. | Node of {
    1. mutable left : ('k, 'v) t;
    2. key : 'k;
    3. mutable value : 'v;
    4. mutable height : int;
    5. mutable right : ('k, 'v) t;
    }
  3. | Leaf of {
    1. key : 'k;
    2. mutable value : 'v;
    }
val empty : ('k, 'v) t
val is_empty : ('a, 'b) t -> bool
val invariant : ('k, 'v) t -> compare:('k -> 'k -> int) -> unit
val add : ('k, 'v) t -> replace:bool -> compare:('k -> 'k -> int) -> added:bool ref -> key:'k -> data:'v -> ('k, 'v) t
val first : ('k, 'v) t -> ('k * 'v) option
val last : ('k, 'v) t -> ('k * 'v) option
val find : ('k, 'v) t -> compare:('k -> 'k -> int) -> 'k -> 'v option
val find_and_call : ('k, 'v) t -> compare:('k -> 'k -> int) -> 'k -> if_found:('v -> 'a) -> if_not_found:('k -> 'a) -> 'a
val find_and_call1 : ('k, 'v) t -> compare:('k -> 'k -> int) -> 'k -> a:'a -> if_found:('v -> 'a -> 'b) -> if_not_found:('k -> 'a -> 'b) -> 'b
val find_and_call2 : ('k, 'v) t -> compare:('k -> 'k -> int) -> 'k -> a:'a -> b:'b -> if_found:('v -> 'a -> 'b -> 'c) -> if_not_found:('k -> 'a -> 'b -> 'c) -> 'c
val findi_and_call : ('k, 'v) t -> compare:('k -> 'k -> int) -> 'k -> if_found:(key:'k -> data:'v -> 'a) -> if_not_found:('k -> 'a) -> 'a
val findi_and_call1 : ('k, 'v) t -> compare:('k -> 'k -> int) -> 'k -> a:'a -> if_found:(key:'k -> data:'v -> 'a -> 'b) -> if_not_found:('k -> 'a -> 'b) -> 'b
val findi_and_call2 : ('k, 'v) t -> compare:('k -> 'k -> int) -> 'k -> a:'a -> b:'b -> if_found:(key:'k -> data:'v -> 'a -> 'b -> 'c) -> if_not_found:('k -> 'a -> 'b -> 'c) -> 'c
val mem : ('k, 'v) t -> compare:('k -> 'k -> int) -> 'k -> bool
val remove : ('k, 'v) t -> removed:bool ref -> compare:('k -> 'k -> int) -> 'k -> ('k, 'v) t
val fold : ('k, 'v) t -> init:'acc -> f:(key:'k -> data:'v -> 'acc -> 'acc) -> 'acc
val iter : ('k, 'v) t -> f:(key:'k -> data:'v -> unit) -> unit
val mapi_inplace : ('k, 'v) t -> f:(key:'k -> data:'v -> 'v) -> unit
val choose_exn : ('k, 'v) t -> 'k * 'v