{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Repa.Array.Material.Auto.InstUnit where
import Data.Repa.Array.Material.Auto.Base       as A
import Data.Repa.Array.Material.Boxed           as A
import Data.Repa.Array.Meta.Window              as A
import Data.Repa.Array.Internals.Bulk           as A
import Data.Repa.Array.Internals.Target         as A
#include "repa-array.h"


instance Bulk A () where
 data Array   A ()              = AArray_Unit !Int
 layout (AArray_Unit len)       = Auto len
 index  (AArray_Unit _len) _ix  = ()
 {-# INLINE_ARRAY layout #-}
 {-# INLINE_ARRAY index  #-}

deriving instance Show (Array A ())


instance Windowable A () where
 window _st len' (AArray_Unit _len)
  = AArray_Unit len'


instance Target A () where
 data Buffer A ()           
  = ABuffer_Unit !Int

 unsafeNewBuffer (Auto len)     
  = return $ ABuffer_Unit len
 {-# INLINE_ARRAY unsafeNewBuffer #-}

 unsafeReadBuffer   (ABuffer_Unit _len) _ix
  = return ()
 {-# INLINE_ARRAY unsafeReadBuffer #-}

 unsafeWriteBuffer  (ABuffer_Unit _len) _ix _x
  = return ()
 {-# INLINE_ARRAY unsafeWriteBuffer #-}

 unsafeGrowBuffer   (ABuffer_Unit len) bump
  = return $ ABuffer_Unit (len + bump)
 {-# INLINE_ARRAY unsafeGrowBuffer #-}

 unsafeFreezeBuffer (ABuffer_Unit len)
  = return $ AArray_Unit len 
 {-# INLINE_ARRAY unsafeFreezeBuffer #-}

 unsafeThawBuffer   (AArray_Unit len)
  = return $ ABuffer_Unit len
 {-# INLINE_ARRAY unsafeThawBuffer #-}

 unsafeSliceBuffer _st len (ABuffer_Unit _len)
  = return $ ABuffer_Unit len
 {-# INLINE_ARRAY unsafeSliceBuffer #-}

 touchBuffer (ABuffer_Unit _len)
  = return ()
 {-# INLINE_ARRAY touchBuffer #-}

 bufferLayout (ABuffer_Unit len)
  = Auto len
 {-# INLINE_ARRAY bufferLayout #-}