sig
  module Tree :
    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
  module Make :
    functor (P : Rtree_intf.Rtree_params->
      sig
        module Tree : Rtree_intf.Tree_S
        type a = P.t
        type t = P.t Tree.t
        val empty : Rtree.Make.t
        val size : Rtree.Make.t -> int
        val insert : Rtree.Make.t -> Rtree.Make.a -> Rtree.Make.t
        val search : Rtree.Make.t -> P.Bounding_box.t -> Rtree.Make.a list
      end
end