2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
8 VarSet, IdSet, TyVarSet,
9 emptyVarSet, unitVarSet, mkVarSet,
10 extendVarSet, extendVarSetList, extendVarSet_C,
11 elemVarSet, varSetElems, subVarSet,
12 unionVarSet, unionVarSets,
13 intersectVarSet, intersectsVarSet, disjointVarSet,
14 isEmptyVarSet, delVarSet, delVarSetList, delVarSetByKey,
15 minusVarSet, foldVarSet, filterVarSet,
16 lookupVarSet, mapVarSet, sizeVarSet, seqVarSet,
20 -- XXX This define is a bit of a hack, and should be done more nicely
21 #define FAST_STRING_NOT_NEEDED 1
22 #include "HsVersions.h"
29 %************************************************************************
31 \subsection{@VarSet@s}
33 %************************************************************************
36 type VarSet = UniqSet Var
37 type IdSet = UniqSet Id
38 type TyVarSet = UniqSet TyVar
41 intersectVarSet :: VarSet -> VarSet -> VarSet
42 unionVarSet :: VarSet -> VarSet -> VarSet
43 unionVarSets :: [VarSet] -> VarSet
44 varSetElems :: VarSet -> [Var]
45 unitVarSet :: Var -> VarSet
46 extendVarSet :: VarSet -> Var -> VarSet
47 extendVarSetList:: VarSet -> [Var] -> VarSet
48 elemVarSet :: Var -> VarSet -> Bool
49 delVarSet :: VarSet -> Var -> VarSet
50 delVarSetList :: VarSet -> [Var] -> VarSet
51 minusVarSet :: VarSet -> VarSet -> VarSet
52 isEmptyVarSet :: VarSet -> Bool
53 mkVarSet :: [Var] -> VarSet
54 foldVarSet :: (Var -> a -> a) -> a -> VarSet -> a
55 lookupVarSet :: VarSet -> Var -> Maybe Var
56 -- Returns the set element, which may be
57 -- (==) to the argument, but not the same as
58 mapVarSet :: (Var -> Var) -> VarSet -> VarSet
59 sizeVarSet :: VarSet -> Int
60 filterVarSet :: (Var -> Bool) -> VarSet -> VarSet
61 extendVarSet_C :: (Var->Var->Var) -> VarSet -> Var -> VarSet
63 delVarSetByKey :: VarSet -> Unique -> VarSet
64 elemVarSetByKey :: Unique -> VarSet -> Bool
66 emptyVarSet = emptyUniqSet
67 unitVarSet = unitUniqSet
68 extendVarSet = addOneToUniqSet
69 extendVarSetList= addListToUniqSet
70 intersectVarSet = intersectUniqSets
72 intersectsVarSet:: VarSet -> VarSet -> Bool -- True if non-empty intersection
73 disjointVarSet :: VarSet -> VarSet -> Bool -- True if empty intersection
74 subVarSet :: VarSet -> VarSet -> Bool -- True if first arg is subset of second
75 -- (s1 `intersectsVarSet` s2) doesn't compute s2 if s1 is empty;
76 -- ditto disjointVarSet, subVarSet
78 unionVarSet = unionUniqSets
79 unionVarSets = unionManyUniqSets
80 varSetElems = uniqSetToList
81 elemVarSet = elementOfUniqSet
82 minusVarSet = minusUniqSet
83 delVarSet = delOneFromUniqSet
84 delVarSetList = delListFromUniqSet
85 isEmptyVarSet = isEmptyUniqSet
87 foldVarSet = foldUniqSet
88 lookupVarSet = lookupUniqSet
89 mapVarSet = mapUniqSet
90 sizeVarSet = sizeUniqSet
91 filterVarSet = filterUniqSet
92 extendVarSet_C = addOneToUniqSet_C
93 delVarSetByKey = delOneFromUniqSet_Directly
94 elemVarSetByKey = elemUniqSet_Directly
98 -- See comments with type signatures
99 intersectsVarSet s1 s2 = not (s1 `disjointVarSet` s2)
100 disjointVarSet s1 s2 = isEmptyVarSet (s1 `intersectVarSet` s2)
101 subVarSet s1 s2 = isEmptyVarSet (s1 `minusVarSet` s2)
105 seqVarSet :: VarSet -> ()
106 seqVarSet s = sizeVarSet s `seq` ()