Merge pull request #437 from BridgeTheMasterBuilder/master

Fix CCMultiMap
This commit is contained in:
Simon Cruanes 2023-08-03 21:53:02 -04:00 committed by GitHub
commit 01358f93fd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 17 deletions

View file

@ -310,7 +310,7 @@ to list authors based on the git commits.
Assuming your are in a clone of the repository: Assuming your are in a clone of the repository:
1. Some dependencies are required, you'll need 1. Some dependencies are required, you'll need
`opam install benchmark qcheck-core iter gen mdx uutf`. `opam install benchmark qcheck-core iter gen mdx uutf yojson`.
2. run `make all` to enable everything (including tests). 2. run `make all` to enable everything (including tests).
3. make your changes, commit, push, and open a PR. 3. make your changes, commit, push, and open a PR.
4. use `make test` without moderation! It must pass before a PR 4. use `make test` without moderation! It must pass before a PR

View file

@ -30,7 +30,7 @@ module type S = sig
val find : t -> key -> value list val find : t -> key -> value list
(** List of values for this key *) (** List of values for this key *)
val find_iter : t -> key -> (value -> unit) -> unit val find_iter : t -> key -> value iter
(** Iterate on bindings for this key *) (** Iterate on bindings for this key *)
val count : t -> key -> int val count : t -> key -> int
@ -224,11 +224,21 @@ module type BIDIR = sig
val mem_right : t -> right -> bool val mem_right : t -> right -> bool
(** Is the right key present in at least one pair? *) (** Is the right key present in at least one pair? *)
val find_left : t -> left -> right iter val find_left : t -> left -> right list
(** Find all bindings for this given left-key *) (** List of values for this given left-key.
This used to return an iter, but returns a list since NEXT_RELEASE. *)
val find_right : t -> right -> left iter val find_left_iter : t -> left -> right iter
(** Find all bindings for this given right-key *) (** Iterate on bindings for this given left-key
@since NEXT_RELEASE *)
val find_right : t -> right -> left list
(** List of values for this given right-key.
This used to return an iter, but returns a list since NEXT_RELEASE. *)
val find_right_iter : t -> right -> left iter
(** Iterate on bindings for this given left-key
@since NEXT_RELEASE *)
val find1_left : t -> left -> right option val find1_left : t -> left -> right option
(** like {!find_left} but returns at most one value *) (** like {!find_left} but returns at most one value *)
@ -281,14 +291,21 @@ module MakeBidir (L : OrderedType) (R : OrderedType) = struct
let cardinal_left m = MapL.size m.left let cardinal_left m = MapL.size m.left
let cardinal_right m = MapR.size m.right let cardinal_right m = MapR.size m.right
let find_left m a = MapL.find_iter m.left a let find_left m a = MapL.find m.left a
let find_right m b = MapR.find_iter m.right b let find_left_iter m a = MapL.find_iter m.left a
let remove_left m a = _fold_iter (fun m b -> remove m a b) m (find_left m a) let find_right m b = MapR.find m.right b
let remove_right m b = _fold_iter (fun m a -> remove m a b) m (find_right m b) let find_right_iter m b = MapR.find_iter m.right b
let remove_left m a =
_fold_iter (fun m b -> remove m a b) m (find_left_iter m a)
let remove_right m b =
_fold_iter (fun m a -> remove m a b) m (find_right_iter m b)
let mem_left m a = MapL.mem m.left a let mem_left m a = MapL.mem m.left a
let mem_right m b = MapR.mem m.right b let mem_right m b = MapR.mem m.right b
let find1_left m a = _head_iter (find_left m a) let find1_left m a = _head_iter (find_left_iter m a)
let find1_right m b = _head_iter (find_right m b) let find1_right m b = _head_iter (find_right_iter m b)
let fold f acc m = MapL.fold m.left acc f let fold f acc m = MapL.fold m.left acc f
let pairs m = MapL.to_iter m.left let pairs m = MapL.to_iter m.left
let add_pairs m seq = _fold_iter (fun m (a, b) -> add m a b) m seq let add_pairs m seq = _fold_iter (fun m (a, b) -> add m a b) m seq

View file

@ -30,7 +30,7 @@ module type S = sig
val find : t -> key -> value list val find : t -> key -> value list
(** List of values for this key. *) (** List of values for this key. *)
val find_iter : t -> key -> (value -> unit) -> unit val find_iter : t -> key -> value iter
(** Iterate on bindings for this key. *) (** Iterate on bindings for this key. *)
val count : t -> key -> int val count : t -> key -> int
@ -119,11 +119,19 @@ module type BIDIR = sig
val mem_right : t -> right -> bool val mem_right : t -> right -> bool
(** Is the right key present in at least one pair? *) (** Is the right key present in at least one pair? *)
val find_left : t -> left -> right iter val find_left : t -> left -> right list
(** Find all bindings for this given left-key. *) (** List of values for this given left-key. *)
val find_right : t -> right -> left iter val find_left_iter : t -> left -> right iter
(** Find all bindings for this given right-key. *) (** Iterate on bindings for this given left-key.
@since NEXT_RELEASE *)
val find_right : t -> right -> left list
(** List of values for this given right-key. *)
val find_right_iter : t -> right -> left iter
(** Iterate on bindings for this given left-key.
@since NEXT_RELEASE *)
val find1_left : t -> left -> right option val find1_left : t -> left -> right option
(** Like {!find_left} but returns at most one value. *) (** Like {!find_left} but returns at most one value. *)