From 97451b48a98203f6308f1d7803e764ae34aab56b Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 13 Jun 2013 13:33:26 +0200 Subject: [PATCH] function Bencode.reset to clear a decoder's state --- bencode.ml | 9 +++++++++ bencode.mli | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/bencode.ml b/bencode.ml index 65c7b200..f9dacd76 100644 --- a/bencode.ml +++ b/bencode.ml @@ -264,6 +264,15 @@ let parse dec s i len = (* state machine *) parse_rec dec +let reset dec = + dec.l <- 0; + dec.c <- 0; + dec.i <- 0; + dec.len <- 0; + dec.state <- ParsePartial; + dec.stack <- []; + () + let state dec = dec.state let rest dec = diff --git a/bencode.mli b/bencode.mli index e4fdb5d0..5e9b64ea 100644 --- a/bencode.mli +++ b/bencode.mli @@ -79,6 +79,11 @@ val parse : decoder -> string -> int -> int -> parse_result It can return an error, a value or just [ParsePartial] if more input is needed *) +val reset : decoder -> unit + (** Reset the decoder to its pristine state, ready to parse something + different. Before that, {! rest} and {! rest_size} can be used + to recover the part of the input that has not been consumed yet. *) + val state : decoder -> parse_result (** Current state of the decoder *)