sim.util
Class DoubleBag

java.lang.Object
  extended bysim.util.DoubleBag
All Implemented Interfaces:
java.lang.Cloneable, Indexed, java.io.Serializable

public class DoubleBag
extends java.lang.Object
implements java.io.Serializable, java.lang.Cloneable, Indexed

Maintains a simple array (obj) of doubles and the number of doubles (numObjs) in the array (the array can be bigger than this number). You are encouraged to access the doubles directly; they are stored in positions [0 ... numObjs-1]. If you wish to extend the array, you should call the resize method.

DoubleBag is approximately to double what Bag is to Object. However, for obvious reasons, DoubleBag is not a java.util.Collection subclass and is purposely simple (it doesn't have an Iterator for example).

DoubleBag is not synchronized, and so should not be accessed from different threads without locking on it or some appropriate lock double first. DoubleBag also has an unusual, fast method for removing doubles called remove(...), which removes the double simply by swapping the topmost double into its place. This means that after remove(...) is called, the DoubleBag may no longer have the same order (hence the reason it's called a "DoubleBag" rather than some variant on "Vector" or "Array" or "List"). You can guarantee order by calling removeNondestructively(...) instead if you wish, but this is O(n) in the worst case.

See Also:
Serialized Form

Field Summary
 int numObjs
           
 double[] objs
           
 
Constructor Summary
DoubleBag()
           
DoubleBag(DoubleBag other)
          Adds the doubles from the other DoubleBag without copying them.
 
Method Summary
 boolean add(double obj)
           
 boolean addAll(DoubleBag other)
           
 boolean addAll(int index, double[] other)
           
 boolean addAll(int index, DoubleBag other)
           
 void clear()
           
 java.lang.Object clone()
           
 java.lang.Class componentType()
          Should return the base component type for this Indexed object, or null if the component type should be queried via getValue(index).getClass.getComponentType()
 boolean contains(double o)
           
 double get(int index)
           
 java.lang.Object getValue(int index)
          Throws an IndexOutOfBoundsException if index is inappropriate.
 boolean isEmpty()
           
 double pop()
          Returns 0 if the DoubleBag is empty, else removes and returns the topmost double.
 boolean push(double obj)
          Synonym for add(obj) -- try to use add instead unless you want to think of the DoubleBag as a stack.
 double remove(int index)
          Removes the double at the given index, moving the topmost double into its position.
 double removeNondestructively(int index)
          Removes the double at the given index, shifting the other doubles down.
 void resize(int toAtLeast)
           
 double set(int index, double element)
           
 java.lang.Object setValue(int index, java.lang.Object value)
          Throws an IndexOutOfBoundsException if index is inappropriate, and IllegalArgumentException if the value is inappropriate.
 int size()
           
protected  void throwIndexOutOfBoundsException(int index)
           
 double[] toArray()
           
 double top()
          Returns 0 if the DoubleBag is empty, else returns the topmost double.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

objs

public double[] objs

numObjs

public int numObjs
Constructor Detail

DoubleBag

public DoubleBag()

DoubleBag

public DoubleBag(DoubleBag other)
Adds the doubles from the other DoubleBag without copying them. The size of the new DoubleBag is the minimum necessary size to hold the doubles.

Method Detail

size

public int size()
Specified by:
size in interface Indexed

isEmpty

public boolean isEmpty()

addAll

public boolean addAll(int index,
                      double[] other)

addAll

public boolean addAll(DoubleBag other)

addAll

public boolean addAll(int index,
                      DoubleBag other)

clone

public java.lang.Object clone()
                       throws java.lang.CloneNotSupportedException
Throws:
java.lang.CloneNotSupportedException

resize

public void resize(int toAtLeast)

top

public double top()
Returns 0 if the DoubleBag is empty, else returns the topmost double.


pop

public double pop()
Returns 0 if the DoubleBag is empty, else removes and returns the topmost double.


push

public boolean push(double obj)
Synonym for add(obj) -- try to use add instead unless you want to think of the DoubleBag as a stack.


add

public boolean add(double obj)

contains

public boolean contains(double o)

get

public double get(int index)

getValue

public java.lang.Object getValue(int index)
Description copied from interface: Indexed
Throws an IndexOutOfBoundsException if index is inappropriate. Not called get() because this would conflict with get() methods in IntBag etc. which don't return objects.

Specified by:
getValue in interface Indexed

set

public double set(int index,
                  double element)

setValue

public java.lang.Object setValue(int index,
                                 java.lang.Object value)
Description copied from interface: Indexed
Throws an IndexOutOfBoundsException if index is inappropriate, and IllegalArgumentException if the value is inappropriate. Not called set() in order to be consistent with getValue(...)

Specified by:
setValue in interface Indexed

removeNondestructively

public double removeNondestructively(int index)
Removes the double at the given index, shifting the other doubles down.


remove

public double remove(int index)
Removes the double at the given index, moving the topmost double into its position.


throwIndexOutOfBoundsException

protected void throwIndexOutOfBoundsException(int index)

clear

public void clear()

toArray

public double[] toArray()

componentType

public java.lang.Class componentType()
Description copied from interface: Indexed
Should return the base component type for this Indexed object, or null if the component type should be queried via getValue(index).getClass.getComponentType()

Specified by:
componentType in interface Indexed