module Data.Repa.Array.Material.Auto.InstDate32
(rangeDate32)
where
import Data.Repa.Array.Material.Auto.InstChar ()
import qualified Data.Repa.Array.Material.Auto.Base as A
import qualified Data.Repa.Array.Material.Foreign as A
import qualified Data.Repa.Array.Internals.Target as A
import qualified Data.Repa.Array.Generic.Index as A
import qualified Data.Repa.Array.Generic as A
import qualified Data.Repa.Array.Meta.Window as A
import Data.Repa.Scalar.Date32
import Control.Monad
import Prelude as P
#include "repa-array.h"
instance A.Bulk A.A Date32 where
data Array A.A Date32 = AArray_Date32 !(A.Array A.F Date32)
layout (AArray_Date32 arr) = A.Auto (A.length arr)
index (AArray_Date32 arr) ix = A.index arr ix
deriving instance Show (A.Array A.A Date32)
instance A.Windowable A.A Date32 where
window st len (AArray_Date32 arr)
= AArray_Date32 (A.window st len arr)
instance A.Target A.A Date32 where
data Buffer A.A Date32
= ABuffer_Date32 !(A.Buffer A.F Date32)
unsafeNewBuffer (A.Auto len)
= liftM ABuffer_Date32 $ A.unsafeNewBuffer (A.Foreign len)
unsafeReadBuffer (ABuffer_Date32 arr) ix
= A.unsafeReadBuffer arr ix
unsafeWriteBuffer (ABuffer_Date32 arr) ix x
= A.unsafeWriteBuffer arr ix x
unsafeGrowBuffer (ABuffer_Date32 arr) bump
= liftM ABuffer_Date32 $ A.unsafeGrowBuffer arr bump
unsafeFreezeBuffer (ABuffer_Date32 arr)
= liftM AArray_Date32 $ A.unsafeFreezeBuffer arr
unsafeThawBuffer (AArray_Date32 arr)
= liftM ABuffer_Date32 $ A.unsafeThawBuffer arr
unsafeSliceBuffer st len (ABuffer_Date32 buf)
= liftM ABuffer_Date32 $ A.unsafeSliceBuffer st len buf
touchBuffer (ABuffer_Date32 buf)
= A.touchBuffer buf
bufferLayout (ABuffer_Date32 buf)
= A.Auto $ A.extent $ A.bufferLayout buf
rangeDate32 :: Date32 -> Date32 -> A.Array A.A Date32
rangeDate32 from to
| to < from = A.fromList A.A []
| otherwise = A.fromList A.A $ go [] from
where
go !acc !d
| d > to = P.reverse acc
| otherwise = go (d : acc) (next d)