apecs-0.2.1.1: A fast ECS for game engine programming

Safe HaskellNone
LanguageHaskell2010

Apecs.Logs

Contents

Synopsis

Types and classes

class Log l c where Source #

A Log is a PureLog with mutable state.

Minimal complete definition

logEmpty, logOnSet, logOnDestroy, logReset

Methods

logEmpty :: IO (l c) Source #

logOnSet :: l c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: l c -> Entity a -> c -> IO () Source #

logReset :: l c -> IO () Source #

Instances

(Bounded c, Enum c) => Log EnumTable c Source # 

Methods

logEmpty :: IO (EnumTable c) Source #

logOnSet :: EnumTable c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: EnumTable c -> Entity a -> c -> IO () Source #

logReset :: EnumTable c -> IO () Source #

Log l c => Log (LVec1 l) c Source # 

Methods

logEmpty :: IO (LVec1 l c) Source #

logOnSet :: LVec1 l c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: LVec1 l c -> Entity a -> c -> IO () Source #

logReset :: LVec1 l c -> IO () Source #

PureLog l c => Log (FromPure l) c Source # 

Methods

logEmpty :: IO (FromPure l c) Source #

logOnSet :: FromPure l c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: FromPure l c -> Entity a -> c -> IO () Source #

logReset :: FromPure l c -> IO () Source #

(Log l1 c, Log l2 c) => Log (LVec2 l1 l2) c Source # 

Methods

logEmpty :: IO (LVec2 l1 l2 c) Source #

logOnSet :: LVec2 l1 l2 c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: LVec2 l1 l2 c -> Entity a -> c -> IO () Source #

logReset :: LVec2 l1 l2 c -> IO () Source #

(Log l1 c, Log l2 c, Log l3 c) => Log (LVec3 l1 l2 l3) c Source # 

Methods

logEmpty :: IO (LVec3 l1 l2 l3 c) Source #

logOnSet :: LVec3 l1 l2 l3 c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: LVec3 l1 l2 l3 c -> Entity a -> c -> IO () Source #

logReset :: LVec3 l1 l2 l3 c -> IO () Source #

class PureLog l c where Source #

A PureLog is a piece of state l c that is updated when components c are written or destroyed. Note that l :: * -> *

Minimal complete definition

pureEmpty, pureOnSet, pureOnDestroy

Methods

pureEmpty :: l c Source #

pureOnSet :: Entity a -> Maybe c -> c -> l c -> l c Source #

pureOnDestroy :: Entity a -> c -> l c -> l c Source #

newtype FromPure l c Source #

FromPure turns a PureLog into a Log

Constructors

FromPure (IORef (l c)) 

Instances

PureLog l c => Log (FromPure l) c Source # 

Methods

logEmpty :: IO (FromPure l c) Source #

logOnSet :: FromPure l c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: FromPure l c -> Entity a -> c -> IO () Source #

logReset :: FromPure l c -> IO () Source #

data Logger l s Source #

A Logger l of some store updates its Log l with the writes and deletes to Store s

Instances

(Log l (Stores s), Cachable s) => Store (Logger l s) Source # 

Associated Types

type SafeRW (Logger l s) :: * Source #

type Stores (Logger l s) :: * Source #

Methods

explGetUnsafe :: Logger l s -> Int -> IO (Stores (Logger l s)) Source #

explGet :: Logger l s -> Int -> IO (SafeRW (Logger l s)) Source #

explSet :: Logger l s -> Int -> Stores (Logger l s) -> IO () Source #

explSetMaybe :: Logger l s -> Int -> SafeRW (Logger l s) -> IO () Source #

explModify :: Logger l s -> Int -> (Stores (Logger l s) -> Stores (Logger l s)) -> IO () Source #

explCmap :: Logger l s -> (Stores (Logger l s) -> Stores (Logger l s)) -> IO () Source #

explCmapM_ :: MonadIO m => Logger l s -> (Stores (Logger l s) -> m a) -> m () Source #

