sig
  module V :
    sig
      type t
      type elt = int
      val make : ?size:int -> unit -> t
      val set : t -> int -> elt -> unit
      val get : t -> int -> elt
      val clear : t -> unit
      val index_max : t -> int
      val length : t -> int
      val capacity : t -> int
      val blit : t -> int -> t -> int -> int -> unit
      val default : unit -> elt
    end
  type t = { mutable v : V.t; mutable front : int; mutable back : int; }
  type elt = V.elt
  val create : ?size:int -> unit -> t
  val is_empty : t -> bool
  val clear : t -> unit
  val add : t -> V.elt -> unit
  val peek : t -> V.elt
  val compact : t -> unit
  val pop : t -> V.elt
  val size : t -> int
end