Unbox instances for Float and Double
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Sun, 6 Jul 2008 15:07:25 +0000 (15:07 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Sun, 6 Jul 2008 15:07:25 +0000 (15:07 +0000)
Data/Vector/Unboxed/Unbox.hs

index 79a25cd..854b93a 100644 (file)
@@ -7,14 +7,19 @@ module Data.Vector.Unboxed.Unbox (
 import GHC.Base (
     Int(..)
   )
+import GHC.Float (
+    Float(..), Double(..)
+  )
 
 import GHC.Prim (
     ByteArray#, MutableByteArray#, State#,
 
-    Int#, indexIntArray#, readIntArray#, writeIntArray#
+    Int#, indexIntArray#,    readIntArray#,    writeIntArray#,
+          indexFloatArray#,  readFloatArray#,  writeFloatArray#,
+          indexDoubleArray#, readDoubleArray#, writeDoubleArray#
   )
 import Data.Array.Base (
-    wORD_SCALE
+    wORD_SCALE, fLOAT_SCALE, dOUBLE_SCALE
   )
 
 class Unbox a where
@@ -30,3 +35,17 @@ instance Unbox Int where
                                 (# s1#, n# #) -> (# s1#, I# n# #)
   write# arr# i# (I# n#) s# = writeIntArray# arr# i# n# s#
 
+instance Unbox Float where
+  size#  _                  = fLOAT_SCALE
+  at#    arr# i#            = F# (indexFloatArray# arr# i#)
+  read#  arr# i# s#         = case readFloatArray# arr# i# s# of
+                                (# s1#, x# #) -> (# s1#, F# x# #)
+  write# arr# i# (F# x#) s# = writeFloatArray# arr# i# x# s#
+
+instance Unbox Double where
+  size#  _                  = dOUBLE_SCALE
+  at#    arr# i#            = D# (indexDoubleArray# arr# i#)
+  read#  arr# i# s#         = case readDoubleArray# arr# i# s# of
+                                (# s1#, x# #) -> (# s1#, D# x# #)
+  write# arr# i# (D# x#) s# = writeDoubleArray# arr# i# x# s#
+