mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
IO: add copy_into for transferring data between channels
This commit is contained in:
parent
618e57fdd7
commit
cd26e3d3a3
2 changed files with 34 additions and 0 deletions
|
|
@ -219,6 +219,35 @@ let with_in_out ?(mode=0o644) ?(flags=[Open_creat]) filename f =
|
||||||
close_in_noerr ic;
|
close_in_noerr ic;
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
let copy_into ?(bufsize=4_096) ic oc : unit =
|
||||||
|
let buf = Bytes.create bufsize in
|
||||||
|
let cont = ref true in
|
||||||
|
while !cont do
|
||||||
|
let n = input ic buf 0 bufsize in
|
||||||
|
if n > 0 then (
|
||||||
|
output oc buf 0 n;
|
||||||
|
) else (
|
||||||
|
cont := false
|
||||||
|
)
|
||||||
|
done
|
||||||
|
|
||||||
|
(*$QR
|
||||||
|
Q.(list_of_size Gen.(0 -- 40) printable_string) (fun l ->
|
||||||
|
let s = ref "" in
|
||||||
|
OUnit.bracket_tmpfile ~prefix:"test_containers1" ~mode:[Open_creat; Open_trunc]
|
||||||
|
(fun (name1, oc1) ->
|
||||||
|
write_gen ~sep:"" oc1 (Gen.of_list l);
|
||||||
|
flush oc1;
|
||||||
|
OUnit.bracket_tmpfile ~prefix:"test_containers2" ~mode:[Open_creat; Open_trunc]
|
||||||
|
(fun (name2, oc2) ->
|
||||||
|
CCIO.with_in name1 (fun ic1 -> copy_into ic1 oc2);
|
||||||
|
flush oc2;
|
||||||
|
s := with_in name2 read_all;) ();
|
||||||
|
) ();
|
||||||
|
String.concat "" l = !s
|
||||||
|
)
|
||||||
|
*)
|
||||||
|
|
||||||
let tee funs g () = match g() with
|
let tee funs g () = match g() with
|
||||||
| None -> None
|
| None -> None
|
||||||
| Some x as res ->
|
| Some x as res ->
|
||||||
|
|
|
||||||
|
|
@ -139,6 +139,11 @@ val with_in_out : ?mode:int -> ?flags:open_flag list ->
|
||||||
@raise Sys_error in case of error.
|
@raise Sys_error in case of error.
|
||||||
@since 0.12 *)
|
@since 0.12 *)
|
||||||
|
|
||||||
|
val copy_into : ?bufsize:int -> in_channel -> out_channel -> unit
|
||||||
|
(** [copy_into ic oc] writes the content of [ic] into [oc].
|
||||||
|
It is a blocking call.
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
|
|
||||||
(** {2 Misc for Generators} *)
|
(** {2 Misc for Generators} *)
|
||||||
|
|
||||||
val tee : ('a -> unit) list -> 'a gen -> 'a gen
|
val tee : ('a -> unit) list -> 'a gen -> 'a gen
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue