[Pkg-ocaml-maint-commits] [ocamlbricks] 01/03: Imported Upstream version 0.90+bzr400

Lucas Nussbaum lucas at moszumanska.debian.org
Tue Jul 8 09:50:36 UTC 2014


This is an automated email from the git hooks/post-receive script.

lucas pushed a commit to branch master
in repository ocamlbricks.

commit ddf9ed1c93759a6785bc7839d6d1f88e91511244
Author: Lucas Nussbaum <lucas at debian.org>
Date:   Tue Jul 8 11:09:31 2014 +0200

    Imported Upstream version 0.90+bzr400
---
 EXTRA/arrayExtra.ml       | 12 ++++++++
 EXTRA/arrayExtra.mli      |  2 ++
 EXTRA/listExtra.ml        | 17 +++++++++++
 EXTRA/listExtra.mli       |  2 ++
 EXTRA/stringExtra.ml      | 19 +++++++++---
 EXTRA/stringExtra.mli     |  4 +++
 EXTRA/unixExtra.ml        | 13 ++++++++
 EXTRA/unixExtra.mli       |  9 ++++++
 SHELL/linux.ml            | 48 +++++++++++++++--------------
 SHELL/linux.mli           |  8 ++---
 STRUCTURES/cortex.ml      | 36 +++++++++++++++++++++-
 STRUCTURES/cortex.mli     |  8 +++++
 STRUCTURES/cortex_lib.ml  | 77 +++++++++++++++++++++++++++++++++++++++++++++++
 STRUCTURES/cortex_lib.mli | 24 +++++++++++++++
 STRUCTURES/endpoint.mli   | 12 ++++----
 meta.ml.released          | 10 +++---
 16 files changed, 258 insertions(+), 43 deletions(-)

diff --git a/EXTRA/arrayExtra.ml b/EXTRA/arrayExtra.ml
index 05b48cb..16c42b7 100644
--- a/EXTRA/arrayExtra.ml
+++ b/EXTRA/arrayExtra.ml
@@ -368,6 +368,10 @@ let partitioni =
   let result = Array.map (fun l -> Array.of_list (List.rev l)) ls in
   result
   
