{-# LANGUAGE CApiFFI #-}
module OpenCascade.TopTools.ShapeMapHasher 
( hash
, isEqual
) where

import qualified OpenCascade.TopoDS.Types as TopoDS
import Foreign.Ptr (Ptr)
import Foreign.C (CInt (..), CBool (..))
import OpenCascade.Internal.Bool (cBoolToBool)

foreign import capi unsafe "hs_TopTools_ShapeMapHasher.h hs_TopTools_ShapeMapHasher_hash" rawHash :: Ptr TopoDS.Shape -> IO (CInt)

hash :: Ptr TopoDS.Shape -> IO Int
hash :: Ptr Shape -> IO Int
hash Ptr Shape
s = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr Shape -> IO CInt
rawHash Ptr Shape
s

foreign import capi unsafe "hs_TopTools_ShapeMapHasher.h hs_TopTools_ShapeMapHasher_isEqual" rawIsEqual :: Ptr TopoDS.Shape -> Ptr TopoDS.Shape -> IO (CBool)

isEqual :: Ptr TopoDS.Shape -> Ptr TopoDS.Shape -> IO Bool
isEqual :: Ptr Shape -> Ptr Shape -> IO Bool
isEqual Ptr Shape
a Ptr Shape
b = CBool -> Bool
cBoolToBool (CBool -> Bool) -> IO CBool -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr Shape -> Ptr Shape -> IO CBool
rawIsEqual Ptr Shape
a Ptr Shape
b