aivika-transformers-6.1.1: Transformers for the Aivika simulation library
CopyrightCopyright (c) 2009-2017 David Sorokin <david.sorokin@gmail.com>
LicenseBSD3
MaintainerDavid Sorokin <david.sorokin@gmail.com>
Stabilityexperimental
Safe HaskellSafe-Inferred
LanguageHaskell2010

Simulation.Aivika.Trans.Queue.Infinite

Description

Tested with: GHC 8.0.1

This module defines an infinite queue that can use the specified strategies.

Synopsis

Queue Types

type FCFSQueue m a = Queue m FCFS FCFS a Source #

A type synonym for the ordinary FIFO queue also known as the FCFS (First Come - First Serviced) queue.

type LCFSQueue m a = Queue m LCFS FCFS a Source #

A type synonym for the ordinary LIFO queue also known as the LCFS (Last Come - First Serviced) queue.

type SIROQueue m a = Queue m SIRO FCFS a Source #

A type synonym for the SIRO (Serviced in Random Order) queue.

type PriorityQueue m a = Queue m StaticPriorities FCFS a Source #

A type synonym for the queue with static priorities applied when storing the elements in the queue.

data Queue m sm so a Source #

Represents an infinite queue using the specified strategies for internal storing (in memory), sm, and dequeueing (output), so, where a denotes the type of items stored in the queue. As usual, type m denotes the underlying computation within which the simulation executes.

Creating Queue

newFCFSQueue :: MonadDES m => Event m (FCFSQueue m a) Source #

Create a new infinite FCFS queue.

newLCFSQueue :: MonadDES m => Event m (LCFSQueue m a) Source #

Create a new infinite LCFS queue.

newSIROQueue :: (MonadDES m, QueueStrategy m SIRO) => Event m (SIROQueue m a) Source #

Create a new infinite SIRO queue.

newPriorityQueue :: (MonadDES m, QueueStrategy m StaticPriorities) => Event m (PriorityQueue m a) Source #

Create a new infinite priority queue.

newQueue Source #

Arguments

:: (MonadDES m, QueueStrategy m sm, QueueStrategy m so) 
=> sm

the strategy applied when storing items in the queue

-> so

the strategy applied to the dequeueing (output) processes when the queue is empty

-> Event m (Queue m sm so a) 

Create a new infinite queue with the specified strategies.

Queue Properties and Activities

enqueueStoringStrategy :: Queue m sm so a -> sm Source #

The strategy applied when storing (in memory) items in the queue.

dequeueStrategy :: Queue m sm so a -> so Source #

The strategy applied to the dequeueing (output) processes.

queueNull :: MonadDES m => Queue m sm so a -> Event m Bool Source #

Test whether the queue is empty.

See also queueNullChanged and queueNullChanged_.

queueCount :: MonadDES m => Queue m sm so a -> Event m Int Source #

Return the current queue size.

See also queueCountStats, queueCountChanged and queueCountChanged_.

queueCountStats :: MonadDES m => Queue m sm so a -> Event m (TimingStats Int) Source #

Return the queue size statistics.

enqueueStoreCount :: MonadDES m => Queue m sm so a -> Event m Int Source #

Return the total number of input items that were stored.

See also enqueueStoreCountChanged and enqueueStoreCountChanged_.

dequeueCount :: MonadDES m => Queue m sm so a -> Event m Int Source #

Return the total number of requests for dequeueing the items, not taking into account the failed attempts to dequeue immediately without suspension.

See also dequeueCountChanged and dequeueCountChanged_.

dequeueExtractCount :: MonadDES m => Queue m sm so a -> Event m Int Source #

Return the total number of output items that were actually dequeued.

See also dequeueExtractCountChanged and dequeueExtractCountChanged_.

enqueueStoreRate :: MonadDES m => Queue m sm so a -> Event m Double Source #

Return the rate of the items that were stored: how many items per time.

dequeueRate :: MonadDES m => Queue m sm so a -> Event m Double Source #