explCimapM_ :: MonadIO m => Logger l s -> ((Int, Stores (Logger l s)) -> m a) -> m () Source #

explCmapM :: MonadIO m => Logger l s -> (Stores (Logger l s) -> m a) -> m [a] Source #

explCimapM :: MonadIO m => Logger l s -> ((Int, Stores (Logger l s)) -> m a) -> m [a] Source #

(Log l (Stores s), Cachable s) => HasMembers (Logger l s) Source # 

Methods

explDestroy :: Logger l s -> Int -> IO () Source #

explExists :: Logger l s -> Int -> IO Bool Source #

explMembers :: Logger l s -> IO (Vector Int) Source #

explReset :: Logger l s -> IO () Source #

explImapM_ :: MonadIO m => Logger l s -> (Int -> m a) -> m () Source #

explImapM :: MonadIO m => Logger l s -> (Int -> m a) -> m [a] Source #

(Log l (Stores s), Cachable s) => Initializable (Logger l s) Source # 

Associated Types

type InitArgs (Logger l s) :: * Source #

Methods

initStoreWith :: InitArgs (Logger l s) -> IO (Logger l s) Source #

type SafeRW (Logger l s) Source # 
type SafeRW (Logger l s) = SafeRW s
type Stores (Logger l s) Source # 
type Stores (Logger l s) = Stores s
type InitArgs (Logger l s) Source # 
type InitArgs (Logger l s) = InitArgs s

getLog :: forall w c l. (IsRuntime c, Has w c, HasLog (Storage c) l, Log l c) => System w (l c) Source #

Produces the log indicated by the return type.

readIORef :: IORef a -> IO a #

Read the value of an IORef

data LVec1 l c Source #

Composite Log consisting of 1 Log

Instances

Log l c => Log (LVec1 l) c Source # 

Methods

logEmpty :: IO (LVec1 l c) Source #

logOnSet :: LVec1 l c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: LVec1 l c -> Entity a -> c -> IO () Source #

logReset :: LVec1 l c -> IO () Source #

data LVec2 l1 l2 c Source #

Composite Log consisting of 2 Logs

Instances

(Log l1 c, Log l2 c) => Log (LVec2 l1 l2) c Source # 

Methods

logEmpty :: IO (LVec2 l1 l2 c) Source #

logOnSet :: LVec2 l1 l2 c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: LVec2 l1 l2 c -> Entity a -> c -> IO () Source #

logReset :: LVec2 l1 l2 c -> IO () Source #

data LVec3 l1 l2 l3 c Source #

Composite Log consisting of 3 Logs

Instances

(Log l1 c, Log l2 c, Log l3 c) => Log (LVec3 l1 l2 l3) c Source # 

Methods

logEmpty :: IO (LVec3 l1 l2 l3 c) Source #

logOnSet :: LVec3 l1 l2 l3 c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: LVec3 l1 l2 l3 c -> Entity a -> c -> IO () Source #

logReset :: LVec3 l1 l2 l3 c -> IO () Source #

EnumTable

data EnumTable c Source #

Hashtable that maintains buckets of entities whose fromEnum c produces the same value

Instances

(Bounded c, Enum c) => Log EnumTable c Source # 

Methods

logEmpty :: IO (EnumTable c) Source #

logOnSet :: EnumTable c -> Entity a -> Maybe c -> c -> IO () Source #

logOnDestroy :: EnumTable c -> Entity a -> c -> IO () Source #

logReset :: EnumTable c -> IO () Source #

byIndex :: EnumTable c -> Int -> System w (Slice c) Source #

Query the EnumTable by an index (the result of fromEnum). Will return an empty slice if index < 0 of index >= fromEnum (maxBound).

byEnum :: Enum c => EnumTable c -> c -> System w (Slice c) Source #

Query the EnumTable by an example enum. Will not perform bound checks, so crashes if `fromEnum c && fromEnum c fromEnum maxBound `.