module Bindings.APR.AnyLock where
import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word
import Bindings.APR.ErrNo
import Bindings.APR.Proc.Mutex
import Bindings.APR.Thread.Mutex
import Bindings.APR.Thread.RWLock
type C'tm_lock = CInt
c'apr_anylock_none = 0
c'apr_anylock_none :: (Num a) => a
c'apr_anylock_procmutex = 1
c'apr_anylock_procmutex :: (Num a) => a
c'apr_anylock_readlock = 3
c'apr_anylock_readlock :: (Num a) => a
c'apr_anylock_writelock = 4
c'apr_anylock_writelock :: (Num a) => a
data C'apr_anylock_u_t = C'apr_anylock_u_t{
c'apr_anylock_u_t'pm :: Ptr C'apr_proc_mutex_t
,
c'apr_anylock_u_t'tm :: Ptr C'apr_thread_mutex_t
,
c'apr_anylock_u_t'rw :: Ptr C'apr_thread_rwlock_t
} deriving (Eq,Show)
u'apr_anylock_u_t'pm v vf = alloca $ \p -> do
poke p v
pokeByteOff p 0 vf
vu <- peek p
return $ v
{c'apr_anylock_u_t'pm = c'apr_anylock_u_t'pm vu}
{c'apr_anylock_u_t'tm = c'apr_anylock_u_t'tm vu}
{c'apr_anylock_u_t'rw = c'apr_anylock_u_t'rw vu}
u'apr_anylock_u_t'pm :: C'apr_anylock_u_t -> Ptr C'apr_proc_mutex_t -> IO C'apr_anylock_u_t
u'apr_anylock_u_t'tm v vf = alloca $ \p -> do
poke p v
pokeByteOff p 0 vf
vu <- peek p
return $ v
{c'apr_anylock_u_t'pm = c'apr_anylock_u_t'pm vu}
{c'apr_anylock_u_t'tm = c'apr_anylock_u_t'tm vu}
{c'apr_anylock_u_t'rw = c'apr_anylock_u_t'rw vu}
u'apr_anylock_u_t'tm :: C'apr_anylock_u_t -> Ptr C'apr_thread_mutex_t -> IO C'apr_anylock_u_t
u'apr_anylock_u_t'rw v vf = alloca $ \p -> do
poke p v
pokeByteOff p 0 vf
vu <- peek p
return $ v
{c'apr_anylock_u_t'pm = c'apr_anylock_u_t'pm vu}
{c'apr_anylock_u_t'tm = c'apr_anylock_u_t'tm vu}
{c'apr_anylock_u_t'rw = c'apr_anylock_u_t'rw vu}
u'apr_anylock_u_t'rw :: C'apr_anylock_u_t -> Ptr C'apr_thread_rwlock_t -> IO C'apr_anylock_u_t
instance Storable C'apr_anylock_u_t where
sizeOf _ = 4
alignment = sizeOf
peek p = do
v0 <- peekByteOff p 0
v1 <- peekByteOff p 0
v2 <- peekByteOff p 0
return $ C'apr_anylock_u_t v0 v1 v2
poke p (C'apr_anylock_u_t v0 v1 v2) = do
pokeByteOff p 0 v0
pokeByteOff p 0 v1
pokeByteOff p 0 v2
return ()
data C'apr_anylock_t = C'apr_anylock_t{
c'apr_anylock_t'type :: C'tm_lock
,
c'apr_anylock_t'lock :: C'apr_anylock_u_t
} deriving (Eq,Show)
instance Storable C'apr_anylock_t where
sizeOf _ = 8
alignment = sizeOf
peek p = do
v0 <- peekByteOff p 0
v1 <- peekByteOff p 4
return $ C'apr_anylock_t v0 v1
poke p (C'apr_anylock_t v0 v1) = do
pokeByteOff p 0 v0
pokeByteOff p 4 v1
return ()
foreign import ccall "inline_APR_ANYLOCK_LOCK" c'APR_ANYLOCK_LOCK
:: Ptr C'apr_anylock_t -> IO C'apr_status_t
foreign import ccall "inline_APR_ANYLOCK_TRYLOCK" c'APR_ANYLOCK_TRYLOCK
:: Ptr C'apr_anylock_t -> IO C'apr_status_t
foreign import ccall "inline_APR_ANYLOCK_UNLOCK" c'APR_ANYLOCK_UNLOCK
:: Ptr C'apr_anylock_t -> IO C'apr_status_t