packages feed

dph-examples-0.5.1.1: imaginary/Reverse/dph/ReverseVector.hs

module ReverseVector
        (treeReverse)
where
import qualified Data.Vector.Unboxed as V
import Data.Vector.Unboxed              (Vector)

-- | Reverse the elements in an array using a tree.
treeReverse :: Vector Int -> Vector Int
{-# NOINLINE treeReverse #-}
treeReverse xx
        | V.length xx == 1
        = xx
        
        | otherwise
        = let   len     = V.length xx
                half    = len `div` 2
                s1      = V.slice 0    half  xx
                s2      = V.slice half half  xx         
          in    treeReverse s2 V.++ treeReverse s1