Copyright | Copyright (c) 2009-2016 David Sorokin <david.sorokin@gmail.com> |
---|---|
License | BSD3 |
Maintainer | David Sorokin <david.sorokin@gmail.com> |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Tested with: GHC 8.0.1
This module defines an infinite queue that can use the specified strategies.
- type FCFSQueue m a = Queue m FCFS FCFS a
- type LCFSQueue m a = Queue m LCFS FCFS a
- type SIROQueue m a = Queue m SIRO FCFS a
- type PriorityQueue m a = Queue m StaticPriorities FCFS a
- data Queue m sm so a
- newFCFSQueue :: MonadDES m => Event m (FCFSQueue m a)
- newLCFSQueue :: MonadDES m => Event m (LCFSQueue m a)
- newSIROQueue :: (MonadDES m, QueueStrategy m SIRO) => Event m (SIROQueue m a)
- newPriorityQueue :: (MonadDES m, QueueStrategy m StaticPriorities) => Event m (PriorityQueue m a)
- newQueue :: (MonadDES m, QueueStrategy m sm, QueueStrategy m so) => sm -> so -> Event m (Queue m sm so a)
- enqueueStoringStrategy :: Queue m sm so a -> sm
- dequeueStrategy :: Queue m sm so a -> so
- queueNull :: MonadDES m => Queue m sm so a -> Event m Bool
- queueCount :: MonadDES m => Queue m sm so a -> Event m Int
- queueCountStats :: MonadDES m => Queue m sm so a -> Event m (TimingStats Int)
- enqueueStoreCount :: MonadDES m => Queue m sm so a -> Event m Int
- dequeueCount :: MonadDES m => Queue m sm so a -> Event m Int
- dequeueExtractCount :: MonadDES m => Queue m sm so a -> Event m Int
- enqueueStoreRate :: MonadDES m => Queue m sm so a -> Event m Double
- dequeueRate :: MonadDES m => Queue m sm so a -> Event m Double
- dequeueExtractRate :: MonadDES m => Queue m sm so a -> Event m Double
- queueWaitTime :: MonadDES m => Queue m sm so a -> Event m (SamplingStats Double)
- dequeueWaitTime :: MonadDES m => Queue m sm so a -> Event m (SamplingStats Double)
- queueRate :: MonadDES m => Queue m sm so a -> Event m Double
- dequeue :: (MonadDES m, DequeueStrategy m sm, EnqueueStrategy m so) => Queue m sm so a -> Process m a
- dequeueWithOutputPriority :: (MonadDES m, DequeueStrategy m sm, PriorityQueueStrategy m so po) => Queue m sm so a -> po -> Process m a
- tryDequeue :: (MonadDES m, DequeueStrategy m sm) => Queue m sm so a -> Event m (Maybe a)
- enqueue :: (MonadDES m, EnqueueStrategy m sm, DequeueStrategy m so) => Queue m sm so a -> a -> Event m ()
- enqueueWithStoringPriority :: (MonadDES m, PriorityQueueStrategy m sm pm, DequeueStrategy m so) => Queue m sm so a -> pm -> a -> Event m ()
- queueDelete :: (MonadDES m, Eq a, DeletingQueueStrategy m sm, DequeueStrategy m so) => Queue m sm so a -> a -> Event m Bool
- queueDelete_ :: (MonadDES m, Eq a, DeletingQueueStrategy m sm, DequeueStrategy m so) => Queue m sm so a -> a -> Event m ()
- queueDeleteBy :: (MonadDES m, DeletingQueueStrategy m sm, DequeueStrategy m so) => Queue m sm so a -> (a -> Bool) -> Event m (Maybe a)
- queueDeleteBy_ :: (MonadDES m, DeletingQueueStrategy m sm, DequeueStrategy m so) => Queue m sm so a -> (a -> Bool) -> Event m ()
- queueContains :: (MonadDES m, Eq a, DeletingQueueStrategy m sm) => Queue m sm so a -> a -> Event m Bool
- queueContainsBy :: (MonadDES m, DeletingQueueStrategy m sm) => Queue m sm so a -> (a -> Bool) -> Event m (Maybe a)
- clearQueue :: (MonadDES m, DequeueStrategy m sm) => Queue m sm so a -> Event m ()
- queueSummary :: (MonadDES m, Show sm, Show so) => Queue m sm so a -> Int -> Event m ShowS
- queueNullChanged :: MonadDES m => Queue m sm so a -> Signal m Bool
- queueNullChanged_ :: MonadDES m => Queue m sm so a -> Signal m ()
- queueCountChanged :: MonadDES m => Queue m sm so a -> Signal m Int
- queueCountChanged_ :: MonadDES m => Queue m sm so a -> Signal m ()
- enqueueStoreCountChanged :: MonadDES m => Queue m sm so a -> Signal m Int
- enqueueStoreCountChanged_ :: MonadDES m => Queue m sm so a -> Signal m ()
- dequeueCountChanged :: MonadDES m => Queue m sm so a -> Signal m Int
- dequeueCountChanged_ :: MonadDES m => Queue m sm so a -> Signal m ()
- dequeueExtractCountChanged :: MonadDES m => Queue m sm so a -> Signal m Int
- dequeueExtractCountChanged_ :: MonadDES m => Queue m sm so a -> Signal m ()
- queueWaitTimeChanged :: MonadDES m => Queue m sm so a -> Signal m (SamplingStats Double)
- queueWaitTimeChanged_ :: MonadDES m => Queue m sm so a -> Signal m ()
- dequeueWaitTimeChanged :: MonadDES m => Queue m sm so a -> Signal m (SamplingStats Double)
- dequeueWaitTimeChanged_ :: MonadDES m => Queue m sm so a -> Signal m ()
- queueRateChanged :: MonadDES m => Queue m sm so a -> Signal m Double
- queueRateChanged_ :: MonadDES m => Queue m sm so a -> Signal m ()
- enqueueStored :: MonadDES m => Queue m sm so a -> Signal m a
- dequeueRequested :: MonadDES m => Queue m sm so a -> Signal m ()
- dequeueExtracted :: MonadDES m => Queue m sm so a -> Signal m a
- queueChanged_ :: MonadDES m => Queue m sm so a -> Signal m ()
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.
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.
(MonadDES m, Show sm, Show so, ResultItemable (ResultValue sm), ResultItemable (ResultValue so)) => ResultProvider (Queue m sm so a) m Source # | |
Creating 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.
:: (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
:: (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 #
:: (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.
:: (MonadDES m, DequeueStrategy m sm) | |
=> Queue m sm so a | the queue |
-> Event m (Maybe a) | the dequeued value of |
Try to dequeue immediately.
:: (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 #
:: (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.
:: (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.
:: (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.
:: (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.
:: (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.
:: (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.
:: (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.
:: (MonadDES m, DequeueStrategy m sm) | |
=> Queue m sm so a | the queue |
-> Event m () |
Clear the queue immediately.
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.