packages feed

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 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