haskey-btree-0.2.0.1: src/Data/BTree/Alloc/Class.hs
-- | A page allocator manages all physical pages.
module Data.BTree.Alloc.Class (
-- * Classes
AllocReaderM(..)
, AllocM(..)
) where
import Prelude hiding (max, min, pred)
import Control.Applicative (Applicative)
import Data.Word (Word64)
import Data.BTree.Impure.Structures
import Data.BTree.Primitives
--------------------------------------------------------------------------------
-- | A page allocator that can read physical pages.
class (Applicative m, Monad m) => AllocReaderM m where
-- | Read a page and return the actual node.
readNode :: (Key key, Value val)
=> Height height
-> NodeId height key val
-> m (Node height key val)
-- | Read an overflow page.
readOverflow :: (Value val)
=> OverflowId
-> m val
-- | A page allocator that can write physical pages.
class AllocReaderM m => AllocM m where
-- | A function that calculates the hypothetical size of a node, if it were
-- to be written to a page (regardless of the maximum page size).
nodePageSize :: (Key key, Value val)
=> m (Height height -> Node height key val -> PageSize)
-- | The maximum page size the allocator can handle.
maxPageSize :: m PageSize
-- | The maximum key size
maxKeySize :: m Word64
-- | The maximum value size
maxValueSize :: m Word64
-- | Allocate a new page for a node, and write the node to the page.
allocNode :: (Key key, Value val)
=> Height height
-> Node height key val
-> m (NodeId height key val)
-- | Free the page belonging to the node.
freeNode :: Height height
-> NodeId height key val
-> m ()
-- | Allocate a new overflow page, and write the value to the page.
allocOverflow :: (Value val)
=> val
-> m OverflowId
-- | Free an overflow page.
freeOverflow :: OverflowId -> m ()
-- | Force delete overflow data from disk.
deleteOverflowData :: OverflowId -> m ()
--------------------------------------------------------------------------------