mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-08 12:15:32 -05:00
merge from master (bis)
This commit is contained in:
commit
d4fa455365
9 changed files with 152 additions and 7 deletions
|
|
@ -147,6 +147,7 @@ is not necessarily up-to-date.
|
|||
- `AbsSet`, an abstract Set data structure, a bit like `LazyGraph`.
|
||||
- `Automaton`, `CSM`, state machine abstractions
|
||||
- `Bij`, a GADT-based bijection language used to serialize/deserialize your data structures
|
||||
- `Hashset`, a polymorphic imperative set on top of `PHashtbl`
|
||||
- `LazyGraph`, a lazy graph structure on arbitrary (hashable+eq) types, with basic graph functions that work even on infinite graphs, and printing to DOT.
|
||||
- `PHashtbl`, a polymorphic hashtable (with open addressing)
|
||||
- `RAL`, a random-access list structure, with `O(1)` cons/hd/tl and `O(ln(n))` access to elements by their index.
|
||||
|
|
|
|||
2
_oasis
2
_oasis
|
|
@ -113,7 +113,7 @@ Library "containers_pervasives"
|
|||
Library "containers_misc"
|
||||
Path: src/misc
|
||||
Pack: true
|
||||
Modules: AbsSet, Automaton, Bij, CSM, LazyGraph, PHashtbl,
|
||||
Modules: AbsSet, Automaton, Bij, CSM, Hashset, LazyGraph, PHashtbl,
|
||||
PrintBox, RAL, RoseTree, SmallSet, UnionFind, Univ
|
||||
BuildDepends: containers, containers.data
|
||||
FindlibName: misc
|
||||
|
|
|
|||
3
_tags
3
_tags
|
|
@ -1,5 +1,5 @@
|
|||
# OASIS_START
|
||||
# DO NOT EDIT (digest: 5d9eb57cbb89da8bde9292277cec7a96)
|
||||
# DO NOT EDIT (digest: 2b3148849efeea95c2f260b7cce3b77e)
|
||||
# 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
|
||||
|
|
@ -55,6 +55,7 @@ true: annot, bin_annot
|
|||
"src/misc/automaton.cmx": for-pack(Containers_misc)
|
||||
"src/misc/bij.cmx": for-pack(Containers_misc)
|
||||
"src/misc/CSM.cmx": for-pack(Containers_misc)
|
||||
"src/misc/hashset.cmx": for-pack(Containers_misc)
|
||||
"src/misc/lazyGraph.cmx": for-pack(Containers_misc)
|
||||
"src/misc/pHashtbl.cmx": for-pack(Containers_misc)
|
||||
"src/misc/printBox.cmx": for-pack(Containers_misc)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# OASIS_START
|
||||
# DO NOT EDIT (digest: b0ee2a2a21ef35240553e6d971c8e0b3)
|
||||
# DO NOT EDIT (digest: 2892d9c53521db701e90ccd56fbdc99a)
|
||||
src/core/CCVector
|
||||
src/core/CCPrint
|
||||
src/core/CCError
|
||||
|
|
@ -23,6 +23,7 @@ src/misc/AbsSet
|
|||
src/misc/Automaton
|
||||
src/misc/Bij
|
||||
src/misc/CSM
|
||||
src/misc/Hashset
|
||||
src/misc/LazyGraph
|
||||
src/misc/PHashtbl
|
||||
src/misc/PrintBox
|
||||
|
|
|
|||
|
|
@ -118,6 +118,7 @@ AbsSet
|
|||
Automaton
|
||||
Bij
|
||||
CSM
|
||||
Hashset
|
||||
LazyGraph
|
||||
PHashtbl
|
||||
PrintBox
|
||||
|
|
|
|||
7
setup.ml
7
setup.ml
|
|
@ -1,7 +1,7 @@
|
|||
(* setup.ml generated for the first time by OASIS v0.4.4 *)
|
||||
|
||||
(* OASIS_START *)
|
||||
(* DO NOT EDIT (digest: 83967354b3e0f92a4064bb798b8454ab) *)
|
||||
(* DO NOT EDIT (digest: 798266c533c11324b314d4c4bacd9a0c) *)
|
||||
(*
|
||||
Regenerated by OASIS v0.4.5
|
||||
Visit http://oasis.forge.ocamlcore.org for more information and
|
||||
|
|
@ -7409,6 +7409,7 @@ let setup_t =
|
|||
"Automaton";
|
||||
"Bij";
|
||||
"CSM";
|
||||
"Hashset";
|
||||
"LazyGraph";
|
||||
"PHashtbl";
|
||||
"PrintBox";
|
||||
|
|
@ -7935,7 +7936,7 @@ let setup_t =
|
|||
};
|
||||
oasis_fn = Some "_oasis";
|
||||
oasis_version = "0.4.5";
|
||||
oasis_digest = Some "{v\252ox\172\235\244E\159\020\002\195\146\141\186";
|
||||
oasis_digest = Some "\164\188^\018\173\181\135}#\017\164\201S\134\171+";
|
||||
oasis_exec = None;
|
||||
oasis_setup_args = [];
|
||||
setup_update = false
|
||||
|
|
@ -7943,6 +7944,6 @@ let setup_t =
|
|||
|
||||
let setup () = BaseSetup.setup setup_t;;
|
||||
|
||||
# 7947 "setup.ml"
|
||||
# 7948 "setup.ml"
|
||||
(* OASIS_STOP *)
|
||||
let () = setup ();;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
# OASIS_START
|
||||
# DO NOT EDIT (digest: eb7a9d2756639dc6f89797f82adff355)
|
||||
# DO NOT EDIT (digest: 64ac3a98881a419a2ed1f076194542f9)
|
||||
AbsSet
|
||||
Automaton
|
||||
Bij
|
||||
CSM
|
||||
Hashset
|
||||
LazyGraph
|
||||
PHashtbl
|
||||
PrintBox
|
||||
|
|
|
|||
75
src/misc/hashset.ml
Normal file
75
src/misc/hashset.ml
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
(*
|
||||
Copyright (c) 2013, 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 Mutable polymorphic hash-set} *)
|
||||
|
||||
type 'a sequence = ('a -> unit) -> unit
|
||||
|
||||
type 'a t = ('a, unit) PHashtbl.t
|
||||
(** A set is a hashtable, with trivial values *)
|
||||
|
||||
let empty ?max_load ?eq ?hash size =
|
||||
PHashtbl.create ?max_load ?eq ?hash size
|
||||
|
||||
let copy set = PHashtbl.copy set
|
||||
|
||||
let clear set = PHashtbl.clear set
|
||||
|
||||
let cardinal set = PHashtbl.length set
|
||||
|
||||
let mem set x = PHashtbl.mem set x
|
||||
|
||||
let add set x = PHashtbl.add set x ()
|
||||
|
||||
let remove set x = PHashtbl.remove set x
|
||||
|
||||
let iter f set = PHashtbl.iter (fun x () -> f x) set
|
||||
|
||||
let fold f acc set = PHashtbl.fold (fun acc x () -> f acc x) acc set
|
||||
|
||||
let filter p set = PHashtbl.filter (fun x () -> p x) set
|
||||
|
||||
let to_seq set k = iter k set
|
||||
|
||||
let of_seq set seq =
|
||||
seq (fun x -> add set x)
|
||||
|
||||
let union ?into (s1 : 'a t) (s2 : 'a t) =
|
||||
let into = match into with
|
||||
| Some s -> of_seq s (to_seq s1); s
|
||||
| None -> copy s1 in
|
||||
of_seq into (to_seq s2);
|
||||
into
|
||||
|
||||
let seq_filter p seq k =
|
||||
seq (fun x -> if p x then k x)
|
||||
|
||||
let inter ?into (s1 : 'a t) (s2 : 'a t) =
|
||||
let into = match into with
|
||||
| Some s -> s
|
||||
| None -> empty ~eq:s1.PHashtbl.eq ~hash:s1.PHashtbl.hash (cardinal s1) in
|
||||
(* add to [into] elements of [s1] that also belong to [s2] *)
|
||||
of_seq into (seq_filter (fun x -> mem s2 x) (to_seq s1));
|
||||
into
|
||||
64
src/misc/hashset.mli
Normal file
64
src/misc/hashset.mli
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
(*
|
||||
Copyright (c) 2013, 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 Mutable polymorphic hash-set} *)
|
||||
|
||||
type 'a sequence = ('a -> unit) -> unit
|
||||
|
||||
type 'a t = ('a, unit) PHashtbl.t
|
||||
(** A set is a hashtable, with trivial values *)
|
||||
|
||||
val empty : ?max_load:float -> ?eq:('a -> 'a -> bool) ->
|
||||
?hash:('a -> int) -> int -> 'a t
|
||||
(** See {!PHashtbl.create} *)
|
||||
|
||||
val copy : 'a t -> 'a t
|
||||
|
||||
val clear : 'a t -> unit
|
||||
|
||||
val cardinal : 'a t -> int
|
||||
|
||||
val mem : 'a t -> 'a -> bool
|
||||
|
||||
val add : 'a t -> 'a -> unit
|
||||
|
||||
val remove : 'a t -> 'a -> unit
|
||||
|
||||
val iter : ('a -> unit) -> 'a t -> unit
|
||||
|
||||
val fold : ('b -> 'a -> 'b) -> 'b -> 'a t -> 'b
|
||||
|
||||
val filter : ('a -> bool) -> 'a t -> unit
|
||||
(** destructive filter (remove elements that do not satisfy the predicate) *)
|
||||
|
||||
val to_seq : 'a t -> 'a sequence
|
||||
|
||||
val of_seq : 'a t -> 'a sequence -> unit
|
||||
|
||||
val union : ?into:'a t -> 'a t -> 'a t -> 'a t
|
||||
(** Set union. The result is stored in [into] *)
|
||||
|
||||
val inter : ?into:'a t -> 'a t -> 'a t -> 'a t
|
||||
(** Set intersection. The result is stored in [into] *)
|
||||
Loading…
Add table
Reference in a new issue