]> gitweb.michael.orlitzky.com - spline3.git/commitdiff
Catch out-of-bounds calls to value_at.
authorMichael Orlitzky <michael@orlitzky.com>
Sat, 7 May 2011 17:16:01 +0000 (13:16 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Sat, 7 May 2011 17:16:01 +0000 (13:16 -0400)
src/FunctionValues.hs

index 9fd3c7862516cc404220b66e172201685c18ea35..e8bdcb8e2d1f294216d38fa24d3b56fcc4cba786 100644 (file)
@@ -74,8 +74,14 @@ eval f (Product x y) = (eval f x) * (eval f y)
 eval f (Quotient x y) = (eval f x) / (eval f y)
 
 value_at :: [[[Double]]] -> Int -> Int -> Int -> Double
-value_at values i j k =
-    ((values !! k) !! j) !! i
+value_at values i j k
+         | i < 0 = 0
+         | j < 0 = 0
+         | k < 0 = 0
+         | length values <= k = 0
+         | length (values !! k) <= j = 0
+         | length ((values !! k) !! j) <= i = 0
+         | otherwise = ((values !! k) !! j) !! i
 
 make_values :: [[[Double]]] -> Int -> Int -> Int -> FunctionValues
 make_values values i j k =