From d95495dc1233a0c9a98dc6f06d8916a92a6a7b63 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 30 Oct 2014 01:33:43 +0100 Subject: [PATCH] sequence.bigarray --- .ocamlinit | 8 +++++-- _oasis | 13 ++++++++++ bigarray/sequenceBigarray.ml | 45 +++++++++++++++++++++++++++++++++++ bigarray/sequenceBigarray.mli | 34 ++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 bigarray/sequenceBigarray.ml create mode 100644 bigarray/sequenceBigarray.mli diff --git a/.ocamlinit b/.ocamlinit index b54780c..7123b8d 100644 --- a/.ocamlinit +++ b/.ocamlinit @@ -1,5 +1,9 @@ #directory "_build";; #load "sequence.cma";; + open Sequence.Infix;; -(* vim:syntax=ocaml -*) + +#directory "_build/bigarray/";; +#load "bigarray.cma";; + +(* vim:syntax=ocaml *) diff --git a/_oasis b/_oasis index e8e1479..da48cfe 100644 --- a/_oasis +++ b/_oasis @@ -23,6 +23,10 @@ Flag invert Description: build sequence.invert (requires Delimcc) Default: false +Flag bigarray + Description: build sequence.bigarray (requires bigarray) + Default: true + Library "sequence" Path: . Modules: Sequence @@ -36,6 +40,15 @@ Library "invert" FindlibParent: sequence BuildDepends: sequence,delimcc +Library "bigarray" + Path: bigarray + Build$: flag(bigarray) + Install$: flag(bigarray) + Modules: SequenceBigarray + FindlibName: bigarray + FindlibParent: sequence + BuildDepends: sequence,bigarray + Document sequence Title: Sequence docs Type: ocamlbuild (0.3) diff --git a/bigarray/sequenceBigarray.ml b/bigarray/sequenceBigarray.ml new file mode 100644 index 0000000..fd61b86 --- /dev/null +++ b/bigarray/sequenceBigarray.ml @@ -0,0 +1,45 @@ +(* +Copyright (c) 2014, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + +(** {1 Interface and Helpers for bigarrays} *) + +let of_bigarray b yield = + let len = Bigarray.Array1.dim b in + for i=0 to len-1 do + yield b.{i} + done + +let mmap filename = + fun yield -> + let fd = Unix.openfile filename [Unix.O_RDONLY] 0 in + let len = Unix.lseek fd 0 Unix.SEEK_END in + let _ = Unix.lseek fd 0 Unix.SEEK_SET in + let b = Bigarray.Array1.map_file fd Bigarray.Char Bigarray.C_layout false len in + try + of_bigarray b yield; + Unix.close fd + with e -> + Unix.close fd; + raise e diff --git a/bigarray/sequenceBigarray.mli b/bigarray/sequenceBigarray.mli new file mode 100644 index 0000000..f7de183 --- /dev/null +++ b/bigarray/sequenceBigarray.mli @@ -0,0 +1,34 @@ +(* +Copyright (c) 2014, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + +(** {1 Interface and Helpers for bigarrays} + +@since NEXT_RELEASE *) + +val of_bigarray : ('a, _, _) Bigarray.Array1.t -> 'a Sequence.t +(** Iterate on the elements of a 1-D array *) + +val mmap : string -> char Sequence.t +(** Map the file into memory, and read the characters. *)