X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Futils%2FUniqSet.lhs;h=189221111be3210103adbef912667fc808b1e5fd;hb=aedb94f5f220b5e442b23ecc445fd38c8d9b6ba0;hp=ba312dd1987c3727f58f4fcb36ff62cb235e5028;hpb=727fae32ea0b6ca6ebdf1b3137649813e4d7ac3d;p=ghc-hetmet.git diff --git a/compiler/utils/UniqSet.lhs b/compiler/utils/UniqSet.lhs index ba312dd..1892211 100644 --- a/compiler/utils/UniqSet.lhs +++ b/compiler/utils/UniqSet.lhs @@ -10,11 +10,13 @@ Basically, the things need to be in class @Uniquable@. \begin{code} module UniqSet ( + -- * Unique set type UniqSet, -- abstract type: NOT + -- ** Manipulating these sets mkUniqSet, uniqSetToList, emptyUniqSet, unitUniqSet, - addOneToUniqSet, addListToUniqSet, - delOneFromUniqSet, delListFromUniqSet, + addOneToUniqSet, addListToUniqSet, addOneToUniqSet_C, + delOneFromUniqSet, delListFromUniqSet, delOneFromUniqSet_Directly, unionUniqSets, unionManyUniqSets, minusUniqSet, elementOfUniqSet, mapUniqSet, intersectUniqSets, isEmptyUniqSet, filterUniqSet, sizeUniqSet, foldUniqSet, @@ -22,7 +24,7 @@ module UniqSet ( ) where import Maybes -import LazyUniqFM +import UniqFM import Unique #if ! OMIT_NATIVE_CODEGEN @@ -65,9 +67,17 @@ mkUniqSet xs = MkUniqSet (listToUFM [ (x, x) | x <- xs]) addOneToUniqSet :: Uniquable a => UniqSet a -> a -> UniqSet a addOneToUniqSet (MkUniqSet set) x = MkUniqSet (addToUFM set x x) +addOneToUniqSet_C :: Uniquable a + => (a -> a -> a) -> UniqSet a -> a -> UniqSet a +addOneToUniqSet_C f (MkUniqSet set) x = MkUniqSet (addToUFM_C f set x x) + delOneFromUniqSet :: Uniquable a => UniqSet a -> a -> UniqSet a delOneFromUniqSet (MkUniqSet set) x = MkUniqSet (delFromUFM set x) +delOneFromUniqSet_Directly :: Uniquable a => UniqSet a -> Unique -> UniqSet a +delOneFromUniqSet_Directly (MkUniqSet set) u + = MkUniqSet (delFromUFM_Directly set u) + delListFromUniqSet :: Uniquable a => UniqSet a -> [a] -> UniqSet a delListFromUniqSet (MkUniqSet set) xs = MkUniqSet (delListFromUFM set xs) @@ -110,8 +120,8 @@ hashUniqSet (MkUniqSet set) = hashUFM set isEmptyUniqSet :: UniqSet a -> Bool isEmptyUniqSet (MkUniqSet set) = isNullUFM set {-SLOW: sizeUFM set == 0-} +-- | Invariant: the mapping function doesn't change the unique mapUniqSet :: (a -> a) -> UniqSet a -> UniqSet a - -- VERY IMPORTANT: *assumes* that the function doesn't change the unique mapUniqSet f (MkUniqSet set) = MkUniqSet (mapUFM f set) \end{code}