Print

Print


Hi Michael.  MASON doesn't have these built-in, but the following  
should do the trick.  This is a place where Bag significantly  
outperforms ArrayList.  Note that if you're using ParallelSequence or  
AsynchronousSteppable, you don't want to add objects to the list from  
within those threads as it'd create a race condition that's not  
checked for in the code below.

Sean

public class ExpandableSequence implements Steppable
	{
	public Bag steps;

	public ExpandableSequence(Bag steps) { this.steps = steps; }
	public ExpandableSequence() { this.steps = new Bag(); }
	public ExpandableSequence(Steppable[] steps) { this.steps = new Bag 
(steps); }
	public void step(SimState state)
		{
		for(int x=0;x<steps.numObjs; x++)
			((Steppable)(steps.objs[x])).step(state);
		}
	}


public class RandomExpandableSequence extends ExpandableSequence
	{
	public RandomExpandableSequence(Bag steps) { super(steps); }
	public RandomExpandableSequence() { super(); }
	public RandomExpandableSequence(Steppable[] steps) { super(steps); }

	public void step(SimState state)
		{
		synchronized(state.random)
			{ steps.shuffle(state.random); }
		super.step(state);
		}
	}


On Apr 4, 2006, at 11:04 AM, Michael Lees wrote:

> Hi,
>
> This is my first post to the list, I've been using mason for a few  
> weeks now.
>
> I'm using the Sequence class but have found the steps array  
> inflexible in terms of adding new Steppables during execution.
>
> I've implemented an ExpandableSequence which uses an arrayList  
> rather than an array. I was wondering if something already exists  
> for this? I might use RandomSequence at some point, which would  
> mean re-implementing RandomSequence to extend ExpandableSequence.