-- | -- Module: ForeignSorting -- Copyright: (c) Sergey Vinokurov 2023 -- License: Apache-2.0 (see LICENSE) -- Maintainer: serg.foo@gmail.com {-# LANGUAGE ForeignFunctionInterface #-} module ForeignSorting ( cppSortInt64 , cppSortCPoint , cppSortCPointUnboxed , CPoint(..) ) where import Data.Int import Data.Word import Foreign import Foreign.C.Types #include foreign import ccall unsafe "cplusplus_sort_int64" cppSortInt64 :: Ptr Int64 -> CInt -> IO () data CPoint = CPoint !CDouble !CDouble !Word64 deriving (Eq, Show) instance Storable CPoint where sizeOf _ = (#size struct Point) alignment _ = (#alignment struct Point) peek p = CPoint <$> (#peek struct Point, x) p <*> (#peek struct Point, y) p <*> (#peek struct Point, id) p poke p (CPoint x y n) = do (#poke struct Point, x) p x (#poke struct Point, y) p y (#poke struct Point, id) p n foreign import ccall unsafe "cplusplus_sort_point" cppSortCPoint :: Ptr CPoint -> CInt -> IO () foreign import ccall unsafe "cplusplus_sort_point_unboxed" cppSortCPointUnboxed :: Ptr CDouble -> Ptr CDouble -> Ptr Word64 -> CInt -> IO ()