d4293ba459d636a1be75ef595f1e2ebf068fe088
[ghc-hetmet.git] / compiler / basicTypes / VarSet.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 %
5
6 \begin{code}
7 module VarSet (
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,
17         elemVarSetByKey
18     ) where
19
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"
23
24 import Var
25 import Unique
26 import UniqSet
27 \end{code}
28
29 %************************************************************************
30 %*                                                                      *
31 \subsection{@VarSet@s}
32 %*                                                                      *
33 %************************************************************************
34
35 \begin{code}
36 type VarSet       = UniqSet Var
37 type IdSet        = UniqSet Id
38 type TyVarSet     = UniqSet TyVar
39
40 emptyVarSet     :: VarSet
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
62
63 delVarSetByKey  :: VarSet -> Unique -> VarSet
64 elemVarSetByKey :: Unique -> VarSet -> Bool
65
66 emptyVarSet     = emptyUniqSet
67 unitVarSet      = unitUniqSet
68 extendVarSet    = addOneToUniqSet
69 extendVarSetList= addListToUniqSet
70 intersectVarSet = intersectUniqSets
71
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
77
78 unionVarSet     = unionUniqSets
79 unionVarSets    = unionManyUniqSets
80 varSetElems     = uniqSetToList
81 elemVarSet      = elementOfUniqSet
82 minusVarSet     = minusUniqSet
83 delVarSet       = delOneFromUniqSet
84 delVarSetList   = delListFromUniqSet
85 isEmptyVarSet   = isEmptyUniqSet
86 mkVarSet        = mkUniqSet
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
95 \end{code}
96
97 \begin{code}
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)
102 \end{code}
103
104 \begin{code}
105 seqVarSet :: VarSet -> ()
106 seqVarSet s = sizeVarSet s `seq` ()
107 \end{code}
108