
import qualified Types as QH
import QuickHullVect (quickhull)

import qualified Data.Array.Parallel.Unlifted       as U
import qualified Data.Array.Parallel.Prelude        as P

import qualified Data.Array.Parallel.PArray         as P
import Data.Array.Parallel.PArray                   (PArray)

import System.Environment
import Data.List

import SVG
import TestData


-----
runQuickhull :: PArray QH.Point -> [(Double, Double)]
runQuickhull pts
 = let result = quickhull pts
       resxs  = P.toUArray (QH.xsOf result)
       resys  = P.toUArray (QH.ysOf result)
   in  U.index "runQuickhull" resxs 0 `seq` (zip (U.toList resxs) (U.toList resys))


-- Main Program ---------------------------------------------------------------
main
 = do   args    <- getArgs
        let n = case args of
                 [s]    -> read s
                 _      -> 1000

        paInput <- toPArrayPoints
                $  genPointsCombo n

        let psHull  = runQuickhull paInput
            psInput = P.toList paInput

        putStr
         $ makeSVG
                (roundPoints psInput)
                (roundPoints psHull)
