sim/util

This package holds utility classes on which MASON relies to do its 
magic, but which don't have anything to do with MASON per se.  All of 
these classes can be extracted and used for other tasks and don't rely 
on anything outside of sim/util.

The subpackages are:

gui		Utility classes for GUI development
media		Utility classes for media: pictures, movies, charts, etc.


Classes:


Heap.java

A basic binomial heap.


Bag.java

A replacement for ArrayList, as ArrayList appears to have been coded by 
monkeys.  Bag's add, set, and get methods are much faster than 
ArrayList.  Additionally, Bag gives you direct access to the array if 
you need more speed still.


IntBag.java

The same class as Bag, but which stores integers rather than Objects.


DoubleBag.java

The same class as Bag, but which stores doubles rather than Objects.


Int2D.java

An immutable (non-changeable) object storing two integers, x and y.  
Properly hashes by value.


MutableInt2D.java

A mutable object storing two integers, x and y.  Essentially the same 
object as java.awt.Point, only with hashing equal to Int2D.  Further, 
Point's hashing is basically broken (Point also appears to have been 
written by the mentally deficient).


Int3D.java

An immutable (non-changeable) object storing three integers, x, y, and 
z.  Properly hashes by value.


MutableInt3D.java

A mutable object storing three integers, x, y, and z, and which hashes 
equivalently to Int3D.


Double2D.java

An immutable (non-changeable) object storing two doubles, x and y. 
Properly hashes by value.


MutableDouble3D.java

A mutable object storing two doubles, x and y.  Essentially the same 
object as java.awt.Point2D.Double, only with hashing equal to Double2D.  
Like java.awt.Point, java.awt.Point2D.Double appears to have been 
written by morons.


Double3D.java

An immutable (non-changeable) object storing three doubles, x, y, and z.  
Properly hashes by value.


MutableDoubleD.java

A mutable object storing three doubles, x, y, and z, and which hashes 
equivalently to Double3D.


DoubleDimension2D.java


A concrete subclass of java.awt.Dimension2D which uses doubles or 
floats.  Oddly, Java didn't provide this (though they have ones for 
Rectangle and Point).


MutableDouble.java

A simple class which holds a double and can be modified.  Sort of like a 
mutable version of java.lang.Double.


Interval.java

A simple class declaring a numerical range.


Indexed.java

A simpler interface than the one for List for accessing random-access 
objects in a vector.


Valuable.java

A declaration that a particular object returns a double 'value'.


Propertied.java

A declaration that a particular object provides Java Bean properties 
dynamically rather than by being scanned.


Proxiable.java

A declaration that a particular object will provide a *different* object 
to stand for it with regard to Java Bean properties.


Properties.java

A abstract superclass class for Properties-examining classes.


SimpleProperties.java

A class for examining and manipulating the Java Bean Properties of an 
object.  Subclasses from Properties.java.


CollectionPropertis.java

A class for examining and manipulating the slots of an array, Bag, List, 
etc. as if they were Java Bean Properties.  Subclasses from 
Properties.java.


WordWrap.java

A simple class for doing basic word wrapping in text fields and labels.


CausedRuntimeException.java

A simple RuntimeException which stores an additional Throwable as its 
"cause".  This is standard fare in Java versions 1.4 and further but in 
1.3 it doesn't exist.  Now it does!


Utilities.java

A collection of random utility methods which don't fit anywhere else.
