package apero-core

  1. Overview
  2. Docs

Source file event_stream.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
module EventStream = struct 
  
  module type S = sig 
    type 'a t          
    
    module Sink : sig
      type 'a s             
      val of_stream : 'a t -> 'a s
      val push : 'a -> 'a s -> unit Lwt.t    
      val count : 'a s -> int 
      val close : 'a s -> unit
      val closed : 'a s -> bool
      val blocked : 'a s -> bool 
    end

    module Source : sig             
      type 'a s 
      val of_stream : 'a t -> 'a s
      val get : 'a s -> 'a option Lwt.t      
      val count : 'a s -> int 
      val closed : 'a s -> bool
      val blocked : 'a s -> bool      
    end

    val create : int -> 'a Source.s * 'a Sink.s 
  end  
  

   module Make (I : sig 
                    type 'a q 
                    val create : int -> 'a q
                    val push : 'a -> 'a q -> unit Lwt.t  
                    val get : 'a q -> 'a option Lwt.t
                    val count : 'a q -> int 
                    val close : 'a q -> unit                    
                    val closed : 'a q -> bool
                    val blocked : 'a q -> bool       
                  end ) : S with type 'a t = 'a I.q = struct 

      type 'a t = 'a I.q
             
    module Sink = struct
      type 'a s  = 'a I.q
      
      let of_stream s = s
      let push = I.push 
      let count = I.count
      let close = I.close
      let closed = I.closed
      let blocked = I.blocked
    end

    module  Source = struct
      type 'a s = 'a I.q 
      
      let of_stream s = s
      let get = I.get 
      let count = I.count      
      let closed = I.closed
      let blocked = I.blocked
    end  

    let create len = 
      let s = I.create len in 
      (Source.of_stream s, Sink.of_stream s)           
    end
end