Module Iobuf.Expert
The Expert module is for building efficient out-of-module Iobuf abstractions.
val buf : (_, _) t -> Core_kernel.Bigstring.tThese 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_minandhi_max) of thebuf. Doing so would violate the invariants of the parentIobuf.
val hi_max : (_, _) t -> intval hi : (_, _) t -> intval lo : (_, _) t -> intval lo_min : (_, _) t -> intval set_buf : (_, _) t -> Core_kernel.Bigstring.t -> unitThese setters directly set fields in
twithout checking any invariants.
val set_hi_max : (_, _) t -> int -> unitval set_hi : (_, _) t -> int -> unitval set_lo : (_, _) t -> int -> unitval set_lo_min : (_, _) t -> int -> unitto_bigstring_shared tandto_iobuf_shared tallocate 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_kernel.Bigstring.t -> unitreinitialize_of_bigstring t bigstringreinitializestwith backingbigstring, and the window and limits specified starting atposand of lengthlen.
val set_bounds_and_buffer : src:('data, _) t -> dst:('data, seek) t -> unitThese versions of
set_bounds_and_bufferallow~srcto be read-only.~dstwill be writable through~srcaliases 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 -> unitval protect_window : ('rw, _) t -> f:(('rw, seek) t -> 'a) -> 'aSimilar to
protect_window_and_bounds, but does not save/restore the buffer or bounds. Mixing this with functions likeset_bounds_and_bufferornarrowis unsafe; you should not modify anyything but the window insidef.