Return the rate of the requests for dequeueing the items: how many requests per time. It does not include the failed attempts to dequeue immediately without suspension.

dequeueExtractRate :: MonadDES m => Queue m sm so a -> Event m Double Source #

Return the rate of the output items that were dequeued: how many items per time.

queueWaitTime :: MonadDES m => Queue m sm so a -> Event m (SamplingStats Double) Source #

Return the wait time from the time at which the item was stored in the queue to the time at which it was dequeued.

See also queueWaitTimeChanged and queueWaitTimeChanged_.

dequeueWaitTime :: MonadDES m => Queue m sm so a -> Event m (SamplingStats Double) Source #

Return the dequeue wait time from the time at which the item was requested for dequeueing to the time at which it was actually dequeued.

See also dequeueWaitTimeChanged and dequeueWaitTimeChanged_.

queueRate :: MonadDES m => Queue m sm so a -> Event m Double Source #

Return a long-term average queue rate calculated as the average queue size divided by the average wait time.

It should conform with Little's rule.

See also queueRateChanged and queueRateChanged_.

Dequeuing and Enqueuing

dequeue Source #

Arguments

:: (MonadDES m, DequeueStrategy m sm, EnqueueStrategy m so) 
=> Queue m sm so a

the queue

-> Process m a

the dequeued value

Dequeue suspending the process if the queue is empty.

dequeueWithOutputPriority Source #

Arguments

:: (MonadDES m, DequeueStrategy m sm, PriorityQueueStrategy m so po) 
=> Queue m sm so a

the queue

-> po

the priority for output

-> Process m a

the dequeued value

Dequeue with the output priority suspending the process if the queue is empty.

tryDequeue Source #

Arguments

:: (MonadDES m, DequeueStrategy m sm) 
=> Queue m sm so a

the queue

-> Event m (Maybe a)

the dequeued value of Nothing

Try to dequeue immediately.

enqueue Source #

Arguments

:: (MonadDES m, EnqueueStrategy m sm, DequeueStrategy m so) 
=> Queue m sm so a

the queue

-> a

the item to enqueue

-> Event m () 

Enqueue the item.

enqueueWithStoringPriority Source #

Arguments

:: (MonadDES m, PriorityQueueStrategy m sm pm, DequeueStrategy m so) 
=> Queue m sm so a

the queue

-> pm

the priority for storing

-> a

the item to enqueue

-> Event m () 

Enqueue with the storing priority the item.

queueDelete Source #

Arguments

:: (MonadDES m, Eq a, DeletingQueueStrategy m sm, DequeueStrategy m so) 
=> Queue m sm so a

the queue

-> a

the item to remove from the queue

-> Event m Bool

whether the item was found and removed

Remove the item from the queue and return a flag indicating whether the item was found and actually removed.

queueDelete_ Source #

Arguments

:: (MonadDES m, Eq a, DeletingQueueStrategy m sm, DequeueStrategy m so) 
=> Queue m sm so a

the queue

-> a

the item to remove from the queue

-> Event m () 

Remove the specified item from the queue.

queueDeleteBy Source #

Arguments

:: (MonadDES m, DeletingQueueStrategy m sm, DequeueStrategy m so) 
=> Queue m sm so a

the queue

-> (a -> Bool)

the predicate

-> Event m (Maybe a) 

Remove an item satisfying the specified predicate and return the item if found.

queueDeleteBy_ Source #

Arguments

:: (MonadDES m, DeletingQueueStrategy m sm, DequeueStrategy m so) 
=> Queue m sm so a

the queue

-> (a -> Bool)

the predicate

-> Event m () 

Remove an item satisfying the specified predicate.

queueContains Source #

Arguments

:: (MonadDES m, Eq a, DeletingQueueStrategy m sm) 
=> Queue m sm so a

the queue

-> a

the item to search the queue for

-> Event m Bool

whether the item was found

Detect whether the item is contained in the queue.

queueContainsBy Source #

Arguments

