2 * Copyright (c) 2017, Facebook, Inc.
5 * This source code is licensed under the MIT license found in the
6 * LICENSE file in the "hack" directory of this source tree.
10 module WithValue
(Value
: Set.OrderedType
) = struct
11 module ValueSet
= Set.Make
(Value
)
13 unique_set
: ValueSet.t
;
14 unique_list
: Value.t list
17 let empty = { unique_set
= ValueSet.empty; unique_list
= [] }
19 let add uniq_set item
=
20 if ValueSet.mem item uniq_set
.unique_set
then
24 unique_set
= (ValueSet.add item uniq_set
.unique_set
);
25 unique_list
= item
:: uniq_set
.unique_list
29 List.rev uniq_set
.unique_list
31 let items_set uniq_set
=
34 let remove item uniq_set
=
35 if ValueSet.mem item uniq_set
.unique_set
then
37 unique_set
= (ValueSet.remove item uniq_set
.unique_set
);
38 unique_list
= List.filter
(fun a
-> a
<> item
) uniq_set
.unique_list
44 ValueSet.fold
remove s2
.unique_set s1
46 let cardinal uniq_set
= ValueSet.cardinal uniq_set
.unique_set