packages feed

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 

--------------------------------------------------------------------------------