forked from GitHub/gf-core
added API for accessing flags
This commit is contained in:
@@ -17,7 +17,7 @@ module PGF2 (-- * PGF
|
||||
PGF,readPGF,bootNGF,readNGF,
|
||||
|
||||
-- * Abstract syntax
|
||||
AbsName,abstractName,
|
||||
AbsName,abstractName,globalFlag,abstractFlag,
|
||||
-- ** Categories
|
||||
Cat,categories,categoryContext,categoryProb,
|
||||
-- ** Functions
|
||||
@@ -263,6 +263,34 @@ functionsByCat p cat =
|
||||
name <- peekText key
|
||||
writeIORef ref $ (name : names)
|
||||
|
||||
globalFlag :: PGF -> String -> Maybe Literal
|
||||
globalFlag p name =
|
||||
unsafePerformIO $
|
||||
withText name $ \c_name ->
|
||||
withForeignPtr (a_db p) $ \c_db ->
|
||||
withForeignPtr (revision p) $ \c_revision ->
|
||||
withForeignPtr unmarshaller $ \u -> do
|
||||
c_lit <- withPgfExn (pgf_get_global_flag c_db c_revision c_name u)
|
||||
if c_lit == castPtrToStablePtr nullPtr
|
||||
then return Nothing
|
||||
else do lit <- deRefStablePtr c_lit
|
||||
freeStablePtr c_lit
|
||||
return (Just lit)
|
||||
|
||||
abstractFlag :: PGF -> String -> Maybe Literal
|
||||
abstractFlag p name =
|
||||
unsafePerformIO $
|
||||
withText name $ \c_name ->
|
||||
withForeignPtr (a_db p) $ \c_db ->
|
||||
withForeignPtr (revision p) $ \c_revision ->
|
||||
withForeignPtr unmarshaller $ \u -> do
|
||||
c_lit <- withPgfExn (pgf_get_abstract_flag c_db c_revision c_name u)
|
||||
if c_lit == castPtrToStablePtr nullPtr
|
||||
then return Nothing
|
||||
else do lit <- deRefStablePtr c_lit
|
||||
freeStablePtr c_lit
|
||||
return (Just lit)
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
-- Expressions & types
|
||||
|
||||
|
||||
@@ -122,6 +122,13 @@ foreign import ccall pgf_create_category :: Ptr PgfDB -> Ptr PgfRevision -> Ptr
|
||||
|
||||
foreign import ccall pgf_drop_category :: Ptr PgfDB -> Ptr PgfRevision -> Ptr PgfText -> Ptr PgfExn -> IO ()
|
||||
|
||||
foreign import ccall pgf_get_global_flag :: Ptr PgfDB -> Ptr PgfRevision -> Ptr PgfText -> Ptr PgfUnmarshaller -> Ptr PgfExn -> IO (StablePtr Literal)
|
||||
|
||||
foreign import ccall pgf_set_global_flag :: Ptr PgfDB -> Ptr PgfRevision -> Ptr PgfText -> StablePtr Literal -> Ptr PgfMarshaller -> Ptr PgfExn -> IO ()
|
||||
|
||||
foreign import ccall pgf_get_abstract_flag :: Ptr PgfDB -> Ptr PgfRevision -> Ptr PgfText -> Ptr PgfUnmarshaller -> Ptr PgfExn -> IO (StablePtr Literal)
|
||||
|
||||
foreign import ccall pgf_set_abstract_flag :: Ptr PgfDB -> Ptr PgfRevision -> Ptr PgfText -> StablePtr Literal -> Ptr PgfMarshaller -> Ptr PgfExn -> IO ()
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
-- Texts
|
||||
|
||||
@@ -7,6 +7,8 @@ module PGF2.Transactions
|
||||
, dropFunction
|
||||
, createCategory
|
||||
, dropCategory
|
||||
, setGlobalFlag
|
||||
, setAbstractFlag
|
||||
) where
|
||||
|
||||
import PGF2.FFI
|
||||
@@ -130,3 +132,17 @@ dropCategory :: Cat -> Transaction ()
|
||||
dropCategory name = Transaction $ \c_db c_revision c_exn ->
|
||||
withText name $ \c_name -> do
|
||||
pgf_drop_category c_db c_revision c_name c_exn
|
||||
|
||||
setGlobalFlag :: String -> Literal -> Transaction ()
|
||||
setGlobalFlag name value = Transaction $ \c_db c_revision c_exn ->
|
||||
withText name $ \c_name ->
|
||||
bracket (newStablePtr value) freeStablePtr $ \c_value ->
|
||||
withForeignPtr marshaller $ \m ->
|
||||
pgf_set_global_flag c_db c_revision c_name c_value m c_exn
|
||||
|
||||
setAbstractFlag :: String -> Literal -> Transaction ()
|
||||
setAbstractFlag name value = Transaction $ \c_db c_revision c_exn ->
|
||||
withText name $ \c_name ->
|
||||
bracket (newStablePtr value) freeStablePtr $ \c_value ->
|
||||
withForeignPtr marshaller $ \m ->
|
||||
pgf_set_abstract_flag c_db c_revision c_name c_value m c_exn
|
||||
|
||||
Reference in New Issue
Block a user