I'm switching a program from using MVector Word32
to STUArray Word Word32
. In my vector code, I used unsafeMove
to move vector slices around; thinking it was probably wrapping memmove
for efficiency.
case dst ⊕ 3 of
src | n < src + w -> do
let w0 = n - src
let w' = w - w0
unsafeMove (slice dst w0 v) (slice src w0 v)
if w' <= 3
then do
unsafeMove (slice (n - 3) w' v) (slice 0 w' v)
else do
let w'' = w' - 3
unsafeMove (slice (n - 3) 3 v) (slice 0 3 v)
unsafeMove (slice 0 w'' v) (slice 3 w'' v)
src | n < dst + w -> do
let w1 = n - dst
let w'' = w - w1
unsafeMove (slice dst w1 v) (slice src w1 v)
unsafeMove (slice 0 w'' v) (slice 3 w'' v)
src -> do
unsafeMove (slice dst w v) (slice src w v)
The MArray
typeclass doesn't seem to expose a way to move multiple elements in a single call, only one-by-one. Is there a wrapper for moving multiple STUArray
elements (or maybe ByteArray#
) at once?