functor (BB : Bounding_box_intf.S->
  sig
    type bb = BB.t
    type 'a t = Empty | Node of (bb * 'a t) list | Leaf of (bb * 'a) list
    val empty : 'a t
    val empty_node : bb * 'a t
    val bounding_box_of_nodes : (bb * 'b) list -> bb
    val size : 'a t -> int
    val partition_by_min_delta :
      (bb * 'a t) list -> bb -> (bb * 'a t) * (bb * 'a t) list
    val quadratic_split :
      (bb * 'a) list -> (bb * (bb * 'a) list) * (bb * (bb * 'a) list)
    val insert' :
      ?max_nodes:int -> 'a t -> bb -> '-> (bb * 'a t) * (bb * 'a t)
    val insert : ?max_nodes:int -> 'a t -> bb -> '-> 'a t
    val search : 'a t -> bb -> 'a list
  end