{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE RoleAnnotations #-}
module Foreign.SharedPtr.C
( SharedPtr (), Allocator, AllocatorT
, c'shared_createAllocator, c'shared_lookupAllocator
, c'shared_destroyAllocator, c'shared_getStoreName
, c'shared_ptrToShPtr, c'shared_shPtrToPtr
, c'shared_malloc, c'shared_realloc, c'shared_free
, p'shared_createAllocator, p'shared_lookupAllocator
, p'shared_destroyAllocator, p'shared_getStoreName
, p'shared_ptrToShPtr, p'shared_shPtrToPtr
, p'shared_malloc, p'shared_realloc, p'shared_free
, p'vk_shared_malloc, p'vk_shared_realloc, p'vk_shared_free
) where
import Data.Data (Data)
import Data.Void (Void)
import Foreign.C.String
import Foreign.C.Types
import Foreign.Ptr
import Foreign.Storable
import GHC.Generics (Generic)
type role SharedPtr phantom
newtype SharedPtr a = SharedPtr ( Ptr a )
deriving (Eq, Ord, Show, Data, Generic, Storable)
data AllocatorT
type Allocator = Ptr AllocatorT
foreign import ccall unsafe "&shared_createAllocator"
p'shared_createAllocator
:: FunPtr (IO Allocator)
foreign import ccall unsafe "&shared_lookupAllocator"
p'shared_lookupAllocator
:: FunPtr (CString -> IO Allocator)
foreign import ccall unsafe "&shared_destroyAllocator"
p'shared_destroyAllocator
:: FunPtr (Allocator -> IO ())
foreign import ccall unsafe "&shared_getStoreName"
p'shared_getStoreName
:: FunPtr (Allocator -> CString)
foreign import ccall unsafe "&shared_ptrToShPtr"
p'shared_ptrToShPtr
:: FunPtr (Allocator -> Ptr a -> SharedPtr a)
foreign import ccall unsafe "&shared_shPtrToPtr"
p'shared_shPtrToPtr
:: FunPtr (Allocator -> SharedPtr a -> Ptr a)
foreign import ccall unsafe "&shared_malloc"
p'shared_malloc
:: FunPtr (Allocator -> CSize -> IO (Ptr a))
foreign import ccall unsafe "&shared_realloc"
p'shared_realloc
:: FunPtr (Allocator -> Ptr a -> CSize -> IO (Ptr a))
foreign import ccall unsafe "&shared_free"
p'shared_free
:: FunPtr (Allocator -> Ptr a -> IO ())
foreign import ccall unsafe "shared_createAllocator"
c'shared_createAllocator
:: IO Allocator
foreign import ccall unsafe "shared_lookupAllocator"
c'shared_lookupAllocator
:: CString -> IO Allocator
foreign import ccall unsafe "shared_destroyAllocator"
c'shared_destroyAllocator
:: Allocator -> IO ()
foreign import ccall unsafe "shared_getStoreName"
c'shared_getStoreName
:: Allocator -> CString
foreign import ccall unsafe "shared_ptrToShPtr"
c'shared_ptrToShPtr
:: Allocator -> Ptr a -> SharedPtr a
foreign import ccall unsafe "shared_shPtrToPtr"
c'shared_shPtrToPtr
:: Allocator -> SharedPtr a -> Ptr a
foreign import ccall unsafe "shared_malloc"
c'shared_malloc
:: Allocator -> CSize -> IO (Ptr a)
foreign import ccall unsafe "shared_realloc"
c'shared_realloc
:: Allocator -> Ptr a -> CSize -> IO (Ptr a)
foreign import ccall unsafe "shared_free"
c'shared_free
:: Allocator -> Ptr a -> IO ()
foreign import ccall unsafe "&vk_shared_malloc"
p'vk_shared_malloc
:: FunPtr
(Ptr Void -> CSize -> CSize -> allocScope -> IO (Ptr Void))
foreign import ccall unsafe "&vk_shared_realloc"
p'vk_shared_realloc
:: FunPtr
(Ptr Void -> Ptr Void -> CSize -> CSize -> allocScope -> IO (Ptr Void))
foreign import ccall unsafe "&vk_shared_free"
p'vk_shared_free
:: FunPtr (Ptr Void -> Ptr Void -> IO ())