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