From 7b2ffdc0b95b32c31a6e913d109ef77eab6f5f1c Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 20 Oct 2014 14:47:51 +0200 Subject: [PATCH] stub for CCMap (extension of the standard Map module) --- _oasis | 2 +- core/CCMap.ml | 41 +++++++++++++++++++++++++++++++++++++++++ core/CCMap.mli | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 core/CCMap.ml create mode 100644 core/CCMap.mli diff --git a/_oasis b/_oasis index ed297ebf..23032165 100644 --- a/_oasis +++ b/_oasis @@ -48,7 +48,7 @@ Library "containers" CCHeap, CCList, CCOpt, CCPair, CCFun, CCHash, CCKList, CCInt, CCBool, CCArray, CCOrd, CCIO, CCRandom, CCKTree, CCTrie, CCString, CCHashtbl, - CCFlatHashtbl, CCSexp + CCFlatHashtbl, CCSexp, CCMap FindlibName: containers Library "containers_string" diff --git a/core/CCMap.ml b/core/CCMap.ml new file mode 100644 index 00000000..bb92ab80 --- /dev/null +++ b/core/CCMap.ml @@ -0,0 +1,41 @@ + +(* +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 Extensions of Standard Map} *) + +module type S = sig + include Map.S + + val to_list : 'a t -> (key * 'a) list +end + +module Make(O : Map.OrderedType) = struct + include Map.Make(O) + + let to_list m = + fold (fun k v acc -> (k,v)::acc) m [] +end + diff --git a/core/CCMap.mli b/core/CCMap.mli new file mode 100644 index 00000000..25493a22 --- /dev/null +++ b/core/CCMap.mli @@ -0,0 +1,40 @@ + +(* +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 Extensions of Standard Map} + +Provide useful functions and iterators on [Map.S] +@since NEXT_RELEASE *) + +module type S = sig + include Map.S + + val to_list : 'a t -> (key * 'a) list +end + +module Make(O : Map.OrderedType) : S + with type 'a t = 'a Map.Make(O).t + and type key = O.t