Module Iobuf.Expert
The Expert
module is for building efficient out-of-module Iobuf
abstractions.
val buf : (_, _) t -> Core__.Import.Bigstring.t
These accessors will not allocate, and are mainly here to assist in building low-cost syscall wrappers.
One must be careful to avoid writing out of the limits (between
lo_min
andhi_max
) of thebuf
. Doing so would violate the invariants of the parentIobuf
.
val hi_max : (_, _) t -> int
val hi : (_, _) t -> int
val lo : (_, _) t -> int
val lo_min : (_, _) t -> int
val set_buf : (_, _) t -> Core__.Import.Bigstring.t -> unit
These setters directly set fields in
t
without checking any invariants.
val set_hi_max : (_, _) t -> int -> unit
val set_hi : (_, _) t -> int -> unit
val set_lo : (_, _) t -> int -> unit
val set_lo_min : (_, _) t -> int -> unit
to_bigstring_shared t
andto_iobuf_shared t
allocate new wrappers around the storage ofbuf t
, relative tot
's current bounds.These operations allow access outside the bounds and limits of
t
, and without respect to its read/write access. Be careful not to violatet
's invariants.
val reinitialize_of_bigstring : (_, _) t -> pos:int -> len:int -> Core__.Import.Bigstring.t -> unit
reinitialize_of_bigstring t bigstring
reinitializest
with backingbigstring
, and the window and limits specified starting atpos
and of lengthlen
.
val set_bounds_and_buffer : src:('data, _) t -> dst:('data, seek) t -> unit
These versions of
set_bounds_and_buffer
allow~src
to be read-only.~dst
will be writable through~src
aliases even though the type does not reflect this!
val set_bounds_and_buffer_sub : pos:int -> len:int -> src:('data, _) t -> dst:('data, seek) t -> unit
val protect_window : ('rw, _) t -> f:(('rw, seek) t -> 'a) -> 'a
Similar to
protect_window_and_bounds
, but does not save/restore the buffer or bounds. Mixing this with functions likeset_bounds_and_buffer
ornarrow
is unsafe; you should not modify anyything but the window insidef
.
val fillf_float : (Core__.Import.read_write, seek) t -> c_format:string -> float -> [ `Ok | `Truncated | `Format_error ]
fillf_float t ~c_format float
attempts to fill a string representation of a float into an iobuf at the current position. The representation is specified by standard Cprintf
formatting codes.The highest available byte of the window is unusable and will be set to 0 in the case that a properly formatted string would otherwise fully fill the window.
If there is enough room in (window - 1) to format the float as specified then
`Ok
is returned and the window is advanced past the written bytes.If there is not enough room in (window - 1) to format as specified then
`Truncated
is returned.If C
snprintf
indicates a format error then`Format_error
is returned.Operation is unsafe if a format code not intended for a double precision float is used (e.g., %s) or if more than one format specifier is provided, etc.