X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fpxp%2Fnetstring%2Fnetstream.ml;fp=helm%2FDEVEL%2Fpxp%2Fnetstring%2Fnetstream.ml;h=0000000000000000000000000000000000000000;hb=e108abe5c0b4eb841c4ad332229a6c0e57e70079;hp=76c2e3a4c8abd8adfe7a2d6c4f442e8785684afc;hpb=1456c337a60f6677ee742ff7891d43fc382359a9;p=helm.git diff --git a/helm/DEVEL/pxp/netstring/netstream.ml b/helm/DEVEL/pxp/netstring/netstream.ml deleted file mode 100644 index 76c2e3a4c..000000000 --- a/helm/DEVEL/pxp/netstring/netstream.ml +++ /dev/null @@ -1,162 +0,0 @@ -(* $Id$ - * ---------------------------------------------------------------------- - * - *) - - -type t = - { s_channel : in_channel; - s_maxlength : int option; - s_blocksize : int; - mutable s_current_length : int; - mutable s_at_eos : bool; - mutable s_win_pos : int; - mutable s_win_len : int; - s_netbuf : Netbuffer.t; - s_iobuf : string; - } -;; - - -let dump s text = - print_string ("*** NETSTREAM DUMP " ^ text ^ "\n"); - Printf.printf "current_length=%d at_eos=%b win_pos=%d win_len=%d\n" - s.s_current_length s.s_at_eos s.s_win_pos s.s_win_len; - Printf.printf "netbuffer_length=%d netbuffer_size=%d\n" - (Netbuffer.length s.s_netbuf) - (String.length(Netbuffer.unsafe_buffer s.s_netbuf)); - Printf.printf "netbuffer=\"%s\"\n" - (String.escaped(Netbuffer.contents s.s_netbuf)); - print_string "*** ---------------\n"; - flush stdout -;; - - -let want_another_block s = - if not s.s_at_eos then begin - (* How much are we allowed to read? *) - let m = - match s.s_maxlength with - None -> s.s_blocksize - | Some k -> min (k - s.s_current_length) s.s_blocksize - in - (* Read this. *) - let rec read_block k = - if k < m then - let n = - input s.s_channel s.s_iobuf k (m - k) in - ( if n > 0 then - read_block (k+n) - else (* EOF *) - k - ) - else - k - in - let n = read_block 0 in - (* If n < blocksize, EOS is reached. *) - Netbuffer.add_sub_string s.s_netbuf s.s_iobuf 0 n; - s.s_win_len <- s.s_win_len + n; - s.s_current_length <- s.s_current_length + n; - s.s_at_eos <- n < s.s_blocksize; - - (* dump s "After appending block"; *) - end -;; - - -let want s n = - while not s.s_at_eos && s.s_win_len < n do - want_another_block s - done -;; - - -let want_minimum s = - want s (s.s_blocksize + s.s_blocksize) -;; - - -let move s n = - Netbuffer.delete s.s_netbuf 0 n; - s.s_win_pos <- s.s_win_pos + n; - s.s_win_len <- s.s_win_len - n; - want_minimum s; - (* dump s "After move"; *) -;; - - -let create_from_channel ch maxlength blocksize = - let s = - { s_channel = ch; - s_maxlength = maxlength; - s_blocksize = blocksize; - s_current_length = 0; - s_at_eos = false; - s_win_pos = 0; - s_win_len = 0; - s_netbuf = Netbuffer.create (2*blocksize); - s_iobuf = String.create blocksize; - } - in - want_minimum s; - s -;; - - -let create_from_string str = - let l = String.length str in - { s_channel = stdin; - s_maxlength = None; - s_blocksize = l; - s_current_length = l; - s_at_eos = true; - s_win_pos = 0; - s_win_len = l; - s_netbuf = - ( let nb = Netbuffer.create l in - Netbuffer.add_string nb str; - nb - ); - s_iobuf = ""; - } -;; - - -let block_size s = s.s_blocksize;; - -let current_length s = s.s_current_length;; - -let at_eos s = s.s_at_eos;; - -let window_position s = s.s_win_pos;; - -let window_length s = s.s_win_len;; - -let window s = s.s_netbuf;; - -let print_stream s = - Format.printf - "" - s.s_win_pos - s.s_win_len - s.s_current_length - s.s_at_eos -;; - - -(* ====================================================================== - * History: - * - * $Log$ - * Revision 1.1 2000/11/17 09:57:27 lpadovan - * Initial revision - * - * Revision 1.2 2000/06/24 20:20:33 gerd - * Added the toploop printer. - * - * Revision 1.1 2000/04/15 13:07:48 gerd - * Initial revision. - * - * - *)