Add 'indexed' function
authorKhudyakov Alexey <alexey.skladnoy@gmail.com>
Thu, 10 Mar 2011 18:19:37 +0000 (18:19 +0000)
committerKhudyakov Alexey <alexey.skladnoy@gmail.com>
Thu, 10 Mar 2011 18:19:37 +0000 (18:19 +0000)
Data/Vector.hs
Data/Vector/Generic.hs
Data/Vector/Unboxed.hs

index bccf383..48a0e7f 100644 (file)
@@ -81,6 +81,9 @@ module Data.Vector (
 
   -- * Elementwise operations
 
+  -- ** Indexing
+  indexed,
+
   -- ** Mapping
   map, imap, concatMap,
 
@@ -728,6 +731,14 @@ modify :: (forall s. MVector s a -> ST s ()) -> Vector a -> Vector a
 {-# INLINE modify #-}
 modify p = G.modify p
 
+-- Indexing
+-- --------
+
+-- | /O(n)/ Pair each element in a vector with its index
+indexed :: Vector a -> Vector (Int,a)
+{-# INLINE indexed #-}
+indexed = G.indexed
+
 -- Mapping
 -- -------
 
index 3a7836e..dab9163 100644 (file)
@@ -71,6 +71,9 @@ module Data.Vector.Generic (
 
   -- * Elementwise operations
 
+  -- ** Indexing
+  indexed,
+
   -- ** Mapping
   map, imap, concatMap,
 
@@ -874,6 +877,14 @@ modifyWithStream :: Vector v a
 {-# INLINE modifyWithStream #-}
 modifyWithStream p v s = new (New.modifyWithStream p (clone v) s)
 
+-- Indexing
+-- --------
+
+-- | /O(n)/ Pair each element in a vector with its index
+indexed :: (Vector v a, Vector v (Int,a)) => v a -> v (Int,a)
+{-# INLINE indexed #-}
+indexed = unstream . inplace MStream.indexed . stream
+
 -- Mapping
 -- -------
 
index 7906d71..95afb0d 100644 (file)
@@ -94,6 +94,9 @@ module Data.Vector.Unboxed (
 
   -- * Elementwise operations
 
+  -- ** Indexing
+  indexed,
+
   -- ** Mapping
   map, imap, concatMap,
 
@@ -708,6 +711,14 @@ modify :: Unbox a => (forall s. MVector s a -> ST s ()) -> Vector a -> Vector a
 {-# INLINE modify #-}
 modify p = G.modify p
 
+-- Indexing
+-- --------
+
+-- | /O(n)/ Pair each element in a vector with its index
+indexed :: Unbox a => Vector a -> Vector (Int,a)
+{-# INLINE indexed #-}
+indexed = G.indexed
+
 -- Mapping
 -- -------