Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: alice/respect/EventSetImpl.java


1   /*
2    * EventSetImpl.java
3    *
4    * Copyright 2000-2001 deis.unibo.it
5    *
6    * This software is the proprietary information of deis.unibo.it
7    * Use is subject to license terms.
8    *
9    */
10  package alice.respect;
11  
12  import alice.tuplemedium.AgentId;
13  import alice.tuplemedium.Event;
14  import alice.tuplemedium.EventSet;
15  import alice.tuplemedium.TupleSet;
16  
17  import java.util.*;
18  
19  
20  /**
21   * Naive implementation of the EventSet interface,
22   * defining the behaviour of the component
23   * managin vm events storage.
24   */
25  public class EventSetImpl implements EventSet {
26  
27      private ArrayList events;
28      private Random rand = new Random();
29  
30      public EventSetImpl(){
31          events=new ArrayList();
32      }
33  
34      public void add(Event t){
35          events.add(t);
36      }
37  
38      public void sub(Event t){
39          events.remove(t);
40      }
41  
42      public boolean isEmpty(){
43          return events.isEmpty();
44      }
45  
46      public void empty(){
47          events.clear();
48      }
49  
50      public int size(){
51          return events.size();
52      }
53  
54      // not-deterministic get + remove
55      public Event get(){
56          //return (Event)events.remove(0);
57          return (Event)events.remove(rand.nextInt(events.size()));
58      }
59  
60      // not-deterministic get of an event with a matching tuple + remove
61      public Event getFirstMatching(TupleSet tset){
62          int maxIndex=events.size();
63          while (maxIndex>0) {
64              int index=rand.nextInt(maxIndex);
65              Event ev=(Event)events.get(index);
66              if (tset.hasMatchingTuple(ev.template)){
67                  events.remove(index);
68                  return ev;
69              } else {
70                  Event com=(Event)events.get(index);
71                  events.set(index,events.get(maxIndex-1));
72                  events.set(maxIndex-1,com);
73                  maxIndex--;
74              }
75          }
76          return null;
77      }
78  
79      public Iterator getIterator(){
80          return events.listIterator();
81      }
82  
83      public void removeEventsOf(AgentId id){
84          Iterator it=events.listIterator();
85          while (it.hasNext()){
86              Event ev=(Event)it.next();
87              if (ev.idAgent.toString().equals(id.toString())){
88                  it.remove();
89              }
90          }
91      }
92  }
93  
94