sig
  type 'a extent
  and interval = { start : int; length : int; } 
  val get_interval : 'Assocext.extent -> Assocext.interval
  val get_value : 'Assocext.extent -> 'a
  type 'a t
  val create : int -> 'Assocext.t
  val get_length : 'Assocext.t -> int
  exception Illegal_range
  val check : 'Assocext.t -> int -> int -> bool
  exception Extent_occupied
  val reserve : 'Assocext.t -> '-> int -> int -> 'Assocext.extent
  exception Extent_illegal
  val free : 'Assocext.extent -> 'Assocext.t -> unit
  val list_extents : 'Assocext.t -> 'Assocext.extent list
  val list_free_intervals : 'Assocext.t -> Assocext.interval list
  exception Illegal_position
  type 'a holder = Free of Assocext.interval | Reserved of 'Assocext.extent
  val get_pos_extent : 'Assocext.t -> int -> 'Assocext.holder
  val change_length : 'Assocext.extent -> 'Assocext.t -> int -> unit
  exception Out_of_bounds
  exception Empty
  val first : 'Assocext.t -> 'Assocext.extent
  val last : 'Assocext.t -> 'Assocext.extent
  val next_extent : 'Assocext.extent -> 'Assocext.extent
  val prev_extent : 'Assocext.extent -> 'Assocext.extent
  val iter : ('Assocext.extent -> unit) -> 'Assocext.t -> unit
end