added mkMeta and unMeta in the Haskell binding

This commit is contained in:
krasimir
2017-01-26 10:17:02 +00:00
parent be43d5dfdc
commit 6af632dd18
5 changed files with 102 additions and 1 deletions

View File

@@ -31,7 +31,12 @@ module PGF2 (-- * PGF
Fun,functions, functionsByCat, functionType, hasLinearization,
-- ** Expressions
Expr,showExpr,readExpr,
mkAbs,unAbs,mkApp,unApp,mkStr,unStr,mkInt,unInt,mkFloat,unFloat,
mkAbs,unAbs,
mkApp,unApp,
mkStr,unStr,
mkInt,unInt,
mkFloat,unFloat,
mkMeta,unMeta,
-- ** Types
Type(..), Hypo, BindType(..), startCat, showType,

View File

@@ -152,6 +152,25 @@ unFloat (Expr expr master) =
else do n <- peek (plit `plusPtr` (#offset PgfLiteralFlt, val))
return (Just (realToFrac (n :: CDouble)))
-- | Constructs a meta variable as an expression
mkMeta :: Int -> Expr
mkMeta id =
unsafePerformIO $ do
exprPl <- gu_new_pool
c_expr <- pgf_expr_meta (fromIntegral id) exprPl
exprFPl <- newForeignPtr gu_pool_finalizer exprPl
return (Expr c_expr exprFPl)
-- | Decomposes an expression into a meta variable
unMeta :: Expr -> Maybe Int
unMeta (Expr expr master) =
unsafePerformIO $ do
c_meta <- pgf_expr_unmeta expr
if c_meta == nullPtr
then return Nothing
else do id <- (#peek PgfExprMeta, id) c_meta
return (Just (fromIntegral (id :: CInt)))
-- | parses a 'String' as an expression
readExpr :: String -> Maybe Expr
readExpr str =

View File

@@ -266,6 +266,12 @@ foreign import ccall "pgf/pgf.h pgf_expr_abs"
foreign import ccall "pgf/pgf.h pgf_expr_unabs"
pgf_expr_unabs :: PgfExpr -> IO (Ptr a)
foreign import ccall "pgf/pgf.h pgf_expr_meta"
pgf_expr_meta :: CInt -> Ptr GuPool -> IO PgfExpr
foreign import ccall "pgf/pgf.h pgf_expr_unmeta"
pgf_expr_unmeta :: PgfExpr -> IO (Ptr a)
foreign import ccall "pgf/pgf.h pgf_expr_string"
pgf_expr_string :: CString -> Ptr GuPool -> IO PgfExpr