summaryrefslogtreecommitdiff
path: root/packages/special/lib/Numeric/GSL/Special/auto.hs
diff options
context:
space:
mode:
Diffstat (limited to 'packages/special/lib/Numeric/GSL/Special/auto.hs')
-rw-r--r--packages/special/lib/Numeric/GSL/Special/auto.hs16
1 files changed, 13 insertions, 3 deletions
diff --git a/packages/special/lib/Numeric/GSL/Special/auto.hs b/packages/special/lib/Numeric/GSL/Special/auto.hs
index b46e6c6..b6276b2 100644
--- a/packages/special/lib/Numeric/GSL/Special/auto.hs
+++ b/packages/special/lib/Numeric/GSL/Special/auto.hs
@@ -31,7 +31,8 @@ fixlong (x:xs) = x : fixlong xs
31 31
32 32
33safe (Header _ _ args) = all ok args 33safe (Header _ _ args) = all ok args
34 || all ok (init args) && kn (last args) 34 || all ok (init args) && kn (last args)
35 || length args >= 2 && all ok (init (init args)) && kn (last args) && kn (last (init args))
35 where ok ((Normal s),_) | s `elem` ["double","float","int","gsl_mode_t"] = True 36 where ok ((Normal s),_) | s `elem` ["double","float","int","gsl_mode_t"] = True
36 ok _ = False 37 ok _ = False
37 kn ((Pointer "gsl_sf_result"),_) = True 38 kn ((Pointer "gsl_sf_result"),_) = True
@@ -206,7 +207,9 @@ showFull hc h@(Header t n args) = -- "\n-- | wrapper for "++showC h
206fixmd1 = rep ("Gsl_mode_t","Precision") 207fixmd1 = rep ("Gsl_mode_t","Precision")
207fixmd2 = rep ("mode"," (precCode mode)") 208fixmd2 = rep ("mode"," (precCode mode)")
208 209
209boiler h@(Header t n args) | fst (last args) == Pointer "gsl_sf_result" = boilerResult h 210boiler h@(Header t n args) | fst (last args) == Pointer "gsl_sf_result"
211 && fst (last (init args)) == Pointer "gsl_sf_result" = boiler2Results h
212 | fst (last args) == Pointer "gsl_sf_result" = boilerResult h
210 | fst (last args) == Pointer "gsl_sf_result_e10" = boilerResultE10 h 213 | fst (last args) == Pointer "gsl_sf_result_e10" = boilerResultE10 h
211 | any isMode args = boilerMode h 214 | any isMode args = boilerMode h
212 | otherwise = boilerBasic h 215 | otherwise = boilerBasic h
@@ -223,6 +226,11 @@ boilerResult h@(Header t n args) =
223 hName n ++ " "++ initArgs args ++ 226 hName n ++ " "++ initArgs args ++
224 " = createSFR \""++ hName n ++"\" $ " ++ n ++ " "++ (fixmd2 $ initArgs args) 227 " = createSFR \""++ hName n ++"\" $ " ++ n ++ " "++ (fixmd2 $ initArgs args)
225 228
229boiler2Results h@(Header t n args) =
230 hName n++" :: "++ (fixmd1 $ concat $ intersperse" -> "$ map showHa (init (init args))) ++" -> " ++ "((Double,Double),(Double,Double))\n" ++
231 hName n ++ " "++ init2Args args ++
232 " = create2SFR \""++ hName n ++"\" $ " ++ n ++ " "++ (fixmd2 $ init2Args args)
233
226boilerResultE10 h@(Header t n args) = 234boilerResultE10 h@(Header t n args) =
227 hName n++" :: "++ (fixmd1 $ concat $ intersperse" -> "$ map showHa (init args)) ++" -> " ++ "(Double,Int,Double)\n" ++ 235 hName n++" :: "++ (fixmd1 $ concat $ intersperse" -> "$ map showHa (init args)) ++" -> " ++ "(Double,Int,Double)\n" ++
228 hName n ++ " "++ initArgs args ++ 236 hName n ++ " "++ initArgs args ++
@@ -241,4 +249,6 @@ cVar (v:vs) | isUpper v = toLower v : v : vs
241 | otherwise = v:vs 249 | otherwise = v:vs
242 250
243allArgs args = unwords (map (cVar.snd) args) 251allArgs args = unwords (map (cVar.snd) args)
244initArgs args = unwords (map (cVar.snd) (init args)) \ No newline at end of file 252initArgs args = unwords (map (cVar.snd) (init args))
253init2Args args = unwords (map (cVar.snd) (init $ init args))
254