{-# LINE 1 "Bindings/APR/AnyLock.hsc" #-}

{-# LINE 2 "Bindings/APR/AnyLock.hsc" #-}

{-# LINE 3 "Bindings/APR/AnyLock.hsc" #-}

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

{-# LINE 6 "Bindings/APR/AnyLock.hsc" #-}
import Bindings.APR.ErrNo
import Bindings.APR.Proc.Mutex
import Bindings.APR.Thread.Mutex
import Bindings.APR.Thread.RWLock

type C'tm_lock = CInt

{-# LINE 12 "Bindings/APR/AnyLock.hsc" #-}
c'apr_anylock_none = 0
c'apr_anylock_none :: (Num a) => a

{-# LINE 13 "Bindings/APR/AnyLock.hsc" #-}
c'apr_anylock_procmutex = 1
c'apr_anylock_procmutex :: (Num a) => a

{-# LINE 14 "Bindings/APR/AnyLock.hsc" #-}
c'apr_anylock_readlock = 3
c'apr_anylock_readlock :: (Num a) => a

{-# LINE 15 "Bindings/APR/AnyLock.hsc" #-}
c'apr_anylock_writelock = 4
c'apr_anylock_writelock :: (Num a) => a

{-# LINE 16 "Bindings/APR/AnyLock.hsc" #-}

data C'apr_anylock_u_t = C'apr_anylock_u_t{
{-# LINE 18 "Bindings/APR/AnyLock.hsc" #-}

  c'apr_anylock_u_t'pm :: Ptr C'apr_proc_mutex_t
{-# LINE 19 "Bindings/APR/AnyLock.hsc" #-}

{-# LINE 20 "Bindings/APR/AnyLock.hsc" #-}
,
  c'apr_anylock_u_t'tm :: Ptr C'apr_thread_mutex_t
{-# LINE 21 "Bindings/APR/AnyLock.hsc" #-}
,
  c'apr_anylock_u_t'rw :: Ptr C'apr_thread_rwlock_t
{-# LINE 22 "Bindings/APR/AnyLock.hsc" #-}

{-# LINE 23 "Bindings/APR/AnyLock.hsc" #-}

 } 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 ()

{-# LINE 24 "Bindings/APR/AnyLock.hsc" #-}

data C'apr_anylock_t = C'apr_anylock_t{
{-# LINE 26 "Bindings/APR/AnyLock.hsc" #-}

  c'apr_anylock_t'type :: C'tm_lock
{-# LINE 27 "Bindings/APR/AnyLock.hsc" #-}
,
  c'apr_anylock_t'lock :: C'apr_anylock_u_t
{-# LINE 28 "Bindings/APR/AnyLock.hsc" #-}

 } 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 ()

{-# LINE 29 "Bindings/APR/AnyLock.hsc" #-}

foreign import ccall "inline_APR_ANYLOCK_LOCK" c'APR_ANYLOCK_LOCK
  :: Ptr C'apr_anylock_t -> IO C'apr_status_t

{-# LINE 31 "Bindings/APR/AnyLock.hsc" #-}
foreign import ccall "inline_APR_ANYLOCK_TRYLOCK" c'APR_ANYLOCK_TRYLOCK
  :: Ptr C'apr_anylock_t -> IO C'apr_status_t

{-# LINE 32 "Bindings/APR/AnyLock.hsc" #-}
foreign import ccall "inline_APR_ANYLOCK_UNLOCK" c'APR_ANYLOCK_UNLOCK
  :: Ptr C'apr_anylock_t -> IO C'apr_status_t

{-# LINE 33 "Bindings/APR/AnyLock.hsc" #-}