module Unpack_buffer: Unpack_buffer
module Unpack_one:sig
..end
type ('value, 'partial_unpack)
t
Note that t
doesn't expose its type 'partial_unpack
. It is only here to allow the
chosen implementation strategy in the .ml.
val invariant : ('a, 'b) t -> unit
val create : ?partial_unpack:'partial_unpack ->
('value, 'partial_unpack) Unpack_one.t ->
('value, 'partial_unpack) t
val create_bin_prot : 'a Bin_prot.Type_class.reader -> ('a, unit) t
create_bin_prot reader
returns an unpack buffer that unpacks the "size-prefixed"
bin_prot encoding, in which a value is encoded by first writing the length of the
bin_prot data as a 64-bit int, and then writing the bin_prot data itself. This
encoding makes it trivial to know if enough data is available in the buffer, so there
is no need to represent partially unpacked values, and hence 'partial_unpack =
unit
.val is_empty : ('a, 'b) t -> bool Or_error.t
is_empty t
returns true
if t
has no unconsumed bytes, and false
if it does.
is_empty
returns an error if t
has encountered an unpacking error.val feed : ?pos:int ->
?len:int -> ('a, 'b) t -> Bigstring.t -> unit Or_error.t
feed t buf ?pos ?len
adds the specified substring of buf
to t
's buffer. It
returns an error if t
has encountered an unpacking error.val feed_string : ?pos:int -> ?len:int -> ('a, 'b) t -> string -> unit Or_error.t
val unpack_into : ('value, 'a) t ->
'value Std_internal.Queue.t -> unit Or_error.t
unpack_into t q
unpacks all the values that it can from t
and enqueues them in
q
. If there is an unpacking error, unpack_into
returns an error, and subsequent
feed
and unpack operations on t
will return that same error -- i.e. no more data
can be fed to or unpacked from t
.val unpack_iter : ('value, 'a) t -> f:('value -> unit) -> unit Or_error.t
unpack_iter t ~f
unpacks all the values that it can from t
, calling f
on each
value as it's unpacked. If there is an unpacking error (including if f
raises),
unpack_iter
returns an error, and subsequent feed
and unpack operations on t
will return that same error -- i.e. no more data can be fed to or unpacked from t
.
Behavior is unspecified if f
operates on t
.
val debug : bool Pervasives.ref
debug
controls whether invariants are checked at each call. Setting this to true
can make things very slow.val sexp_of_t : ('value -> Sexplib.Sexp.t) ->
('partial_unpack -> Sexplib.Sexp.t) ->
('value, 'partial_unpack) t -> Sexplib.Sexp.t
create_bin_prot reader
returns an unpack buffer that unpacks the "size-prefixed"
bin_prot encoding, in which a value is encoded by first writing the length of the
bin_prot data as a 64-bit int, and then writing the bin_prot data itself. This
encoding makes it trivial to know if enough data is available in the buffer, so there
is no need to represent partially unpacked values, and hence 'partial_unpack =
unit
.is_empty t
returns true
if t
has no unconsumed bytes, and false
if it does.
is_empty
returns an error if t
has encountered an unpacking error.feed t buf ?pos ?len
adds the specified substring of buf
to t
's buffer. It
returns an error if t
has encountered an unpacking error.unpack_into t q
unpacks all the values that it can from t
and enqueues them in
q
. If there is an unpacking error, unpack_into
returns an error, and subsequent
feed
and unpack operations on t
will return that same error -- i.e. no more data
can be fed to or unpacked from t
.unpack_iter t ~f
unpacks all the values that it can from t
, calling f
on each
value as it's unpacked. If there is an unpacking error (including if f
raises),
unpack_iter
returns an error, and subsequent feed
and unpack operations on t
will return that same error -- i.e. no more data can be fed to or unpacked from t
.
Behavior is unspecified if f
operates on t
.
debug
controls whether invariants are checked at each call. Setting this to true
can make things very slow.