module Language.Atom.Example
( compileExample
, example
) where
import Language.Atom
compileExample :: IO ()
compileExample = do
compile "example" defaults { cPreCode = preCode, cPostCode = postCode } example
return ()
preCode :: String
preCode = unlines
[ "#include <stdlib.h>"
, "#include <stdio.h>"
, "unsigned long int a;"
, "unsigned long int b;"
, "unsigned long int x;"
, "unsigned char running = 1;"
]
postCode :: String
postCode = unlines
[ "int main(int argc, char* argv[]) {"
, " a = atoi(argv[1]);"
, " b = atoi(argv[2]);"
, " printf(\"Computing the GCD of %lu and %lu...\\n\", a, b);"
, " while(running) {"
, " example();"
, " printf(\"iteration: a = %lu b = %lu\\n\", a, b);"
, " }"
, " printf(\"GCD result: %lu\\n\", a);"
, " return 0;"
, "}"
]
example :: Atom ()
example = do
a <- word32' "a"
b <- word32' "b"
running <- bool' "running"
atom "a_minus_b" $ do
cond $ value a >. value b
a <== value a value b
atom "b_minus_a" $ do
cond $ value b >. value a
b <== value b value a
atom "stop" $ do
cond $ value a ==. value b
running <== false