package gapi-ocaml

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file gapiPipe.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
module Option = GapiOption

module OcamlnetPipe = struct
  type t = {
    netpipe : Netchannels.pipe;
    outchannel : Netchannels.out_obj_channel option;
    outfilter : Netchannels.output_filter option;
    inchannel : Netchannels.in_obj_channel option;
    infilter : Netchannels.input_filter option;
  }

  let create ?out_channel ?in_channel () =
    let netpipe = new Netchannels.pipe () in
    let outfilter =
      Option.map
        (fun ch -> new Netchannels.output_filter netpipe ch)
        out_channel
    in
    let infilter =
      Option.map (fun ch -> new Netchannels.input_filter ch netpipe) in_channel
    in
    {
      netpipe;
      outchannel = out_channel;
      outfilter;
      inchannel = in_channel;
      infilter;
    }

  let in_ch p =
    Option.value ~default:(p.netpipe :> Netchannels.in_obj_channel) p.infilter

  let read_byte p =
    let ch = in_ch p in
    ch#input_byte ()

  let read_bytes p len =
    let result = Bytes.create len in
    let ch = in_ch p in
    ignore (ch#input result 0 len);
    result

  let read_line p =
    let ch = in_ch p in
    ch#input_line ()

  let read_all p =
    let ch = in_ch p in
    Netchannels.string_of_in_obj_channel ch

  let out_ch p =
    Option.value ~default:(p.netpipe :> Netchannels.out_obj_channel) p.outfilter

  let write_byte p b =
    let ch = out_ch p in
    ch#output_byte b

  let write_string p s =
    let ch = out_ch p in
    ch#output_string s

  let end_reading p =
    p.netpipe#close_in ();
    Option.iter (fun ch -> ch#close_in ()) p.infilter;
    Option.iter (fun ch -> ch#close_in ()) p.inchannel

  let end_writing p =
    p.netpipe#close_out ();
    Option.iter (fun ch -> ch#close_out ()) p.outfilter;
    Option.iter (fun ch -> ch#close_out ()) p.outchannel
end
OCaml

Innovation. Community. Security.