dense-int-set 0.1.5 → 0.2
raw patch · 2 files changed
+17/−17 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- DenseIntSet: indexVector :: Vector vector (Maybe Int) => DenseIntSet -> vector (Maybe Int)
+ DenseIntSet: indexVector :: Vector vector (Maybe index) => DenseIntSet -> (Int -> index) -> vector (Maybe index)
- DenseIntSet: presentElementsVector :: Vector vector Int => DenseIntSet -> vector Int
+ DenseIntSet: presentElementsVector :: Vector vector element => DenseIntSet -> (Int -> element) -> vector element
Files
- dense-int-set.cabal +1/−1
- library/DenseIntSet.hs +16/−16
dense-int-set.cabal view
@@ -1,5 +1,5 @@ name: dense-int-set-version: 0.1.5+version: 0.2 category: Data synopsis: Dense int-set homepage: https://github.com/metrix-ai/dense-int-set
library/DenseIntSet.hs view
@@ -14,8 +14,8 @@ lookup, -- *** Vectors presentElementsVector,- filterVector, indexVector,+ filterVector, -- *** Unfoldrs presentElementsUnfoldr, absentElementsUnfoldr,@@ -171,16 +171,28 @@ {-| Extract the present elements into a vector. -}-presentElementsVector :: GenericVector.Vector vector Int => DenseIntSet -> vector Int-presentElementsVector intSet = let+presentElementsVector :: GenericVector.Vector vector element => DenseIntSet -> (Int -> element) -> vector element+presentElementsVector intSet intToIndex = let sizeVal = size intSet unfoldr = Unfoldr.zipWithIndex (presentElementsUnfoldr intSet) in runST $ do mv <- MutableGenericVector.unsafeNew sizeVal- forM_ unfoldr $ \ (index, element) -> MutableGenericVector.unsafeWrite mv index element+ forM_ unfoldr $ \ (index, element) -> MutableGenericVector.unsafeWrite mv index (intToIndex element) GenericVector.unsafeFreeze mv {-|+Construct a vector, which maps from the original ints into their indices amongst the ones present in the set.+-}+indexVector :: GenericVector.Vector vector (Maybe index) => DenseIntSet -> (Int -> index) -> vector (Maybe index)+indexVector set@(DenseIntSet setVec) intToIndex = let+ indexVecSize = GenericVector.length setVec * 64+ in runST $ do+ v <- MutableGenericVector.replicate indexVecSize Nothing+ forM_ (Unfoldr.zipWithIndex (presentElementsUnfoldr set)) $ \ (index, element) -> do+ MutableGenericVector.unsafeWrite v element (Just (intToIndex index))+ GenericVector.unsafeFreeze v++{-| Filter a vector, leaving only the entries, under the indices, which are in the set. It is your responsibility to ensure that the indices in the set don't exceed the original vector's bounds.@@ -193,18 +205,6 @@ forM_ (Unfoldr.zipWithIndex (vectorElementsUnfoldr vector set)) $ \ (newIndex, a) -> do MutableGenericVector.unsafeWrite newVector newIndex a GenericVector.unsafeFreeze newVector--{-|-Construct a vector, which maps from the original ints into their indices amongst the ones present in the set.--}-indexVector :: GenericVector.Vector vector (Maybe Int) => DenseIntSet -> vector (Maybe Int)-indexVector set@(DenseIntSet setVec) = let- indexVecSize = GenericVector.length setVec * 64- in runST $ do- v <- MutableGenericVector.replicate indexVecSize Nothing- forM_ (Unfoldr.zipWithIndex (presentElementsUnfoldr set)) $ \ (index, element) -> do- MutableGenericVector.unsafeWrite v element (Just index)- GenericVector.unsafeFreeze v -- ** Unfoldr