sig
  type t = {
    mutable o_s : string;
    mutable o_max_len : int;
    mutable o_len : int;
    mutable o_offs : int;
    o_init_len : int;
    o_make_room : Bi_outbuf.t -> int -> unit;
    mutable o_shared : Bi_share.Wr.tbl;
    o_shared_init_len : int;
  }
  val really_extend : Bi_outbuf.t -> int -> unit
  val flush_to_channel : Pervasives.out_channel -> Bi_outbuf.t -> int -> unit
  val create :
    ?make_room:(Bi_outbuf.t -> int -> unit) ->
    ?shrlen:int -> int -> Bi_outbuf.t
  val contents : Bi_outbuf.t -> string
  val create_channel_writer :
    ?len:int -> ?shrlen:int -> Pervasives.out_channel -> Bi_outbuf.t
  val flush_channel_writer : Bi_outbuf.t -> unit
  val create_output_writer :
    ?len:int ->
    ?shrlen:int ->
    < output : string -> int -> int -> int; .. > -> Bi_outbuf.t
  val flush_output_writer : Bi_outbuf.t -> unit
  val extend : Bi_outbuf.t -> int -> unit
  val alloc : Bi_outbuf.t -> int -> int
  val add_string : Bi_outbuf.t -> string -> unit
  val add_substring : Bi_outbuf.t -> string -> int -> int -> unit
  val add_char : Bi_outbuf.t -> char -> unit
  val add_char2 : Bi_outbuf.t -> char -> char -> unit
  val add_char4 : Bi_outbuf.t -> char -> char -> char -> char -> unit
  val unsafe_add_char : Bi_outbuf.t -> char -> unit
  val clear : Bi_outbuf.t -> unit
  val reset : Bi_outbuf.t -> unit
end