Prelude.BufferAdditional Buffer functions.
include module type of struct include Stdlib.Buffer endval create : int -> tval contents : t -> stringval to_bytes : t -> bytesval sub : t -> int -> int -> stringval blit : t -> int -> bytes -> int -> int -> unitval nth : t -> int -> charval length : t -> intval clear : t -> unitval reset : t -> unitval output_buffer : Stdlib.out_channel -> t -> unitval truncate : t -> int -> unitval add_char : t -> char -> unitval add_utf_8_uchar : t -> Stdlib.Uchar.t -> unitval add_utf_16le_uchar : t -> Stdlib.Uchar.t -> unitval add_utf_16be_uchar : t -> Stdlib.Uchar.t -> unitval add_string : t -> string -> unitval add_bytes : t -> bytes -> unitval add_substring : t -> string -> int -> int -> unitval add_subbytes : t -> bytes -> int -> int -> unitval add_substitute : t -> (string -> string) -> string -> unitval add_channel : t -> Stdlib.in_channel -> int -> unitval to_seq : t -> char Stdlib.Seq.tval to_seqi : t -> (int * char) Stdlib.Seq.tval add_seq : t -> char Stdlib.Seq.t -> unitval of_seq : char Stdlib.Seq.t -> tval add_uint8 : t -> int -> unitval add_int8 : t -> int -> unitval add_uint16_ne : t -> int -> unitval add_uint16_be : t -> int -> unitval add_uint16_le : t -> int -> unitval add_int16_ne : t -> int -> unitval add_int16_be : t -> int -> unitval add_int16_le : t -> int -> unitval add_int32_ne : t -> int32 -> unitval add_int32_be : t -> int32 -> unitval add_int32_le : t -> int32 -> unitval add_int64_ne : t -> int64 -> unitval add_int64_be : t -> int64 -> unitval add_int64_le : t -> int64 -> unit(scons s b) adds the string s to buffer b, returning b.
Useful for folding into a buffer accumulator.
snocs is (flip scons).
Example: (fun xs -> withbuf 100 (flip (foldl snocs) xs)) is (String.concat "").
(withbuf2 n f) is ((let r = f buf in Buffer.contents buf, r)) where buf is a fresh Buffer.t of size n.
(withbuf size f) is (withbuf2 size f |> fst).
It discards the value of (f buf), which is frequently ().
This abstracts the common pattern:
let f x =
let buf = Buffer.create n in
let f' () =
something (); Buffer.add_THING buf thing; something ()
in
f' () |> ignore; Buffer.contents bufinto:
let f' buf = ... Buffer.add_... buf ... in withbuf n f' For example:
let implode cs = withbuf (len cs) (fun b -> iter (Buffer.add_char b) cs)