-- Produced by boxnd-gen; edit the generator, not this file.

module Box2D.Contact
  ( isValid
  , getData
  )

  where

import Foreign
import Foreign.C.Types (CBool(..))
import Box2D.Id (ContactId)
import Box2D.Tags (ContactData)

foreign import ccall unsafe "hsg_b2Contact_IsValid"
  c_b2Contact_IsValid :: Ptr ContactId -> IO CBool

foreign import ccall unsafe "hsg_b2Contact_GetData"
  c_b2Contact_GetData :: Ptr ContactId -> Ptr ContactData -> IO ()

{- | Contact identifier validation. Provides validation for up to 2^32 allocations.

Binds @b2Contact_IsValid@.
-}
isValid
  :: ContactId
  -> IO Bool
isValid :: ContactId -> IO Bool
isValid ContactId
a0 =
  ContactId -> (Ptr ContactId -> IO Bool) -> IO Bool
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with ContactId
a0 ((Ptr ContactId -> IO Bool) -> IO Bool)
-> (Ptr ContactId -> IO Bool) -> IO Bool
forall a b. (a -> b) -> a -> b
$ \Ptr ContactId
p0 ->
  CBool -> Bool
forall a. (Eq a, Num a) => a -> Bool
toBool (CBool -> Bool) -> IO CBool -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Ptr ContactId -> IO CBool
c_b2Contact_IsValid Ptr ContactId
p0)

{- | Get the data for a contact. The manifold may have no points if the contact is not touching.

Binds @b2Contact_GetData@.
-}
getData
  :: ContactId
  -> Ptr ContactData
  -- ^ Result buffer.
  -> IO ()
getData :: ContactId -> Ptr ContactData -> IO ()
getData ContactId
a0 Ptr ContactData
out =
  ContactId -> (Ptr ContactId -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with ContactId
a0 ((Ptr ContactId -> IO ()) -> IO ())
-> (Ptr ContactId -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ContactId
p0 ->
  Ptr ContactId -> Ptr ContactData -> IO ()
c_b2Contact_GetData Ptr ContactId
p0 Ptr ContactData
out