]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Values.hs
Import cleanup in Values.
[spline3.git] / src / Values.hs
index 10d7fb90c4752e873bba501e49c5382c034ebdee..e21bacf1e906c553e3bda167e9fea3947d4ba8ff 100644 (file)
@@ -1,24 +1,57 @@
-module Values
+{-# LANGUAGE FlexibleInstances #-}
+
+module Values (
+  Values,
+  Values2D,
+  Values3D,
+  dims,
+  empty3d,
+  idx,
+  zoom_shape )
 where
 
 import Data.Array.Repa (
-  Array,
-  DIM1,
+  Array, U,
+  Z( Z ),
+  (:.)( (:.) ),
+  DIM2,
   DIM3,
-  reshape,
-  )
+  extent,
+  fromListUnboxed,
+  unsafeIndex )
+
+import ScaleFactor ( ScaleFactor )
+
+
+type Values sh = Array U sh Double
+type Values2D  = Values DIM2
+type Values3D  = Values DIM3
+
+
+empty3d :: Values3D
+empty3d = Data.Array.Repa.fromListUnboxed (Z :. 0 :. 0 :. 0) []
+
 
-import Data.Array.Repa.IO.Vector (readVectorFromTextFile)
-import System.FilePath ()
+dims :: Values3D -> (Int, Int, Int)
+dims v3d =
+    let (Z :. x :. y :. z) = extent v3d
+    in
+      (x,y,z)
 
 
-type Values1D = Array DIM1 Double
-type Values3D = Array DIM3 Double
+idx :: Values3D -> Int -> Int -> Int -> Double
+idx v3d i j k =
+    unsafeIndex v3d shape
+    where
+      shape :: DIM3
+      shape = (Z :. i :. j :. k)
 
-read_values_1d :: FilePath -> IO Values1D
-read_values_1d path = readVectorFromTextFile path
 
-read_values_3d :: DIM3 -> FilePath -> IO Values3D
-read_values_3d sh path = do
-  one_d <- read_values_1d path
-  return $ reshape sh one_d
+zoom_shape :: ScaleFactor -> DIM3 -> DIM3
+zoom_shape (sfx, sfy, sfz) sh =
+    let (Z :. x :. y :. z) = sh
+        x' = x * sfx
+        y' = y * sfy
+        z' = z * sfz
+    in
+      (Z :. x' :. y' :. z')