sig
  type 'a t = {
    mutable data : 'a array;
    mutable start : int;
    mutable length : int;
    never_shrink : bool;
    dummy : 'a;
  }
  val create : ?never_shrink:bool -> 'a -> Core.Std.Int.t -> 'a Cbuffer.t
  val length : 'a Cbuffer.t -> int
  val phys_length : 'a Cbuffer.t -> int
  val is_full : 'a Cbuffer.t -> bool
  val check_index : string -> 'a Cbuffer.t -> int -> unit
  val get : 'a Cbuffer.t -> int -> 'a
  val set : 'a Cbuffer.t -> int -> 'a -> unit
  val copy_data :
    src:'a Core.Std.Array.t -> dst:'a Core.Std.Array.t -> int -> int -> unit
  val swap_array : 'a Cbuffer.t -> int -> unit
  val expand : 'a Cbuffer.t -> unit
  val shrink : 'a Cbuffer.t -> unit
  val to_array : 'a Cbuffer.t -> 'a Core.Std.Array.t
  val add : 'a Cbuffer.t -> 'a -> unit
  val drop_from : 'a Cbuffer.t -> int -> unit
  val drop_last : 'a Cbuffer.t -> unit
  val iter : 'a Cbuffer.t -> f:(int -> 'a -> unit) -> unit
  val iterr : 'a Cbuffer.t -> f:(int -> 'a -> unit) -> unit
  val of_array : 'a Core.Std.Array.t -> 'a Cbuffer.t
  val cb_compare :
    f:('a -> 'b -> bool) ->
    b1:'a Cbuffer.t -> b2:'b Cbuffer.t -> s1:int -> s2:int -> n:int -> bool
  val drop_old :
    ?cmp:('a -> 'a -> int) ->
    ?free:('b -> unit) -> f:('b -> 'a) -> cutoff:'a -> 'b Cbuffer.t -> int
  val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a Cbuffer.t
  val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a Cbuffer.t -> Sexplib.Sexp.t
end