Example #1
0
 public History getSnapshot(int time) {
   // Create a snapshot of the receiver at the supplied time...
   History snapshot = new History();
   snapshot.startOfTime = time;
   snapshot.endOfTime = time;
   snapshot.behaviourChangedEvents = new Vector<BehaviourChanged>();
   snapshot.consumeEvents = new Vector<Consume>();
   snapshot.newActorEvents = new Vector<NewActor>();
   snapshot.sendEvents = new Vector<Send>();
   snapshot.stateEvents = new Hashtable<Integer, Hashtable<Key, Stack<State>>>();
   for (NewActor newActor : newActorEvents) {
     if (newActor.getTime() <= time) {
       BehaviourChanged b = null;
       for (BehaviourChanged b1 : behaviourChangedEvents) {
         if (b1.getId() == newActor.getId()
             && b1.getTime() <= time
             && b1.getTime() > newActor.getTime()
             && (b == null || b1.getTime() > b.getTime())) b = b1;
       }
       if (b == null)
         snapshot.newActorEvents.add(
             new NewActor(newActor.getId(), newActor.getBehaviour(), time));
       else snapshot.newActorEvents.add(new NewActor(newActor.getId(), b.getNewBehaviour(), time));
     }
   }
   for (Consume consume : consumeEvents) {
     if (consume.getTime() == time) snapshot.consumeEvents.add(consume);
   }
   for (Send send : sendEvents) {
     if (send.getTime() == time) snapshot.sendEvents.add(send);
   }
   for (int id : stateEvents.keySet()) {
     for (Key field : stateEvents.get(id).keySet()) {
       Stack<State> stack = stateEvents.get(id).get(field);
       if (!stack.isEmpty()) {
         State state = stack.peek();
         if (state.getTime() <= time)
           snapshot.state(id, field.getString(), state.getValue(), time);
       }
     }
   }
   return snapshot;
 }