From 059e0b064d924d993b983e178dc3481d2b7a9a2d Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 2 Sep 2014 23:46:06 +0200 Subject: [PATCH] CCPervasives module, replacing modules of the standard library --- .ocamlinit | 2 + README.md | 5 +- _oasis | 7 ++ _tags | 161 ++++++++++++++++++++++--------------- pervasives/CCPervasives.ml | 48 +++++++++++ 5 files changed, 155 insertions(+), 68 deletions(-) create mode 100644 pervasives/CCPervasives.ml diff --git a/.ocamlinit b/.ocamlinit index be85d342..499825da 100644 --- a/.ocamlinit +++ b/.ocamlinit @@ -2,11 +2,13 @@ #thread #directory "_build/core";; #directory "_build/misc";; +#directory "_build/pervasives/";; #directory "_build/string";; #directory "_build/threads";; #directory "_build/tests/";; #load "containers.cma";; #load "containers_string.cma";; +#load "containers_pervasives.cma";; #load "containers_misc.cma";; #thread;; #load "containers_thread.cma";; diff --git a/README.md b/README.md index 9e9fa580..52b2c3e2 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,10 @@ ocaml-containers KMP search algorithm, and a few naive utils). Again, modules are independent and sometimes parametric on the string and char types (so they should be able to deal with your favorite unicode library). -3. Random stuff, with *NO* *GUARANTEE* of even being barely usable or tested, +3. A drop-in replacement to the standard library, `containers.pervasives`, + that defined a `CCPervasives` module intented to be opened to extend some + modules of the stdlib. +4. Random stuff, with *NO* *GUARANTEE* of even being barely usable or tested, in other dirs (mostly `misc` but also `lwt` and `threads`). It's where I tend to write code when I want to test some idea, so half the modules (at least) are unfinished or don't really work. diff --git a/_oasis b/_oasis index f9204fb4..601e1ddf 100644 --- a/_oasis +++ b/_oasis @@ -58,6 +58,13 @@ Library "containers_string" FindlibName: string FindlibParent: containers +Library "containers_pervasives" + Path: pervasives + Modules: CCPervasives + BuildDepends: containers + FindlibName: pervasives + FindlibParent: containers + Library "containers_misc" Path: misc Pack: true diff --git a/_tags b/_tags index 25a336b6..865829e3 100644 --- a/_tags +++ b/_tags @@ -1,5 +1,5 @@ # OASIS_START -# DO NOT EDIT (digest: 1907902d29ff8cd23331587c97b0f346) +# DO NOT EDIT (digest: fbebfae7c483734f1144067d9ae9954b) # Ignore VCS directories, you can use the same kind of rule outside # OASIS_START/STOP if you want to exclude directories that contains # useless stuff for the build process @@ -14,61 +14,56 @@ "_darcs": -traverse "_darcs": not_hygienic # Library containers -"containers.cmxs": use_containers -"cache.cmx": for-pack(Containers) -"deque.cmx": for-pack(Containers) -"gen.cmx": for-pack(Containers) -"fHashtbl.cmx": for-pack(Containers) -"fQueue.cmx": for-pack(Containers) -"flatHashtbl.cmx": for-pack(Containers) -"hashset.cmx": for-pack(Containers) -"heap.cmx": for-pack(Containers) -"lazyGraph.cmx": for-pack(Containers) -"persistentGraph.cmx": for-pack(Containers) -"persistentHashtbl.cmx": for-pack(Containers) -"pHashtbl.cmx": for-pack(Containers) -"sequence.cmx": for-pack(Containers) -"skipList.cmx": for-pack(Containers) -"splayTree.cmx": for-pack(Containers) -"splayMap.cmx": for-pack(Containers) -"univ.cmx": for-pack(Containers) -"vector.cmx": for-pack(Containers) -"bij.cmx": for-pack(Containers) -"piCalculus.cmx": for-pack(Containers) -"bencode.cmx": for-pack(Containers) -"sexp.cmx": for-pack(Containers) -"RAL.cmx": for-pack(Containers) -"multiSet.cmx": for-pack(Containers) -"unionFind.cmx": for-pack(Containers) -"smallSet.cmx": for-pack(Containers) -"leftistheap.cmx": for-pack(Containers) -"absSet.cmx": for-pack(Containers) -"CSM.cmx": for-pack(Containers) -"multiMap.cmx": for-pack(Containers) -"actionMan.cmx": for-pack(Containers) -"BV.cmx": for-pack(Containers) -"qCheck.cmx": for-pack(Containers) -"bencodeOnDisk.cmx": for-pack(Containers) -"show.cmx": for-pack(Containers) -"tTree.cmx": for-pack(Containers) -"hGraph.cmx": for-pack(Containers) -"automaton.cmx": for-pack(Containers) -"conv.cmx": for-pack(Containers) -"levenshtein.cmx": for-pack(Containers) -"bidir.cmx": for-pack(Containers) -"iteratee.cmx": for-pack(Containers) -"ty.cmx": for-pack(Containers) -"tell.cmx": for-pack(Containers) -"bencodeStream.cmx": for-pack(Containers) -"ratTerm.cmx": for-pack(Containers) -"cause.cmx": for-pack(Containers) -"KMP.cmx": for-pack(Containers) -"circList.cmx": for-pack(Containers) -<*.ml{,i}>: package(unix) +"core/containers.cmxs": use_containers +# Library containers_string +"string/containers_string.cmxs": use_containers_string +"string/KMP.cmx": for-pack(Containers_string) +"string/levenshtein.cmx": for-pack(Containers_string) +# Library containers_misc +"misc/containers_misc.cmxs": use_containers_misc +"misc/cache.cmx": for-pack(Containers_misc) +"misc/fHashtbl.cmx": for-pack(Containers_misc) +"misc/flatHashtbl.cmx": for-pack(Containers_misc) +"misc/hashset.cmx": for-pack(Containers_misc) +"misc/heap.cmx": for-pack(Containers_misc) +"misc/lazyGraph.cmx": for-pack(Containers_misc) +"misc/persistentGraph.cmx": for-pack(Containers_misc) +"misc/pHashtbl.cmx": for-pack(Containers_misc) +"misc/skipList.cmx": for-pack(Containers_misc) +"misc/splayTree.cmx": for-pack(Containers_misc) +"misc/splayMap.cmx": for-pack(Containers_misc) +"misc/univ.cmx": for-pack(Containers_misc) +"misc/bij.cmx": for-pack(Containers_misc) +"misc/piCalculus.cmx": for-pack(Containers_misc) +"misc/bencode.cmx": for-pack(Containers_misc) +"misc/sexp.cmx": for-pack(Containers_misc) +"misc/RAL.cmx": for-pack(Containers_misc) +"misc/unionFind.cmx": for-pack(Containers_misc) +"misc/smallSet.cmx": for-pack(Containers_misc) +"misc/absSet.cmx": for-pack(Containers_misc) +"misc/CSM.cmx": for-pack(Containers_misc) +"misc/actionMan.cmx": for-pack(Containers_misc) +"misc/bencodeOnDisk.cmx": for-pack(Containers_misc) +"misc/tTree.cmx": for-pack(Containers_misc) +"misc/printBox.cmx": for-pack(Containers_misc) +"misc/hGraph.cmx": for-pack(Containers_misc) +"misc/automaton.cmx": for-pack(Containers_misc) +"misc/conv.cmx": for-pack(Containers_misc) +"misc/bidir.cmx": for-pack(Containers_misc) +"misc/iteratee.cmx": for-pack(Containers_misc) +"misc/bTree.cmx": for-pack(Containers_misc) +"misc/ty.cmx": for-pack(Containers_misc) +"misc/tell.cmx": for-pack(Containers_misc) +"misc/bencodeStream.cmx": for-pack(Containers_misc) +"misc/ratTerm.cmx": for-pack(Containers_misc) +"misc/cause.cmx": for-pack(Containers_misc) +"misc/AVL.cmx": for-pack(Containers_misc) +"misc/parseReact.cmx": for-pack(Containers_misc) +: package(unix) +: use_containers # Library containers_thread "threads/containers_thread.cmxs": use_containers_thread : package(threads) -: package(unix) : use_containers # Library containers_lwt "lwt/containers_lwt.cmxs": use_containers_lwt @@ -78,50 +73,82 @@ : package(lwt.unix) : package(unix) : use_containers +: use_containers_misc # Library containers_cgi "cgi/containers_cgi.cmxs": use_containers_cgi : package(CamlGI) -: package(unix) : use_containers # Executable benchs "tests/benchs.native": package(bench) "tests/benchs.native": package(unix) "tests/benchs.native": use_containers +"tests/benchs.native": use_containers_misc +"tests/benchs.native": use_containers_string : package(bench) +: use_containers_string # Executable bench_conv "tests/bench_conv.native": package(benchmark) -"tests/bench_conv.native": package(unix) "tests/bench_conv.native": use_containers +# Executable bench_batch +"tests/bench_batch.native": package(benchmark) +"tests/bench_batch.native": use_containers : package(benchmark) +# Executable bench_hash +"tests/bench_hash.native": package(unix) +"tests/bench_hash.native": use_containers +"tests/bench_hash.native": use_containers_misc +: package(unix) +: use_containers_misc # Executable test_levenshtein "tests/test_levenshtein.native": package(qcheck) -"tests/test_levenshtein.native": package(unix) "tests/test_levenshtein.native": use_containers -: package(qcheck) +# Executable test_lwt +: package(lwt) +: package(lwt.unix) +: package(oUnit) +: package(unix) +: use_containers +: use_containers_lwt +: use_containers_misc +: package(lwt) +: package(lwt.unix) +: package(oUnit) +: package(unix) +: use_containers +: use_containers_lwt +: use_containers_misc +# Executable test_threads +: package(oUnit) +: package(threads) +: use_containers +: use_containers_thread +: package(oUnit) +: package(threads) +: use_containers +: use_containers_thread # Executable run_tests -"tests/run_tests.native": package(lwt) -"tests/run_tests.native": package(lwt.unix) "tests/run_tests.native": package(oUnit) -"tests/run_tests.native": package(threads) -"tests/run_tests.native": package(unix) +"tests/run_tests.native": package(qcheck) "tests/run_tests.native": use_containers -: package(lwt) -: package(lwt.unix) : package(oUnit) -: package(threads) -: package(unix) +: package(qcheck) : use_containers # Executable web_pwd "examples/cgi/web_pwd.byte": package(CamlGI) "examples/cgi/web_pwd.byte": package(threads) -"examples/cgi/web_pwd.byte": package(unix) "examples/cgi/web_pwd.byte": use_containers "examples/cgi/web_pwd.byte": use_containers_cgi : package(CamlGI) : package(threads) -: package(unix) : use_containers : use_containers_cgi +# Executable lambda +"examples/lambda.byte": package(unix) +"examples/lambda.byte": use_containers +"examples/lambda.byte": use_containers_misc +: package(unix) +: use_containers +: use_containers_misc # OASIS_STOP : thread : thread diff --git a/pervasives/CCPervasives.ml b/pervasives/CCPervasives.ml new file mode 100644 index 00000000..acaaf6ef --- /dev/null +++ b/pervasives/CCPervasives.ml @@ -0,0 +1,48 @@ + +(* +copyright (c) 2013-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 Drop-In replacement to Stdlib} + +This module is meant to be opened if one doesn't want to use both, say, +[List] and [CCList]. Instead, [List] is now an alias to +{[struct + include List + include CCList + end +]} + +*) + +module Array = struct include Array include CCArray end +module Bool = CCBool +module Error = CCError +module Fun = CCFun +module Int = CCInt +module List = struct include List include CCList end +module Opt = CCOpt +module Pair = CCPair +module String = struct include String include CCString end +module Vector = CCVector