module Database.Perdure.Allocator (
Allocator(..),
allocWrite,
module Database.Perdure.StoreFile,
module Database.Perdure.LocalStoreFile,
module Database.Perdure.SingleStoreFile,
module Database.Perdure.ReplicatedFile
) where
import Prelude ()
import Cgm.Prelude
import Data.Word
import Database.Perdure.StoreFile
import Database.Perdure.LocalStoreFile
import Database.Perdure.SingleStoreFile
import Database.Perdure.ReplicatedFile
import Cgm.Data.Super
import Cgm.System.Endian
class Allocator l where
alloc :: l -> Len Word64 Word64 -> IO (Len Word64 Word64)
allocatorStoreFile :: l -> ReplicatedFile
allocWrite :: (Allocator l, LgMultiple Word64 w, Endian w) => l -> Endianness -> [PrimArray Pinned w] -> IO (StoreRef ReplicatedFile w)
allocWrite l e as = do
addr <- alloc l $ apply super (coarsenLen $ sum $ arrayLen <$> as :: Len Word64 Word)
storeFileWrite (allocatorStoreFile l) addr e as