ohhecs-0.0.2: An Entity-Component-Systems engine core.
Copyright(C) 2020 Sophie Taylor
LicenseAGPL-3.0-or-later
MaintainerSophie Taylor <sophie@spacekitteh.moe>
Stabilityexperimental
PortabilityGHC
Safe HaskellTrustworthy
LanguageGHC2021

Games.ECS.MessageQueue

Description

Implements a simple message queuing system.

Synopsis

Documentation

data MessageQueue a Source #

The core message queue type.

Instances

Instances details
Generic (MessageQueue a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

Associated Types

type Rep (MessageQueue a) 
Instance details

Defined in Games.ECS.MessageQueue

type Rep (MessageQueue a)

Methods

from :: MessageQueue a -> Rep (MessageQueue a) x #

to :: Rep (MessageQueue a) x -> MessageQueue a #

Eq a => Eq (MessageQueue a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

Hashable a => Hashable (MessageQueue a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

type Rep (MessageQueue a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

type Rep (MessageQueue a)

newMessageQueue :: MessageQueue a Source #

Construct a new, empty MessageQueue.

class Monad m => MonadAtomicMessageQueue a (m :: Type -> Type) where Source #

Monads which can atomically modify a MessageQueue.

Methods

stateMessageQueue :: (MessageQueue a -> (MessageQueue a, val)) -> m val Source #

Monadically perform a given state transition atomically on the MessageQueue, and return the result.

modifyMessageQueue :: (MessageQueue a -> MessageQueue a) -> m () Source #

Atomically modify a MessageQueue.

queueMessage :: MonadAtomicMessageQueue a m => a -> m () Source #

Queue message

queueImmediateMessage :: MonadAtomicMessageQueue a m => a -> m () Source #

Push a message on to the front of the queue.

queueMessages :: (Foldable f, MonadAtomicMessageQueue a m) => f a -> m () Source #

Queue a series of messages

readMessage :: MonadAtomicMessageQueue a m => (a -> Bool) -> m (Maybe a) Source #

Pops the message queue

processMessageQueue Source #

Arguments

:: forall world a m. MonadAtomicMessageQueue a m 
=> (world 'Storing -> a -> Bool)

Predicate on whether a message should be skipped this time round, and left in the queue.

-> (world 'Storing -> a -> m (world 'Storing))

How to process an individual message.

-> world 'Storing

The world.

-> m (MessagesProcessed a, world 'Storing) 

Processes a message queue until it's empty.

data MessagesProcessed a Source #

Which messages were processed.

Instances

Instances details
Monoid (MessagesProcessed a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

Semigroup (MessagesProcessed a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

Generic (MessagesProcessed a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

Associated Types

type Rep (MessagesProcessed a) 
Instance details

Defined in Games.ECS.MessageQueue

type Rep (MessagesProcessed a) = D1 ('MetaData "MessagesProcessed" "Games.ECS.MessageQueue" "ohhecs-0.0.2-inplace" 'False) (C1 ('MetaCons "AllMessagesProcessed" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NewMessagesProcessed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Seq a))))
Show a => Show (MessagesProcessed a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

Eq a => Eq (MessagesProcessed a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

Hashable a => Hashable (MessagesProcessed a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

type Rep (MessagesProcessed a) Source # 
Instance details

Defined in Games.ECS.MessageQueue

type Rep (MessagesProcessed a) = D1 ('MetaData "MessagesProcessed" "Games.ECS.MessageQueue" "ohhecs-0.0.2-inplace" 'False) (C1 ('MetaCons "AllMessagesProcessed" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NewMessagesProcessed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Seq a))))