On Jun 9, 2005, at 4:22 PM, glen e. p. ropella wrote:
> Does RandomSequence work for dynamic data structures? It appears from
> the code:
[snip]
> that we're using a fixed size array. And if that's the case, I'd have
> to recreate the RandomSequence at each cycle, thereby defeating the
> purpose. But, perhaps I'm just not looking deep enough. To resize an
> array, you'd have to replace the old Sequence instance variable with a
> new array (with the new size), right?
Right. But remember that most of the utility Steppables (MultiStep,
Sequence, ParallelSequence, RandomSequence, WeakStep, etc.) are our
attempt to handle the 90% most common needs with some pre-built
Steppable classes that we found useful. There's nothing special about
them.
If you want a resizable array, it's pretty easy to do if you're not
doing parallel threads, something like this:
public class BagSequence implements Steppable
{
public Bag steps;
public Sequence(Bag steps) // steps must be a Bag of Steppables only
{ this.steps = steps; }
public void step(SimState state)
{
for(int x=0;x<steps.numObjs;x++)
{
Steppable s = ((Steppable)(steps.objs[x]);
if (s!=null) s.step(state);
}
}
}
The random shuffling version follows straightforwardly from there.
Note that you have to be careful here because if the Bag does not
contain Steppables, you'll get a ClassCastException. Also, if you
change the Bag from within the step() method of something in the
BagSequence, it'd effect the for-loop of the step() method in
BagSequence in ways that you'd have to think carefully about.
Sean
|