@@ -34,13 +34,14 @@ module Data.Vector.Generic.Mutable (
34
34
35
35
-- ** Growing
36
36
grow , unsafeGrow ,
37
+ growFront , unsafeGrowFront ,
37
38
38
39
-- ** Restricting memory usage
39
40
clear ,
40
41
41
42
-- * Accessing individual elements
42
- read , write , swap ,
43
- unsafeRead , unsafeWrite , unsafeSwap ,
43
+ read , write , swap , exchange ,
44
+ unsafeRead , unsafeWrite , unsafeSwap , unsafeExchange ,
44
45
45
46
-- * Modifying vectors
46
47
@@ -234,8 +235,8 @@ unsafePrepend1 v i x
234
235
unsafeWrite v i' x
235
236
return (v, i')
236
237
| otherwise = do
237
- (v', i ) <- enlargeFront v
238
- let i' = i - 1
238
+ (v', j ) <- enlargeFront v
239
+ let i' = j - 1
239
240
INTERNAL_CHECK (checkIndex) " unsafePrepend1" i' (length v')
240
241
$ unsafeWrite v' i' x
241
242
return (v', i')
@@ -406,13 +407,13 @@ vmunstreamMax s n
406
407
= do
407
408
v <- INTERNAL_CHECK (checkLength) " munstreamMax" n
408
409
$ unsafeNew n
409
- let {-# INLINE_INNER copy #-}
410
- copy i (Chunk n f) =
411
- INTERNAL_CHECK (checkSlice) " munstreamMax.copy " i n (length v) $ do
412
- f (basicUnsafeSlice i n v)
413
- return (i+ n )
410
+ let {-# INLINE_INNER copyChunk #-}
411
+ copyChunk i (Chunk m f) =
412
+ INTERNAL_CHECK (checkSlice) " munstreamMax.copyChunk " i m (length v) $ do
413
+ f (basicUnsafeSlice i m v)
414
+ return (i+ m )
414
415
415
- n' <- Stream. foldlM' copy 0 (MBundle. chunks s)
416
+ n' <- Stream. foldlM' copyChunk 0 (MBundle. chunks s)
416
417
return $ INTERNAL_CHECK (checkSlice) " munstreamMax" 0 n' n
417
418
$ unsafeSlice 0 n' v
418
419
@@ -422,18 +423,18 @@ vmunstreamUnknown :: (PrimMonad m, V.Vector v a)
422
423
vmunstreamUnknown s
423
424
= do
424
425
v <- unsafeNew 0
425
- (v', n) <- Stream. foldlM copy (v,0 ) (MBundle. chunks s)
426
+ (v', n) <- Stream. foldlM copyChunk (v,0 ) (MBundle. chunks s)
426
427
return $ INTERNAL_CHECK (checkSlice) " munstreamUnknown" 0 n (length v')
427
428
$ unsafeSlice 0 n v'
428
429
where
429
- {-# INLINE_INNER copy #-}
430
- copy (v,i) (Chunk n f)
430
+ {-# INLINE_INNER copyChunk #-}
431
+ copyChunk (v,i) (Chunk n f)
431
432
= do
432
433
let j = i+ n
433
434
v' <- if basicLength v < j
434
435
then unsafeGrow v (delay_inline max (enlarge_delta v) (j - basicLength v))
435
436
else return v
436
- INTERNAL_CHECK (checkSlice) " munstreamUnknown.copy " i n (length v')
437
+ INTERNAL_CHECK (checkSlice) " munstreamUnknown.copyChunk " i n (length v')
437
438
$ f (basicUnsafeSlice i n v')
438
439
return (v',j)
439
440
@@ -626,6 +627,7 @@ growFront :: (PrimMonad m, MVector v a)
626
627
growFront v by = BOUNDS_CHECK (checkLength) " growFront" by
627
628
$ unsafeGrowFront v by
628
629
630
+ enlarge_delta :: MVector v a => v s a -> Int
629
631
enlarge_delta v = max (length v) 1
630
632
631
633
-- | Grow a vector logarithmically
0 commit comments