cz.zcu.fav.kiv.jsim
Class JSimHead
java.lang.Object
|
+--cz.zcu.fav.kiv.jsim.JSimHead
- All Implemented Interfaces:
- java.lang.Comparable, JSimDisplayable
- Direct Known Subclasses:
- UnsecureHead
- public class JSimHead
- extends java.lang.Object
- implements JSimDisplayable, java.lang.Comparable
The JSimHead class is an equivalent of Simula's or C-Sim's HEAD. It is a double-ended queue
that can contain any number of JSimLink instances. It provides some useful statistics, too.
- Since:
- J-Sim version 0.1.0 (since J-Sim version 0.0.2 as JSimQueue)
- Version:
- J-Sim version 0.3.0
- Author:
- Jarda KAČER, Pavel DOMECKÝ
Field Summary |
private double |
creationTime
The simulation time this queue was created. |
private JSimLink |
head
The first link in the queue. |
protected double |
lastChange
The simulation time when the last change was made. |
private java.lang.String |
myName
The name of the queue. |
private long |
myNumber
This queue's number. |
protected JSimSimulation |
myParent
The simulation in which the queue is placed. |
private long |
noOfItems
The number of links in the queue. |
protected long |
noOfItemsRemoved
The number of links removed from the queue. |
protected double |
sumLwUntilLastChange
The sum of time spent by all links in the queue from its creation to its last change. |
protected double |
sumTwRemoved
The sum of time spent in the queue by all links already removed from it. |
private JSimLink |
tail
The last link in the queue. |
Constructor Summary |
JSimHead(java.lang.String name,
JSimSimulation parent)
Creates a new JSimHead queue belonging to a simulation and having a name. |
Method Summary |
long |
cardinal()
Returns the number of links in the queue. |
void |
clear()
Removes all links from the queue. |
int |
compareTo(java.lang.Object o)
Compares this head with another one. |
javax.swing.JDialog |
createDetailedInfoWindow(JSimMainWindow parentWindow)
Creates a detailed info window that shows information about the queue.
|
protected void |
decNoOfItems(double whenEntered)
Decrements internal counter of links and updates statistics.
|
boolean |
empty()
Tests whether the queue is empty. |
boolean |
equals(java.lang.Object o)
Indicates whether some other object is equal to this one. |
JSimLink |
first()
Returns the first link in the queue. |
double |
getCurrentTime()
Returns the current time of the simulation that this queue belongs to. |
java.util.Collection |
getDetailedInformationArray()
Returns a collection with the queue's characteristics. |
java.lang.Object |
getFirstData()
Returns the first links's data. |
java.lang.String |
getFirstDataType()
Returns the first link's data type. |
protected JSimLink |
getHead()
Returns the head of the queue. |
java.lang.Object |
getLastData()
Returns the last links's data. |
java.lang.String |
getLastDataType()
Returns the last link's data type. |
double |
getLw()
Returns the mean length of the queue. |
java.lang.String |
getName()
Returns the queue's name. |
long |
getNumber()
Returns the queue's number. |
java.lang.String |
getObjectListItemDescription()
Returns a string containing basic information about the queue.
|
JSimSimulation |
getParent()
Returns the simulation that this queue is a part of. |
protected JSimLink |
getTail()
Returns the tail of the queue. |
double |
getTw()
Returns the mean waiting time spent in the queue by all links already removed from the queue.
|
double |
getTwForAllLinks()
Returns the mean waiting time spent in the queue by all links ever inserted to the queue.
|
int |
hashCode()
Returns a hash code value for the object. |
protected void |
incNoOfItems()
Increments internal counter of links and updates statistics.
|
JSimLink |
last()
Returns the last link in the queue. |
protected void |
putAtHead(JSimLink newHead)
Adds a link to the head of the queue, doing necessary adjustments.
|
protected void |
putAtTail(JSimLink newTail)
Sets a new tail of the queue, doing necessary adjustments. |
protected void |
setHead(JSimLink newHead)
Sets a new head of the queue. |
protected void |
setTail(JSimLink newTail)
Sets a new tail of the queue. |
java.lang.String |
toString()
Returns a string representation of the queue. |
Methods inherited from class java.lang.Object |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
myName
private final java.lang.String myName
- The name of the queue.
myNumber
private final long myNumber
- This queue's number. Queue numbers are unique for a given simulation.
noOfItems
private long noOfItems
- The number of links in the queue.
myParent
protected final JSimSimulation myParent
- The simulation in which the queue is placed. Protected because child classes will possibly want
to use it.
head
private JSimLink head
- The first link in the queue.
tail
private JSimLink tail
- The last link in the queue.
creationTime
private final double creationTime
- The simulation time this queue was created.
sumLwUntilLastChange
protected double sumLwUntilLastChange
- The sum of time spent by all links in the queue from its creation to its last change.
lastChange
protected double lastChange
- The simulation time when the last change was made.
sumTwRemoved
protected double sumTwRemoved
- The sum of time spent in the queue by all links already removed from it.
noOfItemsRemoved
protected long noOfItemsRemoved
- The number of links removed from the queue.
JSimHead
public JSimHead(java.lang.String name,
JSimSimulation parent)
throws JSimInvalidParametersException,
JSimTooManyHeadsException
- Creates a new JSimHead queue belonging to a simulation and having a name. The queue is initially empty.
- Parameters:
name
- The name of the queue.parent
- The parent simulation.
- Throws:
JSimInvalidParametersException
- This exception is thrown out if the parent simulation
is null.
JSimTooManyHeadsException
- This exception is thrown out if no other queue can be
added to the simulation specified.
empty
public boolean empty()
- Tests whether the queue is empty.
- Returns:
- True if the queue is empty, false otherwise.
cardinal
public long cardinal()
- Returns the number of links in the queue.
- Returns:
- The number of links in the queue.
first
public JSimLink first()
- Returns the first link in the queue.
- Returns:
- The first link in the queue if the queue is not empty, null otherwise.
last
public JSimLink last()
- Returns the last link in the queue.
- Returns:
- The last link in the queue if the queue is not empty, null otherwise.
clear
public void clear()
- Removes all links from the queue. The links may survive if there is a reference to them.
This is an "intelligent" removal. All links are removed one-by-one so that characteristics
are properly updated.
getNumber
public final long getNumber()
- Returns the queue's number.
- Returns:
- The queue's number.
getName
public java.lang.String getName()
- Returns the queue's name.
- Returns:
- The queue's name.
getParent
public JSimSimulation getParent()
- Returns the simulation that this queue is a part of.
- Returns:
- The simulation that this queue is a part of.
getFirstData
public java.lang.Object getFirstData()
- Returns the first links's data. If the first link is an instance of a JSimLink subclass
with user-defined content, the return value of this method depends on the creator of the subclass.
If the link is used as a data wrapper (the data is specified as a constructor parameter),
the wrapped data is returned.
- Returns:
- The first link's data if the queue is not empty, null otherwise.
getFirstDataType
public java.lang.String getFirstDataType()
- Returns the first link's data type. If the first link is an instance of a JSimLink subclass
with user-defined content, the return value of this method depends on the creator of the subclass.
If the link is used as a data wrapper (the data is specified as a constructor parameter),
the wrapped data's type is returned.
- Returns:
- The first link's data type if the queue is not empty, null otherwise.
getLastData
public java.lang.Object getLastData()
- Returns the last links's data. If the last link is an instance of a JSimLink subclass
with user-defined content, the return value of this method depends on the creator of the subclass.
If the link is used as a data wrapper (the data is specified as a constructor parameter),
the wrapped data is returned.
- Returns:
- The last link's data if the queue is not empty, null otherwise.
getLastDataType
public java.lang.String getLastDataType()
- Returns the last link's data type. If the last link is an instance of a JSimLink subclass
with user-defined content, the return value of this method depends on the creator of the subclass.
If the link is used as a data wrapper (the data is specified as a constructor parameter),
the wrapped data's type is returned.
- Returns:
- The last link's data type if the queue is not empty, null otherwise.
getCurrentTime
public double getCurrentTime()
- Returns the current time of the simulation that this queue belongs to.
- Returns:
- The current time of the simulation that this queue belongs to.
getLw
public double getLw()
- Returns the mean length of the queue. It makes no sense to calculate this value for
a queue that has just been created. If no simulation time has passed since its creation
NaN (not-a-number) will be returned.
- Returns:
- The mean length of the queue or NaN.
getTw
public double getTw()
- Returns the mean waiting time spent in the queue by all links already removed from the queue.
It makes no sense to calculate this value for a queue without any elements revoved from it.
In such a case, NaN (not-a-number) will be returned.
- Returns:
- The mean waiting time spent in the queue by all links already removed from the queue or NaN.
getTwForAllLinks
public double getTwForAllLinks()
- Returns the mean waiting time spent in the queue by all links ever inserted to the queue.
Both links already removed from the queue and links just now present in the queue are counted.
It makes no sense to calculate this value if no links have been inserted to the queue yet.
In such a case, NaN (not-a-number) is returned.
If this head is used as a FIFO (first in, first out) queue, which it usually is in queueing
network simulations, the returned value is less than the value produced by getTw(). The reason
for this behavior is that all links that have ever been in the queue have the same mean time spent
in it and the links that currently are in the queue have not reached this time yet. So they push
the overall mean time down because they are counted with the same weight as links already removed
from the queue.
- Returns:
- The mean waiting time spent in the queue by all links ever inserted the queue or NaN.
getHead
protected final JSimLink getHead()
- Returns the head of the queue. You should never use this method.
- Returns:
- The head of the queue.
setHead
protected final void setHead(JSimLink newHead)
- Sets a new head of the queue. You should never use this method. It only updates the "head" field,
it does not actually add anything to the head.
- Parameters:
newHead
- The new head of the queue.
putAtHead
protected final void putAtHead(JSimLink newHead)
throws JSimInvalidParametersException
- Adds a link to the head of the queue, doing necessary adjustments.
You should never use this method.
- Parameters:
newHead
- The new head of the queue.
- Throws:
JSimInvalidParametersException
- This exception is thrown out if the link that has to
to become the new head is null.
getTail
protected final JSimLink getTail()
- Returns the tail of the queue. You should never use this method.
- Returns:
- The tail of the queue.
setTail
protected final void setTail(JSimLink newTail)
- Sets a new tail of the queue. You should never use this method. It only updates the "tail" field,
it does not actually add anything to the tail.
- Parameters:
newTail
- The new tail of the queue.
putAtTail
protected final void putAtTail(JSimLink newTail)
throws JSimInvalidParametersException
- Sets a new tail of the queue, doing necessary adjustments. You should never use this method.
- Parameters:
newTail
- The new tail of the queue.
- Throws:
JSimInvalidParametersException
- This exception is thrown out if the link that has to
to become the new tail is null.
incNoOfItems
protected final void incNoOfItems()
- Increments internal counter of links and updates statistics.
You should never directly use this method.
It is assumed that the new link has already been added to the list.
decNoOfItems
protected final void decNoOfItems(double whenEntered)
- Decrements internal counter of links and updates statistics.
You should never directly use this method.
It is assumed that the link has already been removed from the list.
- Parameters:
whenEntered
- The simulation time when the link being removed entered the queue.
getObjectListItemDescription
public java.lang.String getObjectListItemDescription()
- Returns a string containing basic information about the queue.
The string can be displayed in a JSimMainWindowList component.
- Specified by:
getObjectListItemDescription
in interface JSimDisplayable
- Returns:
- A string containing basic information about the queue.
getDetailedInformationArray
public java.util.Collection getDetailedInformationArray()
- Returns a collection with the queue's characteristics. Every characteristics contains a name
and a value. The collection can be displayed in a JSimGUIDetailedInfoWindow table.
- Specified by:
getDetailedInformationArray
in interface JSimDisplayable
- Returns:
- A collection of the queue's characteristics.
createDetailedInfoWindow
public javax.swing.JDialog createDetailedInfoWindow(JSimMainWindow parentWindow)
- Creates a detailed info window that shows information about the queue.
Returns a reference to the created window.
- Specified by:
createDetailedInfoWindow
in interface JSimDisplayable
- Returns:
- A reference to the created info window.
toString
public java.lang.String toString()
- Returns a string representation of the queue. Provided information: number, name, link count.
- Overrides:
toString
in class java.lang.Object
- Returns:
- A string representation of the queue.
compareTo
public int compareTo(java.lang.Object o)
- Compares this head with another one. Returns a negative integer, zero, or a positive integer
as this head is less than, equal to, or greater than the specified object. It is assumed that
the argument is also a JSimHead.
This class has a natural ordering that is fully consistent with equals(). If equals() returns true
for h1 and h2, then compareTo() will return 0 for the same h1 and h2, and vice versa.
- Specified by:
compareTo
in interface java.lang.Comparable
- Returns:
- Zero if the numbers of both heads are equal, a negative number if the number of this
head is less than the other heads's number, and a positive number if the number of this
head is greater than the other heads's number.
- Throws:
java.lang.ClassCastException
- This exception is thrown out when the specified object cannot be
typecasted to JSimHead.
equals
public boolean equals(java.lang.Object o)
- Indicates whether some other object is equal to this one. This implementation compares head numbers
and their simulations' numbers which is actually equal to simple reference comparison because
head numbers are unique for a given simulation and simulation numbers are unique for a given JVM
instance.
Unique head numbers are assured by the constructor and the JSimSimulation.getFreeQueueNumber()
method. Unique simulation numbers are assured by the JSimSimulation constructor.
- Overrides:
equals
in class java.lang.Object
- Parameters:
o
- The reference object with which to compare.
- Returns:
- True if this object is the same as the obj argument, false otherwise.
hashCode
public int hashCode()
- Returns a hash code value for the object. The hash code is computed from the head's number and its
simulation's number using the algorithm described in [UJJ3/166]. This implementation of hash code
computation is fully consistent with equals().
- Overrides:
hashCode
in class java.lang.Object
- Returns:
- A hash code for this head.
Copyright © 2000-2004 University of West Bohemia, FAV-KIV. All Rights Reserved. Build date 20040510.