BlockingQueue

class BlockingQueue<T : ModelElement.QObject> @JvmOverloads constructor(parent: ModelElement, capacity: Int = Int.MAX_VALUE, name: String? = null) : ModelElement(source)

A blocking queue facilitates the exchange of information between two or more entities that are experiencing processes. Note that an entity can experience one process at a time.

If the capacity is finite, then placing an item in the queue may cause the sender to block its current process. Receivers of items from the queue may block if the number of items meeting their requirements are not available at the time of the request. By default, all queues are FIFO, but their disciplines can be set by the user. Instances are intended to be used to communicate between KSLProcesses via the shared mutable state of the queue. Statistics on blocking and usage of the communication channel are automatically reported.

Parameters

parent

the parent of the queue

capacity

the capacity of the queue, by default Int.MAX_VALUE (infinite)

name

the name of the queue

Constructors

Link copied to clipboard
constructor(parent: ModelElement, capacity: Int = Int.MAX_VALUE, name: String? = null)

Types

Link copied to clipboard
inner class AmountRequest(receiver: ProcessModel.Entity, predicate: (T) -> Boolean, val amountRequested: Int, priority: Int) : BlockingQueue.ChannelRequest<T>

Represents a request by an entity to receive a given amount of items from the channel that meet the criteria (predicate).

Link copied to clipboard
open inner class ChannelRequest(val receiver: ProcessModel.Entity, val predicate: (T) -> Boolean, priority: Int) : ModelElement.QObject

Represents a request by an entity to receive a given amount of items from the channel that meet the criteria (predicate).

Link copied to clipboard

Allows the next request that can be filled to be selected regardless of its location within the request queue.

Link copied to clipboard

The default is to select the next based on the queue discipline. This class can be used to define a default method for selecting the next receiver's request to receive items from the channel. The default is to use the queue discipline.

Link copied to clipboard

Interface for defining request selection

Properties

Link copied to clipboard

The number of available slots in the channel based on the capacity

Link copied to clipboard
@set:KSLControl(controlType = ControlType.INTEGER, lowerBound = 1.0)
var capacity: Int

The default size for the queue for each replication. This property cannot be changed during a replication.

Link copied to clipboard

The channel that holds items that are being sent or received.

Link copied to clipboard

True if the channel does not contain any items

Link copied to clipboard

True if the channel contains items

Link copied to clipboard

True if the channel is at its capacity

Link copied to clipboard

True if the channel is not at its capacity

Link copied to clipboard

The user of the BlockingQueue can supply a function that will select the next entity that is waiting to receive items from the queue's channel after new items are added to the channel.

Link copied to clipboard

The queue that holds requests by entities to remove items from the channel because the channel does not have the requested amount of items that meet the desired selection criteria.

Link copied to clipboard

The queue that holds entities wanting to place items in to the channel that are waiting (blocked) because there is no available capacity

Link copied to clipboard

The user of the BlockingQueue can supply a function that will select, after items are removed from the channel, the next entity that is blocked waiting to send items to the queue's channel because the channel was full.

Functions

Link copied to clipboard
Link copied to clipboard
fun countByChannel(predicate: Predicate<T>): Int
fun countByChannel(predicate: (T) -> Boolean): Int
Link copied to clipboard
fun filterChannel(predicate: Predicate<T>): List<T>
fun filterChannel(predicate: (T) -> Boolean): List<T>

Finds the items in the channel according to the condition. Does not remove the items from the channel.

Link copied to clipboard
fun receiveFromChannel(condition: Predicate<T>, waitStats: Boolean = true): List<T>

Finds the items in the channel according to the condition and removes them. The channel must not be empty.

Link copied to clipboard

The channel must not be empty; otherwise an IllegalStateException will occur.

Link copied to clipboard

Removes and terminates all the requests waiting in the queue

Link copied to clipboard

Removes and terminates all the entities waiting in the send queue

Link copied to clipboard
fun removeAllFromChannel(c: Collection<T>, waitStats: Boolean = true)

Attempts to remove all the supplied items from the channel. Throws an IllegalStateException if all the items are not present in the channel. Removing items from the channel triggers the entities waiting to send more items into the channel if the channel was full.

Link copied to clipboard

Removes the request from the queue and tells the associated entity to terminate its process. The process that was suspended because the entity's request was placed in the queue is immediately terminated.

Link copied to clipboard

Removes the entity from the send queue and tells the entity to terminate its process. The process that was suspended because the entity was placed in the queue is immediately terminated.

Link copied to clipboard