{-# LANGUAGE RankNTypes #-}
module HsLua.Core.Userdata
( newhsuserdatauv
, newudmetatable
, fromuserdata
, putuserdata
) where
import HsLua.Core.Types (LuaE, Name (..), StackIndex, liftLua, fromLuaBool)
import Lua.Userdata
( hslua_fromuserdata
, hslua_newhsuserdatauv
, hslua_newudmetatable
, hslua_putuserdata
)
import qualified Data.ByteString as B
newhsuserdatauv :: forall a e. a
-> Int
-> LuaE e ()
newhsuserdatauv :: forall a e. a -> Int -> LuaE e ()
newhsuserdatauv a
x Int
nuvalue = forall a e. (State -> IO a) -> LuaE e a
liftLua forall a b. (a -> b) -> a -> b
$ \State
l ->
forall a. State -> a -> CInt -> IO ()
hslua_newhsuserdatauv State
l a
x (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
nuvalue)
{-# INLINABLE newhsuserdatauv #-}
newudmetatable :: Name -> LuaE e Bool
newudmetatable :: forall e. Name -> LuaE e Bool
newudmetatable (Name ByteString
name) = forall a e. (State -> IO a) -> LuaE e a
liftLua forall a b. (a -> b) -> a -> b
$ \State
l ->
forall a. ByteString -> (CString -> IO a) -> IO a
B.useAsCString ByteString
name (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap LuaBool -> Bool
fromLuaBool forall b c a. (b -> c) -> (a -> b) -> a -> c
. State -> CString -> IO LuaBool
hslua_newudmetatable State
l)
{-# INLINABLE newudmetatable #-}
fromuserdata :: forall a e.
StackIndex
-> Name
-> LuaE e (Maybe a)
fromuserdata :: forall a e. StackIndex -> Name -> LuaE e (Maybe a)
fromuserdata StackIndex
idx (Name ByteString
name) = forall a e. (State -> IO a) -> LuaE e a
liftLua forall a b. (a -> b) -> a -> b
$ \State
l ->
forall a. ByteString -> (CString -> IO a) -> IO a
B.useAsCString ByteString
name (forall a. State -> StackIndex -> CString -> IO (Maybe a)
hslua_fromuserdata State
l StackIndex
idx)
{-# INLINABLE fromuserdata #-}
putuserdata :: forall a e.
StackIndex
-> Name
-> a
-> LuaE e Bool
putuserdata :: forall a e. StackIndex -> Name -> a -> LuaE e Bool
putuserdata StackIndex
idx (Name ByteString
name) a
x = forall a e. (State -> IO a) -> LuaE e a
liftLua forall a b. (a -> b) -> a -> b
$ \State
l ->
forall a. ByteString -> (CString -> IO a) -> IO a
B.useAsCString ByteString
name forall a b. (a -> b) -> a -> b
$ \CString
namePtr ->
forall a. State -> StackIndex -> CString -> a -> IO Bool
hslua_putuserdata State
l StackIndex
idx CString
namePtr a
x
{-# INLINABLE putuserdata #-}