sig
  type entry = { mutable prev : int; mutable next : int; }
  type 'a t = {
    last_used : Tools.OrdArray.entry array;
    mutable first : int;
    mutable last : int;
    data : 'a array;
  }
  val make_from_data : 'a array -> 'Tools.OrdArray.t
  val make : int -> '-> 'Tools.OrdArray.t
  val init : int -> (int -> 'a) -> 'Tools.OrdArray.t
  val get : 'Tools.OrdArray.t -> int -> 'a
  val set : 'Tools.OrdArray.t -> int -> '-> unit
  val first : 'Tools.OrdArray.t -> int
  val last : 'Tools.OrdArray.t -> int
  val remove : 'Tools.OrdArray.t -> int -> unit
  val add_head : 'Tools.OrdArray.t -> int -> unit
  val promote : 'Tools.OrdArray.t -> int -> unit
end