apecs-0.4.1.1: Fast ECS framework for game programming

Safe HaskellNone
LanguageHaskell2010

Apecs.Stores

Synopsis

Documentation

data Map c Source #

A map based on Data.Intmap.Strict. O(log(n)) for most operations.

Instances
ExplMembers (Map c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explMembers :: Map c -> IO (Vector Int) Source #

ExplDestroy (Map c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explDestroy :: Map c -> Int -> IO () Source #

ExplSet (Map c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explSet :: Map c -> Int -> Elem (Map c) -> IO () Source #

ExplGet (Map c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explGet :: Map c -> Int -> IO (Elem (Map c)) Source #

explExists :: Map c -> Int -> IO Bool Source #

ExplInit (Map c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explInit :: IO (Map c) Source #

Cachable (Map s) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Map c) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Map c) = c

data Cache (n :: Nat) s Source #

A cache around another store. Caches store their members in a fixed-size vector, so operations run in O(1). Caches can provide huge performance boosts, especially for large numbers of components. The cache size is given as a type-level argument.

Note that iterating over a cache is linear in cache size, so sparsely populated caches might actually decrease performance. In general, the exact size of the cache does not matter as long as it reasonably approximates the number of components present.

The cache uses entity (-1) to internally represent missing entities, so be wary when manually manipulating entities.

Instances
ExplMembers s => ExplMembers (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explMembers :: Cache n s -> IO (Vector Int) Source #

ExplDestroy s => ExplDestroy (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explDestroy :: Cache n s -> Int -> IO () Source #

ExplSet s => ExplSet (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explSet :: Cache n s -> Int -> Elem (Cache n s) -> IO () Source #

ExplGet s => ExplGet (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explGet :: Cache n s -> Int -> IO (Elem (Cache n s)) Source #

explExists :: Cache n s -> Int -> IO Bool Source #

(ExplInit s, KnownNat n, Cachable s) => ExplInit (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explInit :: IO (Cache n s) Source #

(KnownNat n, Cachable s) => Cachable (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Cache n s) = Elem s

data Unique c Source #

A Unique contains zero or one component. Writing to it overwrites both the previous component and its owner. Its main purpose is to be a Map optimized for when only ever one component inhabits it.

Instances
ExplMembers (Unique c) Source # 
Instance details

Defined in Apecs.Stores

ExplDestroy (Unique c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explDestroy :: Unique c -> Int -> IO () Source #

ExplSet (Unique c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explSet :: Unique c -> Int -> Elem (Unique c) -> IO () Source #

ExplGet (Unique c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explGet :: Unique c -> Int -> IO (Elem (Unique c)) Source #

explExists :: Unique c -> Int -> IO Bool Source #

ExplInit (Unique c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explInit :: IO (Unique c) Source #

type Elem (Unique c) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Unique c) = c

data Global c Source #

A Global contains exactly one component. The initial value is mempty from the component's Monoid instance. When operating on a global, any entity arguments are ignored. For example, we can get a global component with get 0 or get 1 or even get undefined.

Instances
ExplSet (Global c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explSet :: Global c -> Int -> Elem (Global c) -> IO () Source #

ExplGet (Global c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explGet :: Global c -> Int -> IO (Elem (Global c)) Source #

explExists :: Global c -> Int -> IO Bool Source #

Monoid c => ExplInit (Global c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explInit :: IO (Global c) Source #

type Elem (Global c) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Global c) = c

class Cachable s Source #

An empty type class indicating that the store behaves like a regular map, and can therefore safely be cached. An example of a store that cannot be cached is Unique.

Instances
Cachable (Map s) Source # 
Instance details

Defined in Apecs.Stores

(KnownNat n, Cachable s) => Cachable (Cache n s) Source # 
Instance details

Defined in Apecs.Stores