copilot-2.0.3: Examples/Array.hs
--------------------------------------------------------------------------------
-- Copyright © 2011 National Institute of Aerospace / Galois, Inc.
--------------------------------------------------------------------------------
-- | Example in sampling external arrays.
{-# LANGUAGE RebindableSyntax #-}
module Array ( array ) where
import Language.Copilot hiding (cycle)
import Data.List (cycle)
--import qualified Copilot.Compile.C99 as C
import qualified Copilot.Compile.SBV as S
--------------------------------------------------------------------------------
extArr :: Stream Word32
extArr = externArray "arr1" arrIdx 5 (Just $ repeat [7,8,9,10,11])
arrIdx :: Stream Word32
arrIdx = [0] ++ (arrIdx + 1) `mod` 4
arrIdx2 :: Stream Word8
arrIdx2 = extern "idx2" (Just [0,0..])
extArr2 :: Stream Word16 -> Stream Word32
extArr2 idx = externArray "arr2" idx 4 (Just $ repeat [1,2,3,4])
extArr3 :: Stream Word32
extArr3 = extArr2 (cast $ externW8 "idx3" (Just $ cycle [0,1,2]))
spec :: Spec
spec = trigger "trigger" true [ arg extArr
, arg (extArr2 (cast arrIdx2))
, arg extArr3
-- Throws an exception since the index is too big for the array!
-- , arg (extArr2 5)
]
array :: IO ()
array = do
-- reify spec >>= C.compile C.defaultParams
interpret 10 spec
reify spec >>= S.compile S.defaultParams
--------------------------------------------------------------------------------