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

glondu pushed a commit to branch master
in repository ocaml-csv.

commit b5256cf891eeccf0409a59e6af804791fad3fc27
Author: Stephane Glondu <st...@glondu.net>
Date:   Sun Jan 26 14:57:02 2014 +0100

    Imported Upstream version 1.3.2
---
 Makefile    |   2 +-
 README.md   |   8 ++---
 _oasis      |   2 +-
 setup.ml    |   6 ++--
 src/META    |   4 +--
 src/csv.ml  | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------
 src/csv.mli |   4 +--
 7 files changed, 106 insertions(+), 22 deletions(-)

diff --git a/Makefile b/Makefile
index 8545cb3..c0bb1d6 100644
--- a/Makefile
+++ b/Makefile
@@ -16,7 +16,7 @@ all byte native: configure
        ocaml setup.ml -build
 
 configure: setup.ml
-       ocaml $< -configure
+       ocaml $< -configure --enable-tests
 
 setup.ml: _oasis
        oasis setup -setup-update dynamic
diff --git a/README.md b/README.md
index a779f75..0576834 100644
--- a/README.md
+++ b/README.md
@@ -14,15 +14,15 @@ This package uses [oasis](https://github.com/ocaml/oasis) 
to generate
 its configure, build and install scripts.  You do not need oasis to
 install and use the library.  Simply run
 
-  ocaml setup.ml -configure
-  ocaml setup.ml -build
+    ocaml setup.ml -configure
+    ocaml setup.ml -build
 
 Install
 -------
 
-  ocaml setup.ml -install
+    ocaml setup.ml -install
 
 Uninstall
 ---------
 
-  ocaml setup.ml -uninstall
+    ocaml setup.ml -uninstall
diff --git a/_oasis b/_oasis
index 688b6f0..48bb2e2 100644
--- a/_oasis
+++ b/_oasis
@@ -1,7 +1,7 @@
 #                                                              -*-conf-*-
 OASISFormat: 0.3
 Name:        csv
-Version:     1.3.1
+Version:     1.3.2
 Synopsis:    A pure OCaml library to read and write CSV files.
 Description: This is a pure OCaml library to read and write CSV files, 
   including all extensions used by Excel — e.g. quotes, newlines, 
diff --git a/setup.ml b/setup.ml
index 00382f6..31de332 100644
--- a/setup.ml
+++ b/setup.ml
@@ -4,7 +4,7 @@ let () =
   with Not_found -> ();;
 
 (* OASIS_START *)
-(* DO NOT EDIT (digest: 7e9b0897d218cfb9341510fddd0e8e92) *)
+(* DO NOT EDIT (digest: 6f4cb2c8f6c74abd9ee546e9f8eb86c4) *)
 (*
    Regenerated by OASIS v0.3.0
    Visit http://oasis.forge.ocamlcore.org for more information and
@@ -5747,7 +5747,7 @@ let setup_t =
           ocaml_version = None;
           findlib_version = None;
           name = "csv";
-          version = "1.3.1";
+          version = "1.3.2";
           license =
             OASISLicense.DEP5License
               (OASISLicense.DEP5Unit
@@ -5978,7 +5978,7 @@ let setup_t =
           };
      oasis_fn = Some "_oasis";
      oasis_version = "0.3.0";
-     oasis_digest = Some "\176\200\189{W\210r\201\176R'\\\190sn\170";
+     oasis_digest = Some "\212\178\238\1387\180*\022\005\228\158\155\n>O\169";
      oasis_exec = None;
      oasis_setup_args = [];
      setup_update = false;
diff --git a/src/META b/src/META
index 12d7807..650d1f8 100644
--- a/src/META
+++ b/src/META
@@ -1,6 +1,6 @@
 # OASIS_START
-# DO NOT EDIT (digest: 89bb1bc1c854dfa0d6d1f7365dca585c)
-version = "1.3.1"
+# DO NOT EDIT (digest: 2e5599ee740dd369f8fbe4dce85222f8)
+version = "1.3.2"
 description = "A pure OCaml library to read and write CSV files."
 archive(byte) = "csv.cma"
 archive(byte, plugin) = "csv.cma"
diff --git a/src/csv.ml b/src/csv.ml
index 53813f4..2aaf0f8 100644
--- a/src/csv.ml
+++ b/src/csv.ml
@@ -6,8 +6,8 @@
      email: rjo...@redhat.com
 
      Christophe Troestler
-     email: christophe.troest...@umh.ac.be
-     WWW: http://math.umh.ac.be/an/software/
+     email: christophe.troest...@umons.ac.be
+     WWW: http://math.umons.ac.be/anum/software/
 
    This library is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License version 2.1 or
@@ -47,6 +47,88 @@ type t = string list list
 (* Specialize to int for speed *)
 let max i j = if (i:int) < j then j else i
 
+(* Enhance the List module with tail rec functions. *)
+module List = struct
+  include List
+
+  (* Implementation of [map] in JSC Core. *)
+  let map_slow l ~f = List.rev (List.rev_map f l)
+
+  let rec count_map ~f l ctr =
+    match l with
+    | [] -> []
+    | [x1] ->
+       let f1 = f x1 in
+       [f1]
+    | [x1; x2] ->
+       let f1 = f x1 in
+       let f2 = f x2 in
+       [f1; f2]
+    | [x1; x2; x3] ->
+       let f1 = f x1 in
+       let f2 = f x2 in
+       let f3 = f x3 in
+       [f1; f2; f3]
+    | [x1; x2; x3; x4] ->
+       let f1 = f x1 in
+       let f2 = f x2 in
+       let f3 = f x3 in
+       let f4 = f x4 in
+       [f1; f2; f3; f4]
+    | x1 :: x2 :: x3 :: x4 :: x5 :: tl ->
+       let f1 = f x1 in
+       let f2 = f x2 in
+       let f3 = f x3 in
+       let f4 = f x4 in
+       let f5 = f x5 in
+       f1 :: f2 :: f3 :: f4 :: f5 :: (if ctr > 1000
+                                      then map_slow ~f tl
+                                      else count_map ~f tl (ctr + 1))
+
+  let map f l = count_map ~f l 0
+
+  (* Implementation of [append] in JSC core. *)
+  let slow_append l1 l2 = List.rev_append (List.rev l1) l2
+
+  let rec count_append l1 l2 count =
+    match l1 with
+    | []               ->                         l2
+    | [x1]             -> x1                   :: l2
+    | [x1; x2]         -> x1 :: x2             :: l2
+    | [x1; x2; x3]     -> x1 :: x2 :: x3       :: l2
+    | [x1; x2; x3; x4] -> x1 :: x2 :: x3 :: x4 :: l2
+    | x1 :: x2 :: x3 :: x4 :: x5 :: tl ->
+       x1 :: x2 :: x3 :: x4 :: x5 :: (if count > 1000
+                                      then slow_append tl l2
+                                      else count_append tl l2 (count + 1))
+
+  let append l1 l2 = count_append l1 l2 0
+
+  (* Tail recursive [combine]. *)
+  let rec rev_combine acc l1 l2 =
+    match l1, l2 with
+    | ([], []) -> acc
+    | (a1::l1, a2::l2) -> rev_combine ((a1, a2) :: acc) l1 l2
+    | (_, _) -> invalid_arg "List.combine"
+
+  let slow_combine l1 l2 = List.rev (rev_combine [] l1 l2)
+
+  let rec count_combine l1 l2 count =
+    match l1, l2 with
+    | ([], []) -> []
+    | ([x1], [y1]) -> [x1, y1]
+    | ([x1; x2], [y1; y2]) -> [x1, y1; x2, y2]
+    | ([x1; x2; x3], [y1; y2; y3]) -> [x1, y1; x2, y2; x3, y3]
+    | ([x1; x2; x3; x4], [y1; y2; y3; y4]) -> [x1, y1; x2, y2; x3, y3; x4, y4]
+    | (x1 :: x2 :: x3 :: x4 :: tl1), (y1 :: y2 :: y3 :: y4 :: tl2) ->
+       (x1, y1) :: (x2, y2) :: (x3, y3) :: (x4, y4)
+       :: (if count > 1000 then slow_combine tl1 tl2
+           else count_combine tl1 tl2 (count + 1))
+    | (_, _) -> invalid_arg "List.combine"
+
+  let combine l1 l2 = count_combine l1 l2 0
+
+end
 
 class type in_obj_channel =
 object
@@ -548,7 +630,9 @@ let save ?separator ?excel_tricks fname t =
 let lines = List.length
 
 let columns csv =
-  List.fold_left max 0 (List.map List.length csv)
+  let m = ref 0 in
+  List.iter (fun row -> m := max !m (List.length row)) csv;
+  !m
 
 
 let rec dropwhile f = function
@@ -557,12 +641,12 @@ let rec dropwhile f = function
   | xs -> xs
 
 
+let rec empty_row = function
+  | [] -> true
+  | "" :: xs -> empty_row xs
+  | _ :: _ -> false
+
 let trim ?(top=true) ?(left=true) ?(right=true) ?(bottom=true) csv =
-  let rec empty_row = function
-    | [] -> true
-    | x :: _ when x <> "" -> false
-    | _ :: xs -> empty_row xs
-  in
   let csv = if top then dropwhile empty_row csv else csv in
   let csv =
     if right then
@@ -771,7 +855,7 @@ let save_out_readable chan csv =
             let rp =
               try List.combine r1 r2
               with
-                Invalid_argument "List.combine" ->
+                Invalid_argument _ ->
                   failwith (Printf.sprintf "Csv.save_out_readable: internal \
                               error: length r1 = %d, length r2 = %d"
                               (List.length r1) (List.length r2)) in
diff --git a/src/csv.mli b/src/csv.mli
index ec3d6a1..8cc671c 100644
--- a/src/csv.mli
+++ b/src/csv.mli
@@ -6,8 +6,8 @@
      email: rjo...@redhat.com
 
      Christophe Troestler
-     email: christophe.troest...@umh.ac.be
-     WWW: http://math.umh.ac.be/an/software/
+     email: christophe.troest...@umons.ac.be
+     WWW: http://math.umons.ac.be/anum/software/
 
    This library is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License version 2.1 or

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

_______________________________________________
Pkg-ocaml-maint-commits mailing list
Pkg-ocaml-maint-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-ocaml-maint-commits

Reply via email to