+let amass ~size = 
+  if size <= 0 then invalid_arg "ArrayExtra.amass: size must be greater than zero" else
+  partitioni (fun i x -> i/size)
+ 
 (** {b Example}:
 {[
 # cut [1;2;3;0;2] [|0;1;2;3;4;5;6;7;8;9|];;
@@ -383,6 +387,14 @@ let cut ~lengths xs =
     List.map (fun (start, len) -> Array.sub xs start len) start_len_list
   with Invalid_argument "Array.sub" -> invalid_arg "ArrayExtra.cut"
 
+(** As standard [Array.sub] but with optional length (if not provided, the length is defined 
+    in order to take the rest of the list after the given position) *)  
+let sub ?len xs pos = 
+ let len = match len with
+ | None -> (Array.length xs) - pos
+ | Some n -> n
+ in
+ Array.sub xs pos len
 
 (** Tools for matrices (arrays of arrays). *)
 module Matrix = struct
diff --git a/EXTRA/arrayExtra.mli b/EXTRA/arrayExtra.mli
index 9c05f33..579125c 100644
--- a/EXTRA/arrayExtra.mli
+++ b/EXTRA/arrayExtra.mli
@@ -19,6 +19,8 @@
 val of_known_length_list : ?reversing:bool -> int -> 'a list -> 'a array
 val partition  : ?min_size:int -> ('a -> int) -> 'a array -> 'a array array
 val partitioni : ?min_size:int -> (int -> 'a -> int) -> 'a array -> 'a array array
+val amass      : size:int -> 'a array -> 'a array array
+val sub        : ?len:int -> 'a array -> int -> 'a array
 
 val int_seq   : min:int   -> max:int   -> incr:int   -> int array
 val float_seq : min:float -> max:float -> incr:float -> float array
diff --git a/EXTRA/listExtra.ml b/EXTRA/listExtra.ml
index 415cb31..2650fed 100644
--- a/EXTRA/listExtra.ml
+++ b/EXTRA/listExtra.ml
@@ -221,6 +221,23 @@ let remove_duplicates ?(take_first=true) =
 ;;
 
 (** {b Example}:
+{[# let xs = ['a';'b';'c';'d';'e';'f';'g';'h';'i';'j'] ;;
+#ListExtra.amass 3 xs ;;
+  : char list list = [['a'; 'b'; 'c']; ['d'; 'e'; 'f']; ['g'; 'h'; 'i']; ['j']]
+# xs = List.concat (ListExtra.amass 3 xs) ;;
+  : bool = true ]}*)
+let amass ~size xs =
+  if size <= 0 then invalid_arg "ListExtra.amass: size must be greater than zero" else
+  let rec loop i acc1 acc2 xs =
+    if i>size then loop 1 [] ((List.rev acc1)::acc2) xs else
+    match xs with
+    | []    -> if acc1=[] then acc2 else (List.rev acc1)::acc2
+    | x::xs -> loop (i+1) (x::acc1) acc2 xs
+  in
+  List.rev (loop 1 [] [] xs)
+
+    
+(** {b Example}:
 {[# int_seq 3 10 2 ;;
   : int list = [3; 5; 7; 9]
 ]}*)
diff --git a/EXTRA/listExtra.mli b/EXTRA/listExtra.mli
index ca3b384..1c3bf25 100644
--- a/EXTRA/listExtra.mli
+++ b/EXTRA/listExtra.mli
@@ -119,6 +119,8 @@ val intersection : 'a list -> 'a list -> 'a list
 val uniq         : 'a list -> 'a list
 val remove_duplicates : ?take_first:bool -> 'a list -> 'a list
 
+val amass        : size:int -> 'a list -> 'a list list
+
 (** {2 Indexes} *)
 
 val int_seq   : min:int   -> max:int   -> incr:int   -> int list
diff --git a/EXTRA/stringExtra.ml b/EXTRA/stringExtra.ml
index eb925ef..efd2823 100644
--- a/EXTRA/stringExtra.ml
+++ b/EXTRA/stringExtra.ml
@@ -516,6 +516,9 @@ let concat ?(blit:blit_function=String.blit) xs =
     (fun k src -> let l=(String.length src) in (blit src 0 dst k l); (k+l)) 0 xs in
  dst
 
+(** Remove all occurrences of a character from a string. *) 
+let rm d s = concat (split ~d s) ;;
+ 
 (** Quote a string using a prefix [l] (by default [l="'"]) and a suffix [r] (by default [r="'"]). *)
 let quote ?(l="'") ?(r="'") (x:string) = String.concat "" [l;x;r]
 
@@ -524,7 +527,7 @@ let quote ?(l="'") ?(r="'") (x:string) = String.concat "" [l;x;r]
 let assemble_if_not_empty ~prefix ~suffix x =
   if (x="") then "" else (String.concat "" [prefix;x;suffix])
 
-(** [merge_map f l] maps the function [f] on the list [l]
+(** [map_concat f l] maps the function [f] on the list [l]
     then merge the result with the separator ([sep=" "] by default). *)
 let map_concat ?(sep=" ") f l = String.concat sep (List.map f l)
 
@@ -545,6 +548,7 @@ let rec merge_fields sep (fieldlist:int list) (l:string list) =
 # ensure_cr_at_end "hello\n";;
   : string = "hello\n"]}*)
 let ensure_cr_at_end x =
+ if x="" then "\n" else (* continue *)
  let l    = (String.length x) in
  let last = (String.sub x (l-1) 1) in
  match last with "\n" -> x | _ -> x^"\n"
@@ -557,12 +561,13 @@ type word = string
     The last line in the text may not terminate with a newline. *)
 module Text = struct
 
-(** A (line structured) text is a {b list} of strings. *)
-type t = string list
-
 (** In this context, a line is not structured, it's a flatten string. *)
 type line = string
 
+(** A (line structured) text is a {b list} of strings. *)
+type t = line list
+
+
 (** Convert a string list in a raw text.
     Each string in the input list is treated by the function [ensure_cr_at_end] in order to
     add a newline if needed, then the list is folded by a simple catenation ([^]).
@@ -641,6 +646,12 @@ let collapse_and_split ?do_not_squeeze ?(d=' ') t =
   let s = String.concat (Char.escaped d) t in
   split ?do_not_squeeze ~d s
 
+(** Merge fixed-length size groups of lines. *)  
+let merge_lines ?(sep=" ") (n:int) xs =
+  let xss = ArrayExtra.amass (n) (Array.of_list xs) in
+  let zs  = Array.map (fun ys -> String.concat sep (Array.to_list ys)) xss in
+  Array.to_list zs
+
 (** Converting raw text to matrix (list of list) of strings (words) and vice-versa. *)
 module Matrix = struct
 
diff --git a/EXTRA/stringExtra.mli b/EXTRA/stringExtra.mli
index 969d41d..bea1fc3 100644
--- a/EXTRA/stringExtra.mli
+++ b/EXTRA/stringExtra.mli
@@ -91,6 +91,7 @@ val to_charlist : string -> char list
 val of_charlist : char list -> string
 val expand : (char -> string option) -> string -> string
 val tr : char -> char -> string -> string
+val rm : char -> string -> string
 
 module Charlist :
   sig
@@ -126,7 +127,10 @@ module Text :
     val of_string : ?do_not_squeeze:unit -> string -> t
     val from_file : ?do_not_squeeze:unit -> string -> t
     val grep      : ?before:int -> ?after:int -> Str.regexp -> t -> t
+    (* --- *)
+    val merge_lines        : ?sep:string -> int -> t -> t
     val collapse_and_split : ?do_not_squeeze:unit -> ?d:char -> t -> word list
+    (* --- *)
     module Matrix :
       sig
         type t = word list list
diff --git a/EXTRA/unixExtra.ml b/EXTRA/unixExtra.ml
index 578664d..c9c584d 100644
--- a/EXTRA/unixExtra.ml
+++ b/EXTRA/unixExtra.ml
@@ -770,6 +770,19 @@ let script ?stdin ?stdout ?stderr ?pseudo ?(forward=[]) ?register_pid (content:c
  end
 ;;
 
+let script_future ?stdin ?stdout ?stderr ?pseudo ?(forward=[]) ?register_pid (content:content) (argv_list:string list) : (int * string * string) Future.t =
+ begin
+ let program = temp_file ~perm:0o755 ~suffix:".sh" ~content () in
+ try
+  let k x y z = 
+    let () = Unix.unlink program in
+    (x,y,z)
+  in
+  kfuture ?stdin ?stdout ?stderr ?pseudo ~forward ?register_pid program argv_list k
+ with e -> ((Unix.unlink program); raise e)
+ end
+;;
+
 (** Tools for manipulating directory entries: *)
 module Dir = struct
 
diff --git a/EXTRA/unixExtra.mli b/EXTRA/unixExtra.mli
index 77c2500..11b1107 100644
--- a/EXTRA/unixExtra.mli
+++ b/EXTRA/unixExtra.mli
@@ -198,6 +198,15 @@ val script :
   ?register_pid:(int->unit) ->
   content -> string list -> process_result
 
+val script_future :
+  ?stdin:Endpoint.Source.t ->
+  ?stdout:Endpoint.Sink.t  ->
+  ?stderr:Endpoint.Sink.t  ->
+  ?pseudo:string ->
+  ?forward:int list ->
+  ?register_pid:(int->unit) ->
+  content -> string list -> process_result Future.t
+  
 type pid = int
 val is_process_alive : pid -> bool
 
diff --git a/SHELL/linux.ml b/SHELL/linux.ml
index f87ac9d..f13a423 100644
--- a/SHELL/linux.ml
+++ b/SHELL/linux.ml
@@ -31,7 +31,7 @@ module Process = struct
    session      : int;            (* %d (6) *)
    tty_nr       : int;            (* %d (7) *)
    tpgid        : int;            (* %d (8) *)
-   flags        : int;            (* %u (%lu before Linux 2.6.22) (9) *)
+   flags        : int64;          (* %lu (should be %u, or %lu before Linux 2.6.22) (9) *)
    minflt       : int64;          (* %lu (10) *)
    cminflt      : int64;          (* %lu (11) *)
    majflt       : int64;          (* %lu (12) *)
@@ -62,8 +62,8 @@ module Process = struct
    cnswap       : int64;          (* %lu (37) *)
    exit_signal  : int;            (* %d (since Linux 2.1.22) (38) *)
    processor    : int;            (* %d (since Linux 2.2.8)  (39) *)
-   rt_priority  : int;            (* %u (since Linux 2.5.19; was %lu before Linux 2.6.22) (40) *)
-   policy       : int;            (* %u (since Linux 2.5.19; was %lu before Linux 2.6.22) (41) *)
+   rt_priority  : int64;          (* %lu (should be %u since Linux 2.5.19; was %lu before Linux 2.6.22) (40) *)
+   policy       : int64;          (* %lu (should be %u since Linux 2.5.19; was %lu before Linux 2.6.22) (41) *)
    delayacct_blkio_ticks : int64; (* %llu (since Linux 2.6.18) (42) *)
    guest_time   : int64;          (* %lu (since Linux 2.6.24) (43) *)
    cguest_time  : int64;          (* %ld (since Linux 2.6.24) (44) *)
@@ -92,25 +92,31 @@ module Process = struct
        guest_time=guest_time; cguest_time=cguest_time;
        }
 
+
+ let input_line_from_file filename =
+   try
+     let ch = open_in filename in
+     let result = try Some (input_line ch) with _ -> None in
+     let () = close_in ch in
+     result
+   with _ -> None
+
  let stat pid =
   let filename = Printf.sprintf "/proc/%d/stat" pid in
-  try
-    let ch = open_in filename in
-    let result =
+  Option.bind
+    (input_line_from_file filename)
+    begin fun line ->
       try
-	let obj = Scanf.fscanf ch
-	 (* 0                           1                                      2                                       3                                     4               *)
-         (* 1  2  3  4  5  6  7  8  9   0  1   2   3   4   5   6   7   8   9   0   1   2   3   4   5  6   7   8   9   0   1   2   3   4   5   6   7   8  9  0  1  2   3   4 *)
-          "%d %s %c %d %d %d %d %d %u %Lu %Lu %Lu %Lu %Lu %Lu %Ld %Ld %Ld %Ld %Ld %Ld %Lu %Lu %Ld %s %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %s %Lu %Lu %d %d %u %u %Lu %Lu %Ld"
+	let obj = Scanf.sscanf line
+	 (* 0                           1                                       2                                      3                                    4                 *)
+         (* 1  2  3  4  5  6  7  8  9   0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5  6   7   8   9   0   1   2   3   4   5   6   7  8  9  0   1   2   3   4 *)
+          "%d %s %c %d %d %d %d %d %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Ld %Ld %Ld %Ld %Ld %Ld %Lu %Lu %Ld %s %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %s %Lu %Lu %d %d %Lu %Lu %Lu %Lu %Ld"
 	  stat_constructor
 	in
 	Some obj
       with Scanf.Scan_failure(msg) ->
         (Printf.kfprintf flush stderr "Linux.stat: failed scanning file %s: %s\n" filename msg; None)
-    in
-    let () = close_in ch in
-    result
-  with _ -> None
+    end
 
  let easy_stat pid =
   let easy_stat_constructor pid comm state ppid pgrp session tty_nr tpgid other_fields =
@@ -127,19 +133,15 @@ module Process = struct
     end
   in
   let filename = Printf.sprintf "/proc/%d/stat" pid in
-  try
-    let ch = open_in filename in
-    let result =
+  Option.bind
+    (input_line_from_file filename)
+    begin fun line ->
       try
-	let obj = Scanf.fscanf ch "%d %s %c %d %d %d %d %d %s@\n" easy_stat_constructor in
+	let obj = Scanf.sscanf line "%d %s %c %d %d %d %d %d %s@\n" easy_stat_constructor in
 	Some obj
       with Scanf.Scan_failure(msg) ->
         (Printf.kfprintf flush stderr "Linux.easy_stat: failed scanning file %s: %s\n" filename msg; None)
-    in
-    let () = close_in ch in
-    result
-  with _ -> None
-
+    end
 
  let get_proc_PID_directories () =
   let xs = UnixExtra.Dir.to_list ~entry_kind:Unix.S_DIR "/proc/" in
diff --git a/SHELL/linux.mli b/SHELL/linux.mli
index efccdb3..4a69497 100644
--- a/SHELL/linux.mli
+++ b/SHELL/linux.mli
@@ -59,7 +59,7 @@ module Process : sig
    tpgid : int;        (** %d (8) The ID of the foreground process group of the
                           controlling terminal of the process. *)
 
-   flags : int;        (** %u (%lu before Linux 2.6.22)
+   flags : int64;      (** %lu (should be %u, or %lu before Linux 2.6.22)
                           (9) The kernel flags word of the process.  For bit
                           meanings, see the PF_* defines in the Linux kernel
                           source file include/linux/sched.h.  Details depend
@@ -201,13 +201,13 @@ module Process : sig
    processor : int;    (** %d (since Linux 2.2.8)
                           (39) CPU number last executed on. *)
 
-   rt_priority : int;  (** %u (since Linux 2.5.19; was %lu before Linux 2.6.22)
+   rt_priority : int64;(** %lu (should be %u since Linux 2.5.19; was %lu before Linux 2.6.22)
                           (40) Real-time scheduling priority, a number in
                           the range 1 to 99 for processes scheduled under a
                           real-time policy, or 0, for non-real-time
                           processes (see sched_setscheduler(2)). *)
 
-   policy : int;       (** %u (since Linux 2.5.19; was %lu before Linux 2.6.22)
+   policy : int64;     (** %lu (should be %u since Linux 2.5.19; was %lu before Linux 2.6.22)
                           (41) Scheduling policy (see
                           sched_setscheduler(2)).  Decode using the SCHED_*
                           constants in linux/sched.h. *)
@@ -268,7 +268,7 @@ module Process : sig
  val get_descendant_easy_stats_as_forest : ?pid:int -> unit -> easy_stat Forest.t
 
  (** {2 Kill descendants}*)
- 
+
  (** Kill the whole hierarchy (forest) of the descendants of the caller (by default) or the provided [~pid].
      By default the children are processed concurrently (and recursively) using futures.
      The sequence of signals send to each process (from leafs to root) are (by default) the following in this order:
diff --git a/STRUCTURES/cortex.ml b/STRUCTURES/cortex.ml
index 33c6bc5..81715f2 100644
--- a/STRUCTURES/cortex.ml
+++ b/STRUCTURES/cortex.ml
@@ -635,7 +635,6 @@ type 'a scalar_or_cortex = ('a, ('a t)) Either.t
 let scalar x = Either.Left x
 let cortex x = Either.Right x
 
-(* La differenza con una view è che gli on_proposal sono distinti. *)
 let connection ?on_proposal ?on_commit ?private_fellow (f:'a->'b) (g:'b -> 'a) (member_x : 'a t) : 'b t =
   let (x_mutexes, x) = member_x in
   let mutexes = x_mutexes in
@@ -677,6 +676,41 @@ let connection ?on_proposal ?on_commit ?private_fellow (f:'a->'b) (g:'b -> 'a) (
   let () = Option.iter (Egg.wait) x_bell in
   group
 
+let view ?equality ?on_proposal ?on_commit ?private_fellow (f:'a->'b) (member_x : 'a t) : 'b t =
+  let (x_mutexes, x) = member_x in
+  let mutexes = x_mutexes in
+  let proposal () = f (x.Unprotected.get_content ()) in
+  let private_fellow : bool = (private_fellow = Some ()) in
+  let x_bell = if private_fellow then None else Some (Egg.create ()) in
+  let group =
+    Mutex_group.with_mutex mutexes
+      (fun () ->
+	let content_copy = ref (proposal ()) in
+	let get_content () = !content_copy in
+	let rec propose_content a =
+	  begin
+	    content_copy := a;
+	    a
+	  end
+	and
+	  result : ('b t) Lazy.t =
+	    lazy (make ~mutexes ?equality ?on_proposal ?on_commit ~get_content ~propose_content ())
+	in
+	(* end of recursive definition *)
+	let (_, group_u) as group = (Lazy.force result) in
+	let membership () = not !(group_u.Unprotected.no_longer_in_use) in
+	let trigger_on (member) =
+	  repeat_propose_to_group_on_member_commit
+	    ~signal_me_in_critical_section:(Option.extract x_bell) ~membership ~proposal ~group (member)
+	in
+	(* If the encapsulated cortex is private (not accessible outside the connection), nobody will
+	   try to modify its state, so there is no need to install an observer: *)
+	let _thd1 = if private_fellow then None else Some (Thread.create (trigger_on) (member_x)) in
+	group)
+  in
+  let () = Option.iter (Egg.wait) x_bell in
+  group
+
 
 let wrapper ?on_proposal ?on_commit ?private_fellow (member_x : 'a t) : 'a t =
   let (x_mutexes, x) = member_x in
diff --git a/STRUCTURES/cortex.mli b/STRUCTURES/cortex.mli
index abd1852..8fb1031 100644
--- a/STRUCTURES/cortex.mli
+++ b/STRUCTURES/cortex.mli
@@ -76,6 +76,14 @@ val connection :
   ('b -> 'a) ->
   'a t -> 'b t
 
+val view :
+  ?equality:('b -> 'b -> bool) ->
+  ?on_proposal:('b -> 'b -> 'b) ->
+  ?on_commit:('b -> 'b -> unit) ->
+  ?private_fellow:unit ->
+  ('a -> 'b) ->
+  'a t -> 'b t
+
 (* A wrapper is a connection with the identity functions: *)
 val wrapper :
   ?on_proposal:('a -> 'a -> 'a) ->
diff --git a/STRUCTURES/cortex_lib.ml b/STRUCTURES/cortex_lib.ml
index ec2ca91..a59c255 100644
--- a/STRUCTURES/cortex_lib.ml
+++ b/STRUCTURES/cortex_lib.ml
@@ -400,3 +400,80 @@ module Service = struct
 
 
 end (* module Service *)
+
+module Channel = struct
+
+  (* The channel may be empty or it may contain a message for someone *)
+  type 'a t = ('a option) Cortex.t
+
+  let return
+    ?equality
+    ?on_proposal
+    ?on_commit
+    ?init
+    ()
+    =
+    let equality = match equality with
+    | None   -> None
+    | Some f ->
+        Some
+          (fun xo yo -> match xo,yo with
+           | None, None     -> true
+           | Some x, Some y -> f x y
+           | _,_ -> false)
+    in
+    Cortex.return ?equality ?on_proposal ?on_commit init
+
+  let receive (t:'a t) : 'a =
+    let (result, _changed) =
+      Cortex.eval
+	~guard:(fun v -> v<>None)
+	(fun v () ->
+	  match v with
+	  | Some msg -> (None, (fun _ -> msg))
+	  | None     -> assert false)
+	()
+	t
+    in result
+
+  let send (t:'a t) (msg:'a) : bool =
+    let (result, changed) =
+      Cortex.eval
+	~guard:(fun v -> v=None)
+	(fun v () ->
+	  match v with
+	  | None   -> (Some msg), (fun _accepted -> ())
+	  | Some _ -> assert false)
+	()
+	t
+     in
+     changed
+
+end (* Canal *)
+
+module Clock = struct
+
+  (* Just a counter incremented by an hidden thread. *)
+  type t = int Cortex.t
+
+  let make ?(init=0) ?limit ?(delay=1.) () =
+    let result = Cortex.return init in
+    let _orbiter =
+      let terminate =
+        match limit with
+        | None       -> (fun i -> false)
+        | Some limit -> ((=)limit)
+      in
+      let rec loop i =
+        if terminate i then () else (* continue: *)
+        let () = Thread.delay delay in
+        let i = i + 1 in
+        let () = Cortex.set result i in
+        loop i
+      in
+      Thread.create loop init
+   in
+   result
+
+end (* Clock *)
+
diff --git a/STRUCTURES/cortex_lib.mli b/STRUCTURES/cortex_lib.mli
index 92da080..50d0531 100644
--- a/STRUCTURES/cortex_lib.mli
+++ b/STRUCTURES/cortex_lib.mli
@@ -134,3 +134,27 @@ module Service : sig
     end
 
 end
+
+(* 1-position communication channels: *)
+module Channel : sig
+
+  (* The channel may be empty or it may contain a message for someone *)
+  type 'a t = ('a option) Cortex.t
+
+  val return :
+    ?equality:('a -> 'a -> bool) ->
+    ?on_proposal:('a option -> 'a option -> 'a option) ->
+    ?on_commit:('a option -> 'a option -> unit) ->
+    ?init:'a ->
+    unit -> 'a t
+
+  val receive  : 'a t -> 'a
+  val send     : 'a t -> 'a -> bool (* success/failure of sending *)
+
+end (* Canal *)
+
+module Clock : sig
+  type t = int Cortex.t
+  val make : ?init:int -> ?limit:int -> ?delay:float -> unit -> t
+end
+
diff --git a/STRUCTURES/endpoint.mli b/STRUCTURES/endpoint.mli
index 1692954..b82c5ce 100644
--- a/STRUCTURES/endpoint.mli
+++ b/STRUCTURES/endpoint.mli
@@ -67,13 +67,13 @@ module Source :
 module Sink :
  sig
   type t =
-  | Unix_descr  of Unix.file_descr
-  | Out_channel of out_channel
-  | Filename    of string
-  | Filename_append of string
+  | Unix_descr        of Unix.file_descr
+  | Out_channel       of out_channel
+  | Filename          of string
+  | Filename_append   of string
   | Filename_overtype of string
-  | Fun_thread  of (Unix.file_descr -> unit)
-  | String_queue of String_queue.t
+  | Fun_thread        of (Unix.file_descr -> unit)
+  | String_queue      of String_queue.t
   | Trash
 
   val to_file_descr  : t -> Unix.file_descr * bool
diff --git a/meta.ml.released b/meta.ml.released
index 56a0abd..3d00f91 100644
--- a/meta.ml.released
+++ b/meta.ml.released
@@ -9,8 +9,8 @@ let libraryprefix = "/usr/lib/ocaml";;
 let configurationprefix = "/etc";;
 let localeprefix = "/usr/local/share/locale";;
 let documentationprefix = "/usr/local/share/doc";;
-let uname = "Linux 3.12-1-amd64 #1 SMP Debian 3.12.9-1 (2014-02-01) x86_64 GNU/Linux";;
-let build_date = "2014-04-02 16:27:28 +0200";;
-let revision = "393";;
-let source_date = "2014-03-24 16:51:07 +0100";;
-let source_date_utc_yy_mm_dd = "2014-03-24";;
+let uname = "Linux 3.14-1-amd64 #1 SMP Debian 3.14.7-1 (2014-06-16) x86_64 GNU/Linux";;
+let build_date = "2014-07-08 11:09:04 +0200";;
+let revision = "400";;
+let source_date = "2014-07-02 17:17:17 +0200";;
+let source_date_utc_yy_mm_dd = "2014-07-02";;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/ocamlbricks.git



More information about the Pkg-ocaml-maint-commits mailing list