:: (MonadDES m, DeletingQueueStrategy m sm) 
=> Queue m sm so a

the queue

-> (a -> Bool)

the predicate

-> Event m (Maybe a)

the item if it was found

Detect whether an item satisfying the specified predicate is contained in the queue.

clearQueue Source #

Arguments

:: (MonadDES m, DequeueStrategy m sm) 
=> Queue m sm so a

the queue

-> Event m () 

Clear the queue immediately.

Statistics Reset

resetQueue :: MonadDES m => Queue m sm so a -> Event m () Source #

Reset the statistics.

Summary

queueSummary :: (MonadDES m, Show sm, Show so) => Queue m sm so a -> Int -> Event m ShowS Source #

Return the summary for the queue with desciption of its properties and activities using the specified indent.

Derived Signals for Properties

queueNullChanged :: MonadDES m => Queue m sm so a -> Signal m Bool Source #

Signal when the queueNull property value has changed.

queueNullChanged_ :: MonadDES m => Queue m sm so a -> Signal m () Source #

Signal when the queueNull property value has changed.

queueCountChanged :: MonadDES m => Queue m sm so a -> Signal m Int Source #

Signal when the queueCount property value has changed.

queueCountChanged_ :: MonadDES m => Queue m sm so a -> Signal m () Source #

Signal when the queueCount property value has changed.

enqueueStoreCountChanged :: MonadDES m => Queue m sm so a -> Signal m Int Source #

Signal when the enqueueStoreCount property value has changed.

enqueueStoreCountChanged_ :: MonadDES m => Queue m sm so a -> Signal m () Source #

Signal when the enqueueStoreCount property value has changed.

dequeueCountChanged :: MonadDES m => Queue m sm so a -> Signal m Int Source #

Signal when the dequeueCount property value has changed.

dequeueCountChanged_ :: MonadDES m => Queue m sm so a -> Signal m () Source #

Signal when the dequeueCount property value has changed.

dequeueExtractCountChanged :: MonadDES m => Queue m sm so a -> Signal m Int Source #

Signal when the dequeueExtractCount property value has changed.

dequeueExtractCountChanged_ :: MonadDES m => Queue m sm so a -> Signal m () Source #

Signal when the dequeueExtractCount property value has changed.

queueWaitTimeChanged :: MonadDES m => Queue m sm so a -> Signal m (SamplingStats Double) Source #

Signal when the queueWaitTime property value has changed.

queueWaitTimeChanged_ :: MonadDES m => Queue m sm so a -> Signal m () Source #

Signal when the queueWaitTime property value has changed.

dequeueWaitTimeChanged :: MonadDES m => Queue m sm so a -> Signal m (SamplingStats Double) Source #

Signal when the dequeueWaitTime property value has changed.

dequeueWaitTimeChanged_ :: MonadDES m => Queue m sm so a -> Signal m () Source #

Signal when the dequeueWaitTime property value has changed.

queueRateChanged :: MonadDES m => Queue m sm so a -> Signal m Double Source #

Signal when the queueRate property value has changed.

queueRateChanged_ :: MonadDES m => Queue m sm so a -> Signal m () Source #

Signal when the queueRate property value has changed.

Basic Signals

enqueueStored :: MonadDES m => Queue m sm so a -> Signal m a Source #

Return a signal that notifies when the enqueued item is stored in the internal memory of the queue.

dequeueRequested :: MonadDES m => Queue m sm so a -> Signal m () Source #

Return a signal that notifies when the dequeuing operation was requested.

dequeueExtracted :: MonadDES m => Queue m sm so a -> Signal m a Source #

Return a signal that notifies when the item was extracted from the internal storage of the queue and prepared for immediate receiving by the dequeuing process.

Overall Signal

queueChanged_ :: MonadDES m => Queue m sm so a -> Signal m () Source #

Signal whenever any property of the queue changes.

The property must have the corresponded signal. There are also characteristics similar to the properties but that have no signals. As a rule, such characteristics already depend on the simulation time and therefore they may change at any